@xcanwin/manyoyo 6.1.1 → 6.2.0
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 +315 -187
- package/lib/web/frontend/app.html +32 -38
- package/lib/web/frontend/app.js +346 -223
- package/lib/web/frontend/chat-behavior.js +49 -0
- package/lib/web/server.js +1 -0
- package/package.json +1 -1
package/lib/web/frontend/app.css
CHANGED
|
@@ -14,8 +14,12 @@
|
|
|
14
14
|
--line: #d9c7ad;
|
|
15
15
|
--line-strong: #b59263;
|
|
16
16
|
--line-soft: rgba(181, 146, 99, 0.26);
|
|
17
|
+
--line-medium: rgba(181, 146, 99, 0.4);
|
|
17
18
|
--tree-guide: rgba(181, 146, 99, 0.44);
|
|
18
19
|
--tree-guide-soft: rgba(181, 146, 99, 0.44);
|
|
20
|
+
--tree-active: #ecdfc8;
|
|
21
|
+
|
|
22
|
+
--surface-panel: linear-gradient(180deg, rgba(255, 255, 255, 0.88) 0%, rgba(252, 246, 236, 0.88) 100%);
|
|
19
23
|
|
|
20
24
|
--text: #1f1a14;
|
|
21
25
|
--muted: #6a5f52;
|
|
@@ -157,13 +161,6 @@ body::after {
|
|
|
157
161
|
text-transform: uppercase;
|
|
158
162
|
}
|
|
159
163
|
|
|
160
|
-
.brand-sub {
|
|
161
|
-
color: var(--muted);
|
|
162
|
-
font-size: 11px;
|
|
163
|
-
letter-spacing: 0.3px;
|
|
164
|
-
text-transform: uppercase;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
164
|
.sidebar-actions {
|
|
168
165
|
display: inline-flex;
|
|
169
166
|
gap: 8px;
|
|
@@ -255,12 +252,6 @@ textarea:focus-visible {
|
|
|
255
252
|
display: none;
|
|
256
253
|
}
|
|
257
254
|
|
|
258
|
-
.mobile-actions-toggle {
|
|
259
|
-
display: inline-flex;
|
|
260
|
-
padding: 8px 12px;
|
|
261
|
-
font-size: 13px;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
255
|
.sidebar-backdrop[hidden] {
|
|
265
256
|
display: none !important;
|
|
266
257
|
}
|
|
@@ -594,7 +585,7 @@ textarea:focus-visible {
|
|
|
594
585
|
}
|
|
595
586
|
|
|
596
587
|
.session-status {
|
|
597
|
-
border-radius:
|
|
588
|
+
border-radius: 999px;
|
|
598
589
|
padding: 2px 8px;
|
|
599
590
|
font-weight: 700;
|
|
600
591
|
font-size: 11px;
|
|
@@ -679,9 +670,9 @@ button.tree-toggle:active {
|
|
|
679
670
|
column-gap: 8px;
|
|
680
671
|
}
|
|
681
672
|
|
|
682
|
-
.tree-node-row.tree-node-row-container
|
|
673
|
+
.tree-node-row.tree-node-row-container,
|
|
674
|
+
.tree-node-row.tree-node-row-agent {
|
|
683
675
|
position: relative;
|
|
684
|
-
grid-template-columns: auto minmax(0, 1fr);
|
|
685
676
|
}
|
|
686
677
|
|
|
687
678
|
.tree-prefix {
|
|
@@ -799,17 +790,17 @@ button.tree-toggle:active {
|
|
|
799
790
|
.tree-node-button {
|
|
800
791
|
width: 100%;
|
|
801
792
|
text-align: left;
|
|
802
|
-
border: 1px solid
|
|
803
|
-
background:
|
|
793
|
+
border: 1px solid transparent;
|
|
794
|
+
background: transparent;
|
|
804
795
|
color: var(--text);
|
|
805
|
-
border-radius:
|
|
796
|
+
border-radius: 10px;
|
|
806
797
|
padding: 10px 11px;
|
|
798
|
+
transition: background-color 120ms ease;
|
|
807
799
|
}
|
|
808
800
|
|
|
809
801
|
.tree-node-button:hover {
|
|
810
802
|
transform: none;
|
|
811
|
-
|
|
812
|
-
background: #fff8ef;
|
|
803
|
+
background: var(--panel-soft);
|
|
813
804
|
}
|
|
814
805
|
|
|
815
806
|
.tree-node-button:active {
|
|
@@ -822,9 +813,7 @@ button.tree-toggle:active {
|
|
|
822
813
|
}
|
|
823
814
|
|
|
824
815
|
.tree-node-button.active {
|
|
825
|
-
|
|
826
|
-
background: #fff3e8;
|
|
827
|
-
box-shadow: inset 3px 0 0 var(--accent), 0 0 0 2px rgba(196, 85, 31, 0.14);
|
|
816
|
+
background: var(--tree-active);
|
|
828
817
|
}
|
|
829
818
|
|
|
830
819
|
.tree-node-button.tree-node-tone-history .tree-node-title,
|
|
@@ -833,17 +822,12 @@ button.tree-toggle:active {
|
|
|
833
822
|
}
|
|
834
823
|
|
|
835
824
|
.tree-node-block.has-active > .tree-node-row > .tree-node-button:not(.active) {
|
|
836
|
-
|
|
837
|
-
box-shadow: 0 0 0 2px rgba(196, 85, 31, 0.08);
|
|
838
|
-
}
|
|
839
|
-
|
|
840
|
-
.tree-node-button-directory,
|
|
841
|
-
.tree-node-button-container {
|
|
842
|
-
background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(249, 242, 232, 0.98) 100%);
|
|
825
|
+
background: var(--panel-soft);
|
|
843
826
|
}
|
|
844
827
|
|
|
845
|
-
.tree-node-row-container .tree-node-button-container
|
|
846
|
-
|
|
828
|
+
.tree-node-row-container .tree-node-button-container,
|
|
829
|
+
.tree-node-row-agent .tree-node-button-agent {
|
|
830
|
+
padding-right: 38px;
|
|
847
831
|
}
|
|
848
832
|
|
|
849
833
|
.tree-node-main {
|
|
@@ -896,32 +880,95 @@ button.tree-toggle:active {
|
|
|
896
880
|
color: var(--status-unknown-text);
|
|
897
881
|
}
|
|
898
882
|
|
|
899
|
-
.tree-node-
|
|
883
|
+
.tree-node-menu {
|
|
900
884
|
position: absolute;
|
|
901
885
|
top: 50%;
|
|
902
|
-
right:
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
gap: 6px;
|
|
886
|
+
right: 6px;
|
|
887
|
+
z-index: 9;
|
|
888
|
+
transform: translateY(-50%);
|
|
906
889
|
opacity: 0;
|
|
907
890
|
pointer-events: none;
|
|
908
|
-
|
|
909
|
-
transition: opacity 140ms ease, transform 140ms ease;
|
|
891
|
+
transition: opacity 140ms ease;
|
|
910
892
|
}
|
|
911
893
|
|
|
912
|
-
.tree-node-row
|
|
913
|
-
.tree-node-
|
|
894
|
+
.tree-node-row:hover .tree-node-menu,
|
|
895
|
+
.tree-node-menu:focus-within,
|
|
896
|
+
.tree-node-menu.is-open {
|
|
914
897
|
opacity: 1;
|
|
915
898
|
pointer-events: auto;
|
|
916
|
-
transform: translateY(-50%) translateX(0);
|
|
917
899
|
}
|
|
918
900
|
|
|
919
|
-
.tree-node-menu-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
901
|
+
.tree-node-menu.is-open {
|
|
902
|
+
z-index: 20;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
@media (hover: none) {
|
|
906
|
+
.tree-node-menu {
|
|
907
|
+
opacity: 1;
|
|
908
|
+
pointer-events: auto;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.tree-node-menu-trigger {
|
|
913
|
+
width: 26px;
|
|
914
|
+
height: 26px;
|
|
915
|
+
padding: 0;
|
|
916
|
+
display: inline-flex;
|
|
917
|
+
align-items: center;
|
|
918
|
+
justify-content: center;
|
|
919
|
+
border-radius: 8px;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
.tree-node-menu-trigger svg {
|
|
923
|
+
width: 14px;
|
|
924
|
+
height: 14px;
|
|
925
|
+
fill: currentColor;
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
.tree-node-menu-panel {
|
|
929
|
+
position: absolute;
|
|
930
|
+
top: calc(100% + 4px);
|
|
931
|
+
right: 0;
|
|
932
|
+
z-index: 9;
|
|
933
|
+
width: max-content;
|
|
934
|
+
min-width: 140px;
|
|
935
|
+
padding: 6px;
|
|
936
|
+
border: 1px solid var(--line);
|
|
937
|
+
border-radius: 10px;
|
|
938
|
+
background: #fffaf2;
|
|
939
|
+
box-shadow: var(--shadow-strong);
|
|
940
|
+
display: flex;
|
|
941
|
+
flex-direction: column;
|
|
942
|
+
gap: 2px;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
.tree-node-menu-panel[hidden] {
|
|
946
|
+
display: none;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
.tree-node-menu-panel-item {
|
|
950
|
+
width: 100%;
|
|
951
|
+
text-align: left;
|
|
952
|
+
border: none;
|
|
953
|
+
background: transparent;
|
|
954
|
+
color: var(--text);
|
|
955
|
+
font-weight: 600;
|
|
956
|
+
font-size: 12px;
|
|
957
|
+
padding: 7px 9px;
|
|
958
|
+
border-radius: 6px;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
.tree-node-menu-panel-item:hover {
|
|
962
|
+
transform: none;
|
|
963
|
+
background: var(--panel-soft);
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
.tree-node-menu-panel-item.is-danger {
|
|
967
|
+
color: var(--danger);
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
.tree-node-menu-panel-item.is-danger:hover {
|
|
971
|
+
background: var(--danger-soft);
|
|
925
972
|
}
|
|
926
973
|
|
|
927
974
|
.tree-node-children[hidden] {
|
|
@@ -993,8 +1040,9 @@ button.tree-toggle:active {
|
|
|
993
1040
|
display: grid;
|
|
994
1041
|
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
995
1042
|
gap: 0;
|
|
996
|
-
|
|
997
|
-
|
|
1043
|
+
/* 和 #messages / .composer 用同一个 --surface-panel,避免包裹它们的这层
|
|
1044
|
+
在缝隙处显得比内容区更深一截 */
|
|
1045
|
+
background: var(--surface-panel);
|
|
998
1046
|
animation: panelIn 360ms ease 60ms both;
|
|
999
1047
|
}
|
|
1000
1048
|
|
|
@@ -1005,81 +1053,81 @@ button.tree-toggle:active {
|
|
|
1005
1053
|
align-items: flex-start;
|
|
1006
1054
|
gap: 12px;
|
|
1007
1055
|
padding: 6px 8px 12px;
|
|
1008
|
-
border-bottom: 1px solid
|
|
1056
|
+
border-bottom: 1px solid var(--line-medium);
|
|
1009
1057
|
}
|
|
1010
1058
|
|
|
1011
1059
|
.header-main {
|
|
1012
1060
|
flex: 1;
|
|
1013
1061
|
min-width: 0;
|
|
1014
1062
|
display: flex;
|
|
1015
|
-
flex-direction: column;
|
|
1016
|
-
gap: 8px;
|
|
1017
1063
|
}
|
|
1018
1064
|
|
|
1019
|
-
.
|
|
1065
|
+
.workbench-tabs {
|
|
1066
|
+
flex: 1;
|
|
1020
1067
|
display: flex;
|
|
1068
|
+
flex-wrap: wrap;
|
|
1021
1069
|
align-items: center;
|
|
1022
1070
|
gap: 8px;
|
|
1023
|
-
min-width: 0;
|
|
1024
1071
|
}
|
|
1025
1072
|
|
|
1026
|
-
.
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
#activeTitle {
|
|
1032
|
-
margin: 0;
|
|
1033
|
-
font-family: var(--font-display);
|
|
1034
|
-
font-size: 22px;
|
|
1035
|
-
font-weight: 700;
|
|
1036
|
-
line-height: 1.12;
|
|
1037
|
-
letter-spacing: 0.4px;
|
|
1038
|
-
word-break: break-all;
|
|
1073
|
+
.workbench-tabs button.is-active,
|
|
1074
|
+
.composer-options-panel button.is-active {
|
|
1075
|
+
color: #ffffff;
|
|
1076
|
+
background: var(--accent);
|
|
1077
|
+
border-color: var(--accent-strong);
|
|
1039
1078
|
}
|
|
1040
1079
|
|
|
1041
|
-
.
|
|
1042
|
-
|
|
1043
|
-
|
|
1080
|
+
.workspace-switcher {
|
|
1081
|
+
position: relative;
|
|
1082
|
+
display: inline-flex;
|
|
1083
|
+
/* 始终贴住这一行的右侧:桌面端只有它自己时贴最右,移动端"会话"贴最左时它仍贴最右 */
|
|
1084
|
+
margin-left: auto;
|
|
1044
1085
|
}
|
|
1045
1086
|
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1087
|
+
.workspace-switcher-btn {
|
|
1088
|
+
width: 34px;
|
|
1089
|
+
height: 34px;
|
|
1090
|
+
padding: 0;
|
|
1091
|
+
display: inline-flex;
|
|
1092
|
+
align-items: center;
|
|
1093
|
+
justify-content: center;
|
|
1050
1094
|
}
|
|
1051
1095
|
|
|
1052
|
-
.
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1096
|
+
.workspace-switcher-btn svg {
|
|
1097
|
+
width: 16px;
|
|
1098
|
+
height: 16px;
|
|
1099
|
+
fill: currentColor;
|
|
1056
1100
|
}
|
|
1057
1101
|
|
|
1058
|
-
.
|
|
1059
|
-
.composer-mode-switch button.is-active {
|
|
1102
|
+
.workspace-switcher-btn.is-active {
|
|
1060
1103
|
color: #ffffff;
|
|
1061
1104
|
background: var(--accent);
|
|
1062
1105
|
border-color: var(--accent-strong);
|
|
1063
1106
|
}
|
|
1064
1107
|
|
|
1065
|
-
.
|
|
1108
|
+
.workspace-switcher-panel {
|
|
1066
1109
|
display: none;
|
|
1067
1110
|
position: absolute;
|
|
1068
1111
|
top: calc(100% + 8px);
|
|
1112
|
+
/* 触发按钮固定贴住这一行右侧,面板也从右边缘向左展开,避免在宽屏下超出视口 */
|
|
1069
1113
|
right: 0;
|
|
1070
1114
|
z-index: 8;
|
|
1071
|
-
width:
|
|
1115
|
+
width: max-content;
|
|
1072
1116
|
padding: 8px;
|
|
1073
1117
|
border: 1px solid var(--line);
|
|
1074
1118
|
border-radius: 10px;
|
|
1075
1119
|
background: #fffaf2;
|
|
1076
1120
|
box-shadow: var(--shadow-strong);
|
|
1077
|
-
|
|
1078
|
-
gap:
|
|
1121
|
+
flex-direction: column;
|
|
1122
|
+
gap: 6px;
|
|
1079
1123
|
}
|
|
1080
1124
|
|
|
1081
|
-
body.
|
|
1082
|
-
display:
|
|
1125
|
+
body.workspace-switcher-open .workspace-switcher-panel {
|
|
1126
|
+
display: flex;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
.workspace-switcher-panel button {
|
|
1130
|
+
text-align: left;
|
|
1083
1131
|
}
|
|
1084
1132
|
|
|
1085
1133
|
.workspace-shell {
|
|
@@ -1113,15 +1161,13 @@ body.mobile-actions-open .header-actions {
|
|
|
1113
1161
|
min-height: 0;
|
|
1114
1162
|
overflow-y: auto;
|
|
1115
1163
|
margin: 0;
|
|
1116
|
-
padding: 14px;
|
|
1117
|
-
border: 1px solid var(--line);
|
|
1164
|
+
padding: 14px 14px 44px;
|
|
1118
1165
|
border-radius: 14px;
|
|
1119
1166
|
display: flex;
|
|
1120
1167
|
flex-direction: column;
|
|
1121
1168
|
gap: 14px;
|
|
1122
1169
|
scroll-behavior: smooth;
|
|
1123
|
-
background:
|
|
1124
|
-
linear-gradient(180deg, rgba(255, 255, 255, 0.88) 0%, rgba(252, 246, 236, 0.88) 100%);
|
|
1170
|
+
background: var(--surface-panel);
|
|
1125
1171
|
}
|
|
1126
1172
|
|
|
1127
1173
|
#terminalPanel {
|
|
@@ -1139,8 +1185,7 @@ body.mobile-actions-open .header-actions {
|
|
|
1139
1185
|
border: 1px solid var(--line);
|
|
1140
1186
|
border-radius: 14px;
|
|
1141
1187
|
overflow: hidden;
|
|
1142
|
-
background:
|
|
1143
|
-
linear-gradient(180deg, rgba(255, 255, 255, 0.88) 0%, rgba(252, 246, 236, 0.88) 100%);
|
|
1188
|
+
background: var(--surface-panel);
|
|
1144
1189
|
}
|
|
1145
1190
|
|
|
1146
1191
|
.files-browser {
|
|
@@ -1382,8 +1427,7 @@ body.mobile-actions-open .header-actions {
|
|
|
1382
1427
|
padding: 0;
|
|
1383
1428
|
border: 1px solid var(--line);
|
|
1384
1429
|
border-radius: 14px;
|
|
1385
|
-
background:
|
|
1386
|
-
linear-gradient(180deg, rgba(255, 255, 255, 0.88) 0%, rgba(252, 246, 236, 0.88) 100%);
|
|
1430
|
+
background: var(--surface-panel);
|
|
1387
1431
|
}
|
|
1388
1432
|
|
|
1389
1433
|
.inspector-stack {
|
|
@@ -1613,6 +1657,17 @@ body.terminal-mode .composer {
|
|
|
1613
1657
|
gap: 6px;
|
|
1614
1658
|
animation: msgIn 210ms ease both;
|
|
1615
1659
|
animation-delay: 0ms;
|
|
1660
|
+
/* animation 会让每条消息各自建立独立的层叠上下文(transform/opacity 动画的副作用),
|
|
1661
|
+
悬浮显示的 .msg-actions 浮层因此只能在本条消息内部比较 z-index,
|
|
1662
|
+
会被后面消息按 DOM 序整体盖住;悬浮时显式提升本条消息的 z-index 才能穿透 */
|
|
1663
|
+
z-index: 0;
|
|
1664
|
+
}
|
|
1665
|
+
|
|
1666
|
+
.msg:hover,
|
|
1667
|
+
.msg:focus-within {
|
|
1668
|
+
/* 需要高于移动端 .composer 的 z-index: 3(position: sticky,悬浮在滚动内容之上),
|
|
1669
|
+
否则最后一条消息的浮层会被吸底的输入框盖住 */
|
|
1670
|
+
z-index: 4;
|
|
1616
1671
|
}
|
|
1617
1672
|
|
|
1618
1673
|
.msg.user {
|
|
@@ -1657,6 +1712,75 @@ body.terminal-mode .composer {
|
|
|
1657
1712
|
font-weight: 700;
|
|
1658
1713
|
}
|
|
1659
1714
|
|
|
1715
|
+
.msg-actions {
|
|
1716
|
+
position: absolute;
|
|
1717
|
+
top: 100%;
|
|
1718
|
+
/* 用 padding-top 而不是 margin-top 留白:margin 在盒子外,鼠标从气泡移到按钮
|
|
1719
|
+
之间会经过一段没有任何元素承接的"死区",:hover 提前丢失导致按钮还没碰到就消失;
|
|
1720
|
+
padding 仍属于本元素的可命中区域,鼠标全程都在同一个悬浮触发范围内 */
|
|
1721
|
+
padding-top: 4px;
|
|
1722
|
+
display: flex;
|
|
1723
|
+
gap: 6px;
|
|
1724
|
+
opacity: 0;
|
|
1725
|
+
pointer-events: none;
|
|
1726
|
+
transition: opacity 140ms ease;
|
|
1727
|
+
z-index: 1;
|
|
1728
|
+
}
|
|
1729
|
+
|
|
1730
|
+
.msg.user .msg-actions {
|
|
1731
|
+
right: 0;
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
.msg.assistant .msg-actions,
|
|
1735
|
+
.msg.system .msg-actions {
|
|
1736
|
+
left: 0;
|
|
1737
|
+
}
|
|
1738
|
+
|
|
1739
|
+
.msg:hover .msg-actions,
|
|
1740
|
+
.msg:focus-within .msg-actions {
|
|
1741
|
+
opacity: 1;
|
|
1742
|
+
pointer-events: auto;
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1745
|
+
@media (hover: none) {
|
|
1746
|
+
.msg-actions {
|
|
1747
|
+
opacity: 1;
|
|
1748
|
+
pointer-events: auto;
|
|
1749
|
+
}
|
|
1750
|
+
|
|
1751
|
+
/* 触屏设备没有真正的 :hover,上面 .msg:hover 提升 z-index 的规则永远不会触发;
|
|
1752
|
+
这里常驻按住基础 z-index 之上,浮层才不会被吸底输入框(sticky, z-index: 3)盖住 */
|
|
1753
|
+
.msg {
|
|
1754
|
+
z-index: 4;
|
|
1755
|
+
}
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
.msg-copy-btn {
|
|
1759
|
+
border: 1px solid var(--line);
|
|
1760
|
+
border-radius: 10px;
|
|
1761
|
+
background: var(--panel-soft);
|
|
1762
|
+
color: var(--muted);
|
|
1763
|
+
font-size: 11px;
|
|
1764
|
+
font-weight: 600;
|
|
1765
|
+
padding: 2px 8px;
|
|
1766
|
+
cursor: pointer;
|
|
1767
|
+
transition: color 140ms ease, border-color 140ms ease, background-color 140ms ease;
|
|
1768
|
+
}
|
|
1769
|
+
|
|
1770
|
+
.msg-copy-btn:hover {
|
|
1771
|
+
color: var(--accent-strong);
|
|
1772
|
+
/* 不显式设置背景色的话,通用 button:hover 规则的深色背景会覆盖进来,
|
|
1773
|
+
和同色系的文字撞色看不清,这里只需要比默认背景微微变深 */
|
|
1774
|
+
background: #f0e6d3;
|
|
1775
|
+
border-color: var(--line-strong);
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
.msg-copy-btn.is-copied {
|
|
1779
|
+
color: var(--subaccent-strong);
|
|
1780
|
+
border-color: var(--subaccent);
|
|
1781
|
+
background: var(--subaccent-soft);
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1660
1784
|
.msg-exit {
|
|
1661
1785
|
font-family: var(--font-mono);
|
|
1662
1786
|
font-size: 11px;
|
|
@@ -1676,6 +1800,7 @@ body.terminal-mode .composer {
|
|
|
1676
1800
|
}
|
|
1677
1801
|
|
|
1678
1802
|
.bubble {
|
|
1803
|
+
position: relative;
|
|
1679
1804
|
border: 1px solid var(--line);
|
|
1680
1805
|
border-radius: 10px;
|
|
1681
1806
|
background: var(--assistant-bubble);
|
|
@@ -1731,6 +1856,7 @@ body.command-mode .msg.origin-agent .bubble {
|
|
|
1731
1856
|
display: flex;
|
|
1732
1857
|
flex-direction: column;
|
|
1733
1858
|
gap: 10px;
|
|
1859
|
+
margin-bottom: 10px;
|
|
1734
1860
|
}
|
|
1735
1861
|
|
|
1736
1862
|
.trace-flow {
|
|
@@ -1739,6 +1865,52 @@ body.command-mode .msg.origin-agent .bubble {
|
|
|
1739
1865
|
gap: 8px;
|
|
1740
1866
|
}
|
|
1741
1867
|
|
|
1868
|
+
.trace-flow-toggle {
|
|
1869
|
+
border: 1px solid rgba(181, 146, 99, 0.26);
|
|
1870
|
+
border-radius: 10px;
|
|
1871
|
+
background: rgba(255, 250, 242, 0.7);
|
|
1872
|
+
overflow: hidden;
|
|
1873
|
+
}
|
|
1874
|
+
|
|
1875
|
+
.trace-flow-toggle[open] {
|
|
1876
|
+
background: transparent;
|
|
1877
|
+
border-color: transparent;
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
.trace-flow-toggle-summary {
|
|
1881
|
+
list-style: none;
|
|
1882
|
+
display: flex;
|
|
1883
|
+
align-items: center;
|
|
1884
|
+
gap: 6px;
|
|
1885
|
+
padding: 8px 10px;
|
|
1886
|
+
cursor: pointer;
|
|
1887
|
+
font-size: 12px;
|
|
1888
|
+
color: var(--muted);
|
|
1889
|
+
}
|
|
1890
|
+
|
|
1891
|
+
.trace-flow-toggle-summary::-webkit-details-marker {
|
|
1892
|
+
display: none;
|
|
1893
|
+
}
|
|
1894
|
+
|
|
1895
|
+
.trace-flow-toggle-summary::before {
|
|
1896
|
+
content: '';
|
|
1897
|
+
width: 8px;
|
|
1898
|
+
height: 8px;
|
|
1899
|
+
flex: 0 0 auto;
|
|
1900
|
+
border-right: 1.6px solid currentColor;
|
|
1901
|
+
border-bottom: 1.6px solid currentColor;
|
|
1902
|
+
transform: rotate(-45deg);
|
|
1903
|
+
transition: transform 140ms ease;
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
.trace-flow-toggle[open] > .trace-flow-toggle-summary::before {
|
|
1907
|
+
transform: rotate(45deg);
|
|
1908
|
+
}
|
|
1909
|
+
|
|
1910
|
+
.trace-flow-toggle > .trace-flow {
|
|
1911
|
+
padding: 0 10px 10px;
|
|
1912
|
+
}
|
|
1913
|
+
|
|
1742
1914
|
.trace-card {
|
|
1743
1915
|
border: 1px solid rgba(181, 146, 99, 0.32);
|
|
1744
1916
|
border-left-width: 3px;
|
|
@@ -1861,39 +2033,61 @@ details.trace-card > .trace-card-summary {
|
|
|
1861
2033
|
}
|
|
1862
2034
|
|
|
1863
2035
|
.composer {
|
|
1864
|
-
border-top: 1px solid rgba(181, 146, 99, 0.45);
|
|
1865
2036
|
margin-top: 12px;
|
|
1866
2037
|
padding: 12px 8px 4px;
|
|
2038
|
+
border-radius: 14px;
|
|
1867
2039
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.32) 0%, rgba(255, 249, 240, 0.78) 100%);
|
|
1868
2040
|
}
|
|
1869
2041
|
|
|
1870
|
-
.composer-
|
|
1871
|
-
display:
|
|
1872
|
-
|
|
1873
|
-
|
|
2042
|
+
.composer-inner {
|
|
2043
|
+
display: grid;
|
|
2044
|
+
grid-template-columns: 1fr auto;
|
|
2045
|
+
align-items: flex-end;
|
|
1874
2046
|
gap: 10px;
|
|
1875
|
-
margin-bottom: 10px;
|
|
1876
2047
|
}
|
|
1877
2048
|
|
|
1878
|
-
.composer-
|
|
1879
|
-
display:
|
|
1880
|
-
|
|
1881
|
-
gap:
|
|
1882
|
-
margin-left: auto;
|
|
2049
|
+
.composer-actions {
|
|
2050
|
+
display: flex;
|
|
2051
|
+
flex-direction: column;
|
|
2052
|
+
gap: 8px;
|
|
1883
2053
|
}
|
|
1884
2054
|
|
|
1885
|
-
.composer-
|
|
1886
|
-
|
|
1887
|
-
|
|
2055
|
+
.composer-options {
|
|
2056
|
+
position: relative;
|
|
2057
|
+
display: flex;
|
|
1888
2058
|
}
|
|
1889
2059
|
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
font-size: 12px;
|
|
1893
|
-
white-space: nowrap;
|
|
2060
|
+
#composerOptionsToggle {
|
|
2061
|
+
min-width: 92px;
|
|
1894
2062
|
}
|
|
1895
2063
|
|
|
1896
|
-
.
|
|
2064
|
+
.composer-options-panel {
|
|
2065
|
+
display: none;
|
|
2066
|
+
position: absolute;
|
|
2067
|
+
/* 触发按钮在 composer 底部,下拉框往下展开会跑出视口,改成往上展开 */
|
|
2068
|
+
bottom: calc(100% + 8px);
|
|
2069
|
+
right: 0;
|
|
2070
|
+
z-index: 8;
|
|
2071
|
+
width: max-content;
|
|
2072
|
+
min-width: 140px;
|
|
2073
|
+
padding: 8px;
|
|
2074
|
+
border: 1px solid var(--line);
|
|
2075
|
+
border-radius: 10px;
|
|
2076
|
+
background: #fffaf2;
|
|
2077
|
+
box-shadow: var(--shadow-strong);
|
|
2078
|
+
flex-direction: column;
|
|
2079
|
+
gap: 6px;
|
|
2080
|
+
}
|
|
2081
|
+
|
|
2082
|
+
body.composer-options-open .composer-options-panel {
|
|
2083
|
+
display: flex;
|
|
2084
|
+
}
|
|
2085
|
+
|
|
2086
|
+
.composer-options-panel button {
|
|
2087
|
+
text-align: left;
|
|
2088
|
+
}
|
|
2089
|
+
|
|
2090
|
+
.composer-options-info {
|
|
1897
2091
|
display: inline-flex;
|
|
1898
2092
|
align-items: center;
|
|
1899
2093
|
min-height: 32px;
|
|
@@ -1907,19 +2101,6 @@ details.trace-card > .trace-card-summary {
|
|
|
1907
2101
|
white-space: nowrap;
|
|
1908
2102
|
}
|
|
1909
2103
|
|
|
1910
|
-
.composer-inner {
|
|
1911
|
-
display: grid;
|
|
1912
|
-
grid-template-columns: 1fr auto;
|
|
1913
|
-
align-items: flex-end;
|
|
1914
|
-
gap: 10px;
|
|
1915
|
-
}
|
|
1916
|
-
|
|
1917
|
-
.composer-actions {
|
|
1918
|
-
display: flex;
|
|
1919
|
-
flex-direction: column;
|
|
1920
|
-
gap: 8px;
|
|
1921
|
-
}
|
|
1922
|
-
|
|
1923
2104
|
#commandInput {
|
|
1924
2105
|
width: 100%;
|
|
1925
2106
|
min-height: 116px;
|
|
@@ -1939,29 +2120,6 @@ details.trace-card > .trace-card-summary {
|
|
|
1939
2120
|
min-width: 92px;
|
|
1940
2121
|
}
|
|
1941
2122
|
|
|
1942
|
-
#stopBtn {
|
|
1943
|
-
min-width: 92px;
|
|
1944
|
-
}
|
|
1945
|
-
|
|
1946
|
-
.composer-foot {
|
|
1947
|
-
margin-top: 8px;
|
|
1948
|
-
display: flex;
|
|
1949
|
-
justify-content: space-between;
|
|
1950
|
-
align-items: center;
|
|
1951
|
-
gap: 10px;
|
|
1952
|
-
color: var(--muted);
|
|
1953
|
-
font-size: 12px;
|
|
1954
|
-
}
|
|
1955
|
-
|
|
1956
|
-
.send-state {
|
|
1957
|
-
white-space: nowrap;
|
|
1958
|
-
}
|
|
1959
|
-
|
|
1960
|
-
.send-state.is-active {
|
|
1961
|
-
color: var(--accent);
|
|
1962
|
-
font-weight: 700;
|
|
1963
|
-
}
|
|
1964
|
-
|
|
1965
2123
|
@keyframes panelIn {
|
|
1966
2124
|
from {
|
|
1967
2125
|
opacity: 0;
|
|
@@ -2122,33 +2280,14 @@ details.trace-card > .trace-card-summary {
|
|
|
2122
2280
|
}
|
|
2123
2281
|
|
|
2124
2282
|
.header {
|
|
2125
|
-
padding:
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
#activeTitle {
|
|
2129
|
-
font-size: 20px;
|
|
2130
|
-
}
|
|
2131
|
-
|
|
2132
|
-
#activeMeta {
|
|
2133
|
-
display: none;
|
|
2283
|
+
padding: 4px 12px;
|
|
2284
|
+
border-bottom: none;
|
|
2134
2285
|
}
|
|
2135
2286
|
|
|
2136
2287
|
.workbench-tabs {
|
|
2137
|
-
display: grid;
|
|
2138
|
-
grid-template-columns: repeat(6, minmax(0, 1fr));
|
|
2139
2288
|
gap: 6px;
|
|
2140
2289
|
}
|
|
2141
2290
|
|
|
2142
|
-
.workbench-tabs button {
|
|
2143
|
-
padding: 8px 10px;
|
|
2144
|
-
font-size: 12px;
|
|
2145
|
-
}
|
|
2146
|
-
|
|
2147
|
-
.composer-toolbar {
|
|
2148
|
-
flex-direction: column;
|
|
2149
|
-
align-items: flex-start;
|
|
2150
|
-
}
|
|
2151
|
-
|
|
2152
2291
|
.files-layout {
|
|
2153
2292
|
grid-template-columns: minmax(0, 1fr);
|
|
2154
2293
|
grid-template-rows: minmax(180px, 38%) minmax(0, 1fr);
|
|
@@ -2159,16 +2298,8 @@ details.trace-card > .trace-card-summary {
|
|
|
2159
2298
|
border-bottom: 1px solid var(--line);
|
|
2160
2299
|
}
|
|
2161
2300
|
|
|
2162
|
-
.composer-
|
|
2163
|
-
|
|
2164
|
-
justify-content: space-between;
|
|
2165
|
-
margin-left: 0;
|
|
2166
|
-
}
|
|
2167
|
-
|
|
2168
|
-
.composer-mode-switch {
|
|
2169
|
-
width: 100%;
|
|
2170
|
-
display: grid;
|
|
2171
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
2301
|
+
.composer-inner {
|
|
2302
|
+
align-items: stretch;
|
|
2172
2303
|
}
|
|
2173
2304
|
|
|
2174
2305
|
#commandInput {
|
|
@@ -2176,16 +2307,13 @@ details.trace-card > .trace-card-summary {
|
|
|
2176
2307
|
max-height: 160px;
|
|
2177
2308
|
}
|
|
2178
2309
|
|
|
2179
|
-
#sendBtn
|
|
2310
|
+
#sendBtn,
|
|
2311
|
+
#composerOptionsToggle {
|
|
2180
2312
|
width: auto;
|
|
2181
2313
|
min-width: 74px;
|
|
2182
2314
|
align-self: stretch;
|
|
2183
2315
|
}
|
|
2184
2316
|
|
|
2185
|
-
.composer-foot {
|
|
2186
|
-
display: none;
|
|
2187
|
-
}
|
|
2188
|
-
|
|
2189
2317
|
.composer {
|
|
2190
2318
|
padding: 8px 8px 6px;
|
|
2191
2319
|
}
|