@xcanwin/manyoyo 6.1.3 → 6.2.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/lib/web/frontend/app.css +196 -389
- package/lib/web/frontend/app.html +19 -39
- package/lib/web/frontend/app.js +239 -274
- package/lib/web/frontend/chat-behavior.js +23 -4
- package/package.json +1 -1
package/lib/web/frontend/app.css
CHANGED
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
--line: #d9c7ad;
|
|
15
15
|
--line-strong: #b59263;
|
|
16
|
-
--line-soft: rgba(181, 146, 99, 0.26);
|
|
17
16
|
--line-medium: rgba(181, 146, 99, 0.4);
|
|
18
17
|
--tree-guide: rgba(181, 146, 99, 0.44);
|
|
19
18
|
--tree-guide-soft: rgba(181, 146, 99, 0.44);
|
|
19
|
+
--tree-active: #ecdfc8;
|
|
20
20
|
|
|
21
21
|
--surface-panel: linear-gradient(180deg, rgba(255, 255, 255, 0.88) 0%, rgba(252, 246, 236, 0.88) 100%);
|
|
22
22
|
|
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
|
|
26
26
|
--accent: #c4551f;
|
|
27
27
|
--accent-strong: #9d4418;
|
|
28
|
-
--accent-soft: #fee4d6;
|
|
29
28
|
|
|
30
29
|
--subaccent: #0f7c72;
|
|
31
30
|
--subaccent-strong: #0a655e;
|
|
@@ -35,14 +34,9 @@
|
|
|
35
34
|
--danger-strong: #962824;
|
|
36
35
|
--danger-soft: #ffe8e5;
|
|
37
36
|
|
|
38
|
-
--status-running-bg: #e0f5ef;
|
|
39
37
|
--status-running-text: #0c695f;
|
|
40
|
-
--status-stopped-bg: #fff0dd;
|
|
41
38
|
--status-stopped-text: #9a5a09;
|
|
42
|
-
--status-history-bg: #ece7df;
|
|
43
|
-
--status-history-text: #645647;
|
|
44
39
|
--tree-history-text: #b7b0a7;
|
|
45
|
-
--status-unknown-bg: #ece9ff;
|
|
46
40
|
--status-unknown-text: #5a4bb0;
|
|
47
41
|
|
|
48
42
|
--user-bubble: #fee9dd;
|
|
@@ -53,7 +47,6 @@
|
|
|
53
47
|
--terminal-fg: #e8edf5;
|
|
54
48
|
--terminal-cursor: #ffd166;
|
|
55
49
|
|
|
56
|
-
--shadow-soft: 0 14px 34px rgba(44, 31, 15, 0.16);
|
|
57
50
|
--shadow-strong: 0 24px 54px rgba(44, 31, 15, 0.24);
|
|
58
51
|
}
|
|
59
52
|
|
|
@@ -160,13 +153,6 @@ body::after {
|
|
|
160
153
|
text-transform: uppercase;
|
|
161
154
|
}
|
|
162
155
|
|
|
163
|
-
.brand-sub {
|
|
164
|
-
color: var(--muted);
|
|
165
|
-
font-size: 11px;
|
|
166
|
-
letter-spacing: 0.3px;
|
|
167
|
-
text-transform: uppercase;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
156
|
.sidebar-actions {
|
|
171
157
|
display: inline-flex;
|
|
172
158
|
gap: 8px;
|
|
@@ -258,12 +244,6 @@ textarea:focus-visible {
|
|
|
258
244
|
display: none;
|
|
259
245
|
}
|
|
260
246
|
|
|
261
|
-
.mobile-actions-toggle {
|
|
262
|
-
display: inline-flex;
|
|
263
|
-
padding: 8px 12px;
|
|
264
|
-
font-size: 13px;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
247
|
.sidebar-backdrop[hidden] {
|
|
268
248
|
display: none !important;
|
|
269
249
|
}
|
|
@@ -538,136 +518,6 @@ textarea:focus-visible {
|
|
|
538
518
|
border-radius: 8px;
|
|
539
519
|
}
|
|
540
520
|
|
|
541
|
-
.session-item {
|
|
542
|
-
text-align: left;
|
|
543
|
-
width: 100%;
|
|
544
|
-
border: 1px solid var(--line);
|
|
545
|
-
background: var(--panel-strong);
|
|
546
|
-
color: var(--text);
|
|
547
|
-
border-radius: 10px;
|
|
548
|
-
padding: 11px 11px 11px 10px;
|
|
549
|
-
animation: itemIn 220ms ease both;
|
|
550
|
-
animation-delay: calc(var(--item-index, 0) * 30ms);
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
.session-item:hover {
|
|
554
|
-
border-color: #d1aa7f;
|
|
555
|
-
background: #fff8ef;
|
|
556
|
-
box-shadow: inset 3px 0 0 #d39c6d;
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
.session-item.active {
|
|
560
|
-
border-color: #c68d5a;
|
|
561
|
-
background: #fff3e8;
|
|
562
|
-
box-shadow: inset 3px 0 0 var(--accent), 0 0 0 2px rgba(196, 85, 31, 0.14);
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
.session-item.status-history:not(.active),
|
|
566
|
-
.session-item.status-stopped:not(.active),
|
|
567
|
-
.session-item.status-unknown:not(.active) {
|
|
568
|
-
border-color: rgba(181, 146, 99, 0.22);
|
|
569
|
-
background: rgba(255, 252, 247, 0.72);
|
|
570
|
-
box-shadow: none;
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
.session-item.status-history:not(.active) .session-name,
|
|
574
|
-
.session-item.status-history:not(.active) .session-meta,
|
|
575
|
-
.session-item.status-history:not(.active) .session-time,
|
|
576
|
-
.session-item.status-stopped:not(.active) .session-name,
|
|
577
|
-
.session-item.status-stopped:not(.active) .session-meta,
|
|
578
|
-
.session-item.status-stopped:not(.active) .session-time,
|
|
579
|
-
.session-item.status-unknown:not(.active) .session-name,
|
|
580
|
-
.session-item.status-unknown:not(.active) .session-meta,
|
|
581
|
-
.session-item.status-unknown:not(.active) .session-time {
|
|
582
|
-
opacity: 0.25;
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
.session-name {
|
|
586
|
-
font-size: 13px;
|
|
587
|
-
font-weight: 700;
|
|
588
|
-
margin-bottom: 6px;
|
|
589
|
-
word-break: break-all;
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
.session-meta {
|
|
593
|
-
display: flex;
|
|
594
|
-
align-items: center;
|
|
595
|
-
gap: 7px;
|
|
596
|
-
font-size: 12px;
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
.session-status {
|
|
600
|
-
border-radius: 999px;
|
|
601
|
-
padding: 2px 8px;
|
|
602
|
-
font-weight: 700;
|
|
603
|
-
font-size: 11px;
|
|
604
|
-
line-height: 1.4;
|
|
605
|
-
border: 1px solid transparent;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
.session-status.running {
|
|
609
|
-
background: var(--status-running-bg);
|
|
610
|
-
color: var(--status-running-text);
|
|
611
|
-
border-color: #a9dacf;
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
.session-status.stopped {
|
|
615
|
-
background: var(--status-stopped-bg);
|
|
616
|
-
color: var(--status-stopped-text);
|
|
617
|
-
border-color: #edc98e;
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
.session-status.history {
|
|
621
|
-
background: var(--status-history-bg);
|
|
622
|
-
color: var(--status-history-text);
|
|
623
|
-
border-color: #d8cebe;
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
.session-status.unknown {
|
|
627
|
-
background: var(--status-unknown-bg);
|
|
628
|
-
color: var(--status-unknown-text);
|
|
629
|
-
border-color: #cac1fb;
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
.session-count {
|
|
633
|
-
color: var(--muted);
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
.session-time {
|
|
637
|
-
margin-top: 6px;
|
|
638
|
-
font-size: 11px;
|
|
639
|
-
color: #7b6d5d;
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
.workbench-group {
|
|
643
|
-
display: flex;
|
|
644
|
-
flex-direction: column;
|
|
645
|
-
gap: 10px;
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
button.tree-toggle {
|
|
649
|
-
width: 100%;
|
|
650
|
-
text-align: left;
|
|
651
|
-
color: var(--text);
|
|
652
|
-
background: rgba(255, 250, 242, 0.92);
|
|
653
|
-
border-color: rgba(181, 146, 99, 0.38);
|
|
654
|
-
padding: 10px 12px;
|
|
655
|
-
display: flex;
|
|
656
|
-
align-items: flex-start;
|
|
657
|
-
justify-content: flex-start;
|
|
658
|
-
gap: 0;
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
button.tree-toggle:hover {
|
|
662
|
-
transform: none;
|
|
663
|
-
background: #fff6eb;
|
|
664
|
-
border-color: #d1aa7f;
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
button.tree-toggle:active {
|
|
668
|
-
transform: none;
|
|
669
|
-
}
|
|
670
|
-
|
|
671
521
|
.tree-node-block,
|
|
672
522
|
.tree-node-children {
|
|
673
523
|
display: flex;
|
|
@@ -682,9 +532,9 @@ button.tree-toggle:active {
|
|
|
682
532
|
column-gap: 8px;
|
|
683
533
|
}
|
|
684
534
|
|
|
685
|
-
.tree-node-row.tree-node-row-container
|
|
535
|
+
.tree-node-row.tree-node-row-container,
|
|
536
|
+
.tree-node-row.tree-node-row-agent {
|
|
686
537
|
position: relative;
|
|
687
|
-
grid-template-columns: auto minmax(0, 1fr);
|
|
688
538
|
}
|
|
689
539
|
|
|
690
540
|
.tree-prefix {
|
|
@@ -802,17 +652,17 @@ button.tree-toggle:active {
|
|
|
802
652
|
.tree-node-button {
|
|
803
653
|
width: 100%;
|
|
804
654
|
text-align: left;
|
|
805
|
-
border: 1px solid
|
|
806
|
-
background:
|
|
655
|
+
border: 1px solid transparent;
|
|
656
|
+
background: transparent;
|
|
807
657
|
color: var(--text);
|
|
808
|
-
border-radius:
|
|
658
|
+
border-radius: 10px;
|
|
809
659
|
padding: 10px 11px;
|
|
660
|
+
transition: background-color 120ms ease;
|
|
810
661
|
}
|
|
811
662
|
|
|
812
663
|
.tree-node-button:hover {
|
|
813
664
|
transform: none;
|
|
814
|
-
|
|
815
|
-
background: #fff8ef;
|
|
665
|
+
background: var(--panel-soft);
|
|
816
666
|
}
|
|
817
667
|
|
|
818
668
|
.tree-node-button:active {
|
|
@@ -825,9 +675,7 @@ button.tree-toggle:active {
|
|
|
825
675
|
}
|
|
826
676
|
|
|
827
677
|
.tree-node-button.active {
|
|
828
|
-
|
|
829
|
-
background: #fff3e8;
|
|
830
|
-
box-shadow: inset 3px 0 0 var(--accent), 0 0 0 2px rgba(196, 85, 31, 0.14);
|
|
678
|
+
background: var(--tree-active);
|
|
831
679
|
}
|
|
832
680
|
|
|
833
681
|
.tree-node-button.tree-node-tone-history .tree-node-title,
|
|
@@ -836,17 +684,12 @@ button.tree-toggle:active {
|
|
|
836
684
|
}
|
|
837
685
|
|
|
838
686
|
.tree-node-block.has-active > .tree-node-row > .tree-node-button:not(.active) {
|
|
839
|
-
|
|
840
|
-
box-shadow: 0 0 0 2px rgba(196, 85, 31, 0.08);
|
|
841
|
-
}
|
|
842
|
-
|
|
843
|
-
.tree-node-button-directory,
|
|
844
|
-
.tree-node-button-container {
|
|
845
|
-
background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(249, 242, 232, 0.98) 100%);
|
|
687
|
+
background: var(--panel-soft);
|
|
846
688
|
}
|
|
847
689
|
|
|
848
|
-
.tree-node-row-container .tree-node-button-container
|
|
849
|
-
|
|
690
|
+
.tree-node-row-container .tree-node-button-container,
|
|
691
|
+
.tree-node-row-agent .tree-node-button-agent {
|
|
692
|
+
padding-right: 38px;
|
|
850
693
|
}
|
|
851
694
|
|
|
852
695
|
.tree-node-main {
|
|
@@ -899,32 +742,95 @@ button.tree-toggle:active {
|
|
|
899
742
|
color: var(--status-unknown-text);
|
|
900
743
|
}
|
|
901
744
|
|
|
902
|
-
.tree-node-
|
|
745
|
+
.tree-node-menu {
|
|
903
746
|
position: absolute;
|
|
904
747
|
top: 50%;
|
|
905
|
-
right:
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
gap: 6px;
|
|
748
|
+
right: 6px;
|
|
749
|
+
z-index: 9;
|
|
750
|
+
transform: translateY(-50%);
|
|
909
751
|
opacity: 0;
|
|
910
752
|
pointer-events: none;
|
|
911
|
-
|
|
912
|
-
transition: opacity 140ms ease, transform 140ms ease;
|
|
753
|
+
transition: opacity 140ms ease;
|
|
913
754
|
}
|
|
914
755
|
|
|
915
|
-
.tree-node-row
|
|
916
|
-
.tree-node-
|
|
756
|
+
.tree-node-row:hover .tree-node-menu,
|
|
757
|
+
.tree-node-menu:focus-within,
|
|
758
|
+
.tree-node-menu.is-open {
|
|
917
759
|
opacity: 1;
|
|
918
760
|
pointer-events: auto;
|
|
919
|
-
transform: translateY(-50%) translateX(0);
|
|
920
761
|
}
|
|
921
762
|
|
|
922
|
-
.tree-node-menu-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
763
|
+
.tree-node-menu.is-open {
|
|
764
|
+
z-index: 20;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
@media (hover: none) {
|
|
768
|
+
.tree-node-menu {
|
|
769
|
+
opacity: 1;
|
|
770
|
+
pointer-events: auto;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.tree-node-menu-trigger {
|
|
775
|
+
width: 26px;
|
|
776
|
+
height: 26px;
|
|
777
|
+
padding: 0;
|
|
778
|
+
display: inline-flex;
|
|
779
|
+
align-items: center;
|
|
780
|
+
justify-content: center;
|
|
781
|
+
border-radius: 8px;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
.tree-node-menu-trigger svg {
|
|
785
|
+
width: 14px;
|
|
786
|
+
height: 14px;
|
|
787
|
+
fill: currentColor;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
.tree-node-menu-panel {
|
|
791
|
+
position: absolute;
|
|
792
|
+
top: calc(100% + 4px);
|
|
793
|
+
right: 0;
|
|
794
|
+
z-index: 9;
|
|
795
|
+
width: max-content;
|
|
796
|
+
min-width: 140px;
|
|
797
|
+
padding: 6px;
|
|
798
|
+
border: 1px solid var(--line);
|
|
799
|
+
border-radius: 10px;
|
|
800
|
+
background: #fffaf2;
|
|
801
|
+
box-shadow: var(--shadow-strong);
|
|
802
|
+
display: flex;
|
|
803
|
+
flex-direction: column;
|
|
804
|
+
gap: 2px;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
.tree-node-menu-panel[hidden] {
|
|
808
|
+
display: none;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
.tree-node-menu-panel-item {
|
|
812
|
+
width: 100%;
|
|
813
|
+
text-align: left;
|
|
814
|
+
border: none;
|
|
815
|
+
background: transparent;
|
|
816
|
+
color: var(--text);
|
|
817
|
+
font-weight: 600;
|
|
818
|
+
font-size: 12px;
|
|
819
|
+
padding: 7px 9px;
|
|
820
|
+
border-radius: 6px;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
.tree-node-menu-panel-item:hover {
|
|
824
|
+
transform: none;
|
|
825
|
+
background: var(--panel-soft);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
.tree-node-menu-panel-item.is-danger {
|
|
829
|
+
color: var(--danger);
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
.tree-node-menu-panel-item.is-danger:hover {
|
|
833
|
+
background: var(--danger-soft);
|
|
928
834
|
}
|
|
929
835
|
|
|
930
836
|
.tree-node-children[hidden] {
|
|
@@ -996,8 +902,9 @@ button.tree-toggle:active {
|
|
|
996
902
|
display: grid;
|
|
997
903
|
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
998
904
|
gap: 0;
|
|
999
|
-
|
|
1000
|
-
|
|
905
|
+
/* 和 #messages / .composer 用同一个 --surface-panel,避免包裹它们的这层
|
|
906
|
+
在缝隙处显得比内容区更深一截 */
|
|
907
|
+
background: var(--surface-panel);
|
|
1001
908
|
animation: panelIn 360ms ease 60ms both;
|
|
1002
909
|
}
|
|
1003
910
|
|
|
@@ -1015,51 +922,18 @@ button.tree-toggle:active {
|
|
|
1015
922
|
flex: 1;
|
|
1016
923
|
min-width: 0;
|
|
1017
924
|
display: flex;
|
|
1018
|
-
flex-direction: column;
|
|
1019
|
-
gap: 8px;
|
|
1020
|
-
}
|
|
1021
|
-
|
|
1022
|
-
.header-main-top {
|
|
1023
|
-
display: flex;
|
|
1024
|
-
align-items: center;
|
|
1025
|
-
gap: 8px;
|
|
1026
|
-
min-width: 0;
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
.header-menu {
|
|
1030
|
-
position: relative;
|
|
1031
|
-
flex: none;
|
|
1032
|
-
}
|
|
1033
|
-
|
|
1034
|
-
#activeTitle {
|
|
1035
|
-
margin: 0;
|
|
1036
|
-
font-family: var(--font-display);
|
|
1037
|
-
font-size: 22px;
|
|
1038
|
-
font-weight: 700;
|
|
1039
|
-
line-height: 1.12;
|
|
1040
|
-
letter-spacing: 0.4px;
|
|
1041
|
-
word-break: break-all;
|
|
1042
|
-
}
|
|
1043
|
-
|
|
1044
|
-
.header-main-top #activeTitle {
|
|
1045
|
-
flex: 1;
|
|
1046
|
-
min-width: 0;
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
|
-
#activeMeta {
|
|
1050
|
-
margin-top: 2px;
|
|
1051
|
-
font-size: 12px;
|
|
1052
|
-
color: var(--muted);
|
|
1053
925
|
}
|
|
1054
926
|
|
|
1055
927
|
.workbench-tabs {
|
|
1056
|
-
|
|
928
|
+
flex: 1;
|
|
929
|
+
display: flex;
|
|
1057
930
|
flex-wrap: wrap;
|
|
931
|
+
align-items: center;
|
|
1058
932
|
gap: 8px;
|
|
1059
933
|
}
|
|
1060
934
|
|
|
1061
935
|
.workbench-tabs button.is-active,
|
|
1062
|
-
.composer-
|
|
936
|
+
.composer-options-panel button.is-active {
|
|
1063
937
|
color: #ffffff;
|
|
1064
938
|
background: var(--accent);
|
|
1065
939
|
border-color: var(--accent-strong);
|
|
@@ -1068,6 +942,8 @@ button.tree-toggle:active {
|
|
|
1068
942
|
.workspace-switcher {
|
|
1069
943
|
position: relative;
|
|
1070
944
|
display: inline-flex;
|
|
945
|
+
/* 始终贴住这一行的右侧:桌面端只有它自己时贴最右,移动端"会话"贴最左时它仍贴最右 */
|
|
946
|
+
margin-left: auto;
|
|
1071
947
|
}
|
|
1072
948
|
|
|
1073
949
|
.workspace-switcher-btn {
|
|
@@ -1095,7 +971,8 @@ button.tree-toggle:active {
|
|
|
1095
971
|
display: none;
|
|
1096
972
|
position: absolute;
|
|
1097
973
|
top: calc(100% + 8px);
|
|
1098
|
-
|
|
974
|
+
/* 触发按钮固定贴住这一行右侧,面板也从右边缘向左展开,避免在宽屏下超出视口 */
|
|
975
|
+
right: 0;
|
|
1099
976
|
z-index: 8;
|
|
1100
977
|
width: max-content;
|
|
1101
978
|
padding: 8px;
|
|
@@ -1115,26 +992,6 @@ body.workspace-switcher-open .workspace-switcher-panel {
|
|
|
1115
992
|
text-align: left;
|
|
1116
993
|
}
|
|
1117
994
|
|
|
1118
|
-
.header-actions {
|
|
1119
|
-
display: none;
|
|
1120
|
-
position: absolute;
|
|
1121
|
-
top: calc(100% + 8px);
|
|
1122
|
-
right: 0;
|
|
1123
|
-
z-index: 8;
|
|
1124
|
-
width: min(240px, calc(100vw - 36px));
|
|
1125
|
-
padding: 8px;
|
|
1126
|
-
border: 1px solid var(--line);
|
|
1127
|
-
border-radius: 10px;
|
|
1128
|
-
background: #fffaf2;
|
|
1129
|
-
box-shadow: var(--shadow-strong);
|
|
1130
|
-
grid-template-columns: 1fr;
|
|
1131
|
-
gap: 8px;
|
|
1132
|
-
}
|
|
1133
|
-
|
|
1134
|
-
body.mobile-actions-open .header-actions {
|
|
1135
|
-
display: grid;
|
|
1136
|
-
}
|
|
1137
|
-
|
|
1138
995
|
.workspace-shell {
|
|
1139
996
|
min-height: 0;
|
|
1140
997
|
height: 100%;
|
|
@@ -1166,8 +1023,7 @@ body.mobile-actions-open .header-actions {
|
|
|
1166
1023
|
min-height: 0;
|
|
1167
1024
|
overflow-y: auto;
|
|
1168
1025
|
margin: 0;
|
|
1169
|
-
padding: 14px;
|
|
1170
|
-
border: 1px solid var(--line);
|
|
1026
|
+
padding: 14px 14px 44px;
|
|
1171
1027
|
border-radius: 14px;
|
|
1172
1028
|
display: flex;
|
|
1173
1029
|
flex-direction: column;
|
|
@@ -1665,6 +1521,19 @@ body.terminal-mode .composer {
|
|
|
1665
1521
|
animation-delay: 0ms;
|
|
1666
1522
|
}
|
|
1667
1523
|
|
|
1524
|
+
/* .msg-actions 悬浮浮层会伸到气泡下方,给带浮层的消息多留一点底部间距,
|
|
1525
|
+
让浮层完整落在消息之间的空白里,不需要靠 z-index 去抢下一条消息的地盘 */
|
|
1526
|
+
.msg:has(.msg-actions) {
|
|
1527
|
+
margin-bottom: 20px;
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1530
|
+
.msg:last-child {
|
|
1531
|
+
/* animation 会让每条消息各自建立独立的层叠上下文(transform/opacity 动画的副作用);
|
|
1532
|
+
只有最后一条消息的浮层可能伸到吸底 composer(移动端 position: sticky, z-index: 3)
|
|
1533
|
+
的区域里,需要显式盖过它 */
|
|
1534
|
+
z-index: 4;
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1668
1537
|
.msg.user {
|
|
1669
1538
|
align-self: flex-end;
|
|
1670
1539
|
}
|
|
@@ -1708,20 +1577,39 @@ body.terminal-mode .composer {
|
|
|
1708
1577
|
}
|
|
1709
1578
|
|
|
1710
1579
|
.msg-actions {
|
|
1580
|
+
position: absolute;
|
|
1581
|
+
top: 100%;
|
|
1582
|
+
/* 用 padding-top 而不是 margin-top 留白:margin 在盒子外,鼠标从气泡移到按钮
|
|
1583
|
+
之间会经过一段没有任何元素承接的"死区",:hover 提前丢失导致按钮还没碰到就消失;
|
|
1584
|
+
padding 仍属于本元素的可命中区域,鼠标全程都在同一个悬浮触发范围内 */
|
|
1585
|
+
padding-top: 4px;
|
|
1711
1586
|
display: flex;
|
|
1712
1587
|
gap: 6px;
|
|
1713
1588
|
opacity: 0;
|
|
1589
|
+
pointer-events: none;
|
|
1714
1590
|
transition: opacity 140ms ease;
|
|
1591
|
+
z-index: 1;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
.msg.user .msg-actions {
|
|
1595
|
+
right: 0;
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
.msg.assistant .msg-actions,
|
|
1599
|
+
.msg.system .msg-actions {
|
|
1600
|
+
left: 0;
|
|
1715
1601
|
}
|
|
1716
1602
|
|
|
1717
1603
|
.msg:hover .msg-actions,
|
|
1718
1604
|
.msg:focus-within .msg-actions {
|
|
1719
1605
|
opacity: 1;
|
|
1606
|
+
pointer-events: auto;
|
|
1720
1607
|
}
|
|
1721
1608
|
|
|
1722
1609
|
@media (hover: none) {
|
|
1723
1610
|
.msg-actions {
|
|
1724
1611
|
opacity: 1;
|
|
1612
|
+
pointer-events: auto;
|
|
1725
1613
|
}
|
|
1726
1614
|
}
|
|
1727
1615
|
|
|
@@ -1739,6 +1627,9 @@ body.terminal-mode .composer {
|
|
|
1739
1627
|
|
|
1740
1628
|
.msg-copy-btn:hover {
|
|
1741
1629
|
color: var(--accent-strong);
|
|
1630
|
+
/* 不显式设置背景色的话,通用 button:hover 规则的深色背景会覆盖进来,
|
|
1631
|
+
和同色系的文字撞色看不清,这里只需要比默认背景微微变深 */
|
|
1632
|
+
background: #f0e6d3;
|
|
1742
1633
|
border-color: var(--line-strong);
|
|
1743
1634
|
}
|
|
1744
1635
|
|
|
@@ -1748,25 +1639,8 @@ body.terminal-mode .composer {
|
|
|
1748
1639
|
background: var(--subaccent-soft);
|
|
1749
1640
|
}
|
|
1750
1641
|
|
|
1751
|
-
.msg-exit {
|
|
1752
|
-
font-family: var(--font-mono);
|
|
1753
|
-
font-size: 11px;
|
|
1754
|
-
letter-spacing: 0.1px;
|
|
1755
|
-
color: var(--muted);
|
|
1756
|
-
}
|
|
1757
|
-
|
|
1758
|
-
.msg.user .msg-exit {
|
|
1759
|
-
align-self: flex-end;
|
|
1760
|
-
text-align: right;
|
|
1761
|
-
}
|
|
1762
|
-
|
|
1763
|
-
.msg.assistant .msg-exit,
|
|
1764
|
-
.msg.system .msg-exit {
|
|
1765
|
-
align-self: flex-start;
|
|
1766
|
-
text-align: left;
|
|
1767
|
-
}
|
|
1768
|
-
|
|
1769
1642
|
.bubble {
|
|
1643
|
+
position: relative;
|
|
1770
1644
|
border: 1px solid var(--line);
|
|
1771
1645
|
border-radius: 10px;
|
|
1772
1646
|
background: var(--assistant-bubble);
|
|
@@ -1789,14 +1663,12 @@ body.terminal-mode .composer {
|
|
|
1789
1663
|
}
|
|
1790
1664
|
|
|
1791
1665
|
body.agent-mode .msg.origin-command .bubble,
|
|
1792
|
-
body.agent-mode .msg.origin-command .msg-meta
|
|
1793
|
-
body.agent-mode .msg.origin-command .msg-exit {
|
|
1666
|
+
body.agent-mode .msg.origin-command .msg-meta {
|
|
1794
1667
|
opacity: 0.25;
|
|
1795
1668
|
}
|
|
1796
1669
|
|
|
1797
1670
|
body.command-mode .msg.origin-agent .bubble,
|
|
1798
|
-
body.command-mode .msg.origin-agent .msg-meta
|
|
1799
|
-
body.command-mode .msg.origin-agent .msg-exit {
|
|
1671
|
+
body.command-mode .msg.origin-agent .msg-meta {
|
|
1800
1672
|
opacity: 0.25;
|
|
1801
1673
|
}
|
|
1802
1674
|
|
|
@@ -1822,6 +1694,7 @@ body.command-mode .msg.origin-agent .bubble {
|
|
|
1822
1694
|
display: flex;
|
|
1823
1695
|
flex-direction: column;
|
|
1824
1696
|
gap: 10px;
|
|
1697
|
+
margin-bottom: 10px;
|
|
1825
1698
|
}
|
|
1826
1699
|
|
|
1827
1700
|
.trace-flow {
|
|
@@ -1998,49 +1871,69 @@ details.trace-card > .trace-card-summary {
|
|
|
1998
1871
|
}
|
|
1999
1872
|
|
|
2000
1873
|
.composer {
|
|
2001
|
-
border-top: 1px solid var(--line-medium);
|
|
2002
1874
|
margin-top: 12px;
|
|
2003
1875
|
padding: 12px 8px 4px;
|
|
1876
|
+
border-radius: 14px;
|
|
2004
1877
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.32) 0%, rgba(255, 249, 240, 0.78) 100%);
|
|
2005
1878
|
}
|
|
2006
1879
|
|
|
2007
|
-
.composer-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
1880
|
+
body.composer-options-open .composer {
|
|
1881
|
+
/* 移动端 .composer 是 position: sticky + z-index: 3 自成一个层叠上下文,
|
|
1882
|
+
"选项"面板的 z-index: 8 只在这个上下文内部有效,会被消息区里
|
|
1883
|
+
z-index 更高的内容(如 .msg:last-child)整体盖住;下拉展开时
|
|
1884
|
+
把 composer 本身的层级也一起抬高,才能让面板真正浮在最上层 */
|
|
1885
|
+
z-index: 20;
|
|
1886
|
+
}
|
|
1887
|
+
|
|
1888
|
+
.composer-inner {
|
|
1889
|
+
display: grid;
|
|
1890
|
+
grid-template-columns: 1fr auto;
|
|
1891
|
+
align-items: flex-end;
|
|
2011
1892
|
gap: 10px;
|
|
2012
|
-
max-height: 0;
|
|
2013
|
-
margin-bottom: 0;
|
|
2014
|
-
opacity: 0;
|
|
2015
|
-
overflow: hidden;
|
|
2016
|
-
transition: max-height 180ms ease, opacity 160ms ease, margin-bottom 180ms ease;
|
|
2017
1893
|
}
|
|
2018
1894
|
|
|
2019
|
-
.composer
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
1895
|
+
.composer-actions {
|
|
1896
|
+
display: flex;
|
|
1897
|
+
flex-direction: column;
|
|
1898
|
+
gap: 8px;
|
|
2023
1899
|
}
|
|
2024
1900
|
|
|
2025
|
-
.composer-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
gap: 10px;
|
|
2029
|
-
margin-left: auto;
|
|
1901
|
+
.composer-options {
|
|
1902
|
+
position: relative;
|
|
1903
|
+
display: flex;
|
|
2030
1904
|
}
|
|
2031
1905
|
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
gap: 8px;
|
|
1906
|
+
#composerOptionsToggle {
|
|
1907
|
+
min-width: 92px;
|
|
2035
1908
|
}
|
|
2036
1909
|
|
|
2037
|
-
.
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
1910
|
+
.composer-options-panel {
|
|
1911
|
+
display: none;
|
|
1912
|
+
position: absolute;
|
|
1913
|
+
/* 触发按钮在 composer 底部,下拉框往下展开会跑出视口,改成往上展开 */
|
|
1914
|
+
bottom: calc(100% + 8px);
|
|
1915
|
+
right: 0;
|
|
1916
|
+
z-index: 8;
|
|
1917
|
+
width: max-content;
|
|
1918
|
+
min-width: 140px;
|
|
1919
|
+
padding: 8px;
|
|
1920
|
+
border: 1px solid var(--line);
|
|
1921
|
+
border-radius: 10px;
|
|
1922
|
+
background: #fffaf2;
|
|
1923
|
+
box-shadow: var(--shadow-strong);
|
|
1924
|
+
flex-direction: column;
|
|
1925
|
+
gap: 6px;
|
|
2041
1926
|
}
|
|
2042
1927
|
|
|
2043
|
-
.
|
|
1928
|
+
body.composer-options-open .composer-options-panel {
|
|
1929
|
+
display: flex;
|
|
1930
|
+
}
|
|
1931
|
+
|
|
1932
|
+
.composer-options-panel button {
|
|
1933
|
+
text-align: left;
|
|
1934
|
+
}
|
|
1935
|
+
|
|
1936
|
+
.composer-options-info {
|
|
2044
1937
|
display: inline-flex;
|
|
2045
1938
|
align-items: center;
|
|
2046
1939
|
min-height: 32px;
|
|
@@ -2054,19 +1947,6 @@ details.trace-card > .trace-card-summary {
|
|
|
2054
1947
|
white-space: nowrap;
|
|
2055
1948
|
}
|
|
2056
1949
|
|
|
2057
|
-
.composer-inner {
|
|
2058
|
-
display: grid;
|
|
2059
|
-
grid-template-columns: 1fr auto;
|
|
2060
|
-
align-items: flex-end;
|
|
2061
|
-
gap: 10px;
|
|
2062
|
-
}
|
|
2063
|
-
|
|
2064
|
-
.composer-actions {
|
|
2065
|
-
display: flex;
|
|
2066
|
-
flex-direction: column;
|
|
2067
|
-
gap: 8px;
|
|
2068
|
-
}
|
|
2069
|
-
|
|
2070
1950
|
#commandInput {
|
|
2071
1951
|
width: 100%;
|
|
2072
1952
|
min-height: 116px;
|
|
@@ -2086,29 +1966,6 @@ details.trace-card > .trace-card-summary {
|
|
|
2086
1966
|
min-width: 92px;
|
|
2087
1967
|
}
|
|
2088
1968
|
|
|
2089
|
-
#stopBtn {
|
|
2090
|
-
min-width: 92px;
|
|
2091
|
-
}
|
|
2092
|
-
|
|
2093
|
-
.composer-foot {
|
|
2094
|
-
margin-top: 8px;
|
|
2095
|
-
display: flex;
|
|
2096
|
-
justify-content: space-between;
|
|
2097
|
-
align-items: center;
|
|
2098
|
-
gap: 10px;
|
|
2099
|
-
color: var(--muted);
|
|
2100
|
-
font-size: 12px;
|
|
2101
|
-
}
|
|
2102
|
-
|
|
2103
|
-
.send-state {
|
|
2104
|
-
white-space: nowrap;
|
|
2105
|
-
}
|
|
2106
|
-
|
|
2107
|
-
.send-state.is-active {
|
|
2108
|
-
color: var(--accent);
|
|
2109
|
-
font-weight: 700;
|
|
2110
|
-
}
|
|
2111
|
-
|
|
2112
1969
|
@keyframes panelIn {
|
|
2113
1970
|
from {
|
|
2114
1971
|
opacity: 0;
|
|
@@ -2120,17 +1977,6 @@ details.trace-card > .trace-card-summary {
|
|
|
2120
1977
|
}
|
|
2121
1978
|
}
|
|
2122
1979
|
|
|
2123
|
-
@keyframes itemIn {
|
|
2124
|
-
from {
|
|
2125
|
-
opacity: 0;
|
|
2126
|
-
transform: translateY(6px);
|
|
2127
|
-
}
|
|
2128
|
-
to {
|
|
2129
|
-
opacity: 1;
|
|
2130
|
-
transform: translateY(0);
|
|
2131
|
-
}
|
|
2132
|
-
}
|
|
2133
|
-
|
|
2134
1980
|
@keyframes msgIn {
|
|
2135
1981
|
from {
|
|
2136
1982
|
opacity: 0;
|
|
@@ -2269,42 +2115,14 @@ details.trace-card > .trace-card-summary {
|
|
|
2269
2115
|
}
|
|
2270
2116
|
|
|
2271
2117
|
.header {
|
|
2272
|
-
padding:
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
#activeTitle {
|
|
2276
|
-
font-size: 20px;
|
|
2277
|
-
}
|
|
2278
|
-
|
|
2279
|
-
#activeMeta {
|
|
2280
|
-
display: none;
|
|
2118
|
+
padding: 4px 12px;
|
|
2119
|
+
border-bottom: none;
|
|
2281
2120
|
}
|
|
2282
2121
|
|
|
2283
2122
|
.workbench-tabs {
|
|
2284
|
-
display: flex;
|
|
2285
2123
|
gap: 6px;
|
|
2286
2124
|
}
|
|
2287
2125
|
|
|
2288
|
-
.workbench-tabs > #viewActivityBtn {
|
|
2289
|
-
flex: 1;
|
|
2290
|
-
padding: 8px 10px;
|
|
2291
|
-
font-size: 12px;
|
|
2292
|
-
}
|
|
2293
|
-
|
|
2294
|
-
.workspace-switcher-panel {
|
|
2295
|
-
left: auto;
|
|
2296
|
-
right: 0;
|
|
2297
|
-
}
|
|
2298
|
-
|
|
2299
|
-
.composer-toolbar {
|
|
2300
|
-
flex-direction: column;
|
|
2301
|
-
align-items: flex-start;
|
|
2302
|
-
}
|
|
2303
|
-
|
|
2304
|
-
.composer.is-expanded .composer-toolbar {
|
|
2305
|
-
max-height: 120px;
|
|
2306
|
-
}
|
|
2307
|
-
|
|
2308
2126
|
.files-layout {
|
|
2309
2127
|
grid-template-columns: minmax(0, 1fr);
|
|
2310
2128
|
grid-template-rows: minmax(180px, 38%) minmax(0, 1fr);
|
|
@@ -2315,16 +2133,8 @@ details.trace-card > .trace-card-summary {
|
|
|
2315
2133
|
border-bottom: 1px solid var(--line);
|
|
2316
2134
|
}
|
|
2317
2135
|
|
|
2318
|
-
.composer-
|
|
2319
|
-
|
|
2320
|
-
justify-content: space-between;
|
|
2321
|
-
margin-left: 0;
|
|
2322
|
-
}
|
|
2323
|
-
|
|
2324
|
-
.composer-mode-switch {
|
|
2325
|
-
width: 100%;
|
|
2326
|
-
display: grid;
|
|
2327
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
2136
|
+
.composer-inner {
|
|
2137
|
+
align-items: stretch;
|
|
2328
2138
|
}
|
|
2329
2139
|
|
|
2330
2140
|
#commandInput {
|
|
@@ -2332,16 +2142,13 @@ details.trace-card > .trace-card-summary {
|
|
|
2332
2142
|
max-height: 160px;
|
|
2333
2143
|
}
|
|
2334
2144
|
|
|
2335
|
-
#sendBtn
|
|
2145
|
+
#sendBtn,
|
|
2146
|
+
#composerOptionsToggle {
|
|
2336
2147
|
width: auto;
|
|
2337
2148
|
min-width: 74px;
|
|
2338
2149
|
align-self: stretch;
|
|
2339
2150
|
}
|
|
2340
2151
|
|
|
2341
|
-
.composer-foot {
|
|
2342
|
-
display: none;
|
|
2343
|
-
}
|
|
2344
|
-
|
|
2345
2152
|
.composer {
|
|
2346
2153
|
padding: 8px 8px 6px;
|
|
2347
2154
|
}
|