@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.
@@ -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 rgba(181, 146, 99, 0.38);
806
- background: rgba(255, 255, 255, 0.94);
655
+ border: 1px solid transparent;
656
+ background: transparent;
807
657
  color: var(--text);
808
- border-radius: 12px;
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
- border-color: #d1aa7f;
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
- border-color: #c68d5a;
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
- border-color: #c68d5a;
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
- padding-right: 52px;
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-hover-menu {
745
+ .tree-node-menu {
903
746
  position: absolute;
904
747
  top: 50%;
905
- right: 10px;
906
- display: inline-flex;
907
- align-items: center;
908
- gap: 6px;
748
+ right: 6px;
749
+ z-index: 9;
750
+ transform: translateY(-50%);
909
751
  opacity: 0;
910
752
  pointer-events: none;
911
- transform: translateY(-50%) translateX(4px);
912
- transition: opacity 140ms ease, transform 140ms ease;
753
+ transition: opacity 140ms ease;
913
754
  }
914
755
 
915
- .tree-node-row-container:hover .tree-node-hover-menu,
916
- .tree-node-hover-menu:focus-within {
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-item {
923
- padding: 6px 9px;
924
- font-size: 11px;
925
- border-radius: 999px;
926
- white-space: nowrap;
927
- box-shadow: 0 10px 22px rgba(44, 31, 15, 0.12);
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
- background:
1000
- linear-gradient(165deg, rgba(255, 251, 243, 0.95) 0%, rgba(247, 237, 223, 0.95) 100%);
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
- display: inline-flex;
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-mode-switch button.is-active {
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
- left: 0;
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-toolbar {
2008
- display: flex;
2009
- align-items: center;
2010
- justify-content: space-between;
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.is-expanded .composer-toolbar {
2020
- max-height: 56px;
2021
- margin-bottom: 10px;
2022
- opacity: 1;
1895
+ .composer-actions {
1896
+ display: flex;
1897
+ flex-direction: column;
1898
+ gap: 8px;
2023
1899
  }
2024
1900
 
2025
- .composer-toolbar-meta {
2026
- display: inline-flex;
2027
- align-items: center;
2028
- gap: 10px;
2029
- margin-left: auto;
1901
+ .composer-options {
1902
+ position: relative;
1903
+ display: flex;
2030
1904
  }
2031
1905
 
2032
- .composer-mode-switch {
2033
- display: inline-flex;
2034
- gap: 8px;
1906
+ #composerOptionsToggle {
1907
+ min-width: 92px;
2035
1908
  }
2036
1909
 
2037
- .toolbar-mini-btn {
2038
- padding: 7px 12px;
2039
- font-size: 12px;
2040
- white-space: nowrap;
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
- .toolbar-chip {
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: 10px 12px 16px;
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-toolbar-meta {
2319
- width: 100%;
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
  }