@xcanwin/manyoyo 6.2.0 → 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 +20 -185
- package/lib/web/frontend/app.js +3 -21
- package/package.json +1 -1
package/lib/web/frontend/app.css
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
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);
|
|
@@ -26,7 +25,6 @@
|
|
|
26
25
|
|
|
27
26
|
--accent: #c4551f;
|
|
28
27
|
--accent-strong: #9d4418;
|
|
29
|
-
--accent-soft: #fee4d6;
|
|
30
28
|
|
|
31
29
|
--subaccent: #0f7c72;
|
|
32
30
|
--subaccent-strong: #0a655e;
|
|
@@ -36,14 +34,9 @@
|
|
|
36
34
|
--danger-strong: #962824;
|
|
37
35
|
--danger-soft: #ffe8e5;
|
|
38
36
|
|
|
39
|
-
--status-running-bg: #e0f5ef;
|
|
40
37
|
--status-running-text: #0c695f;
|
|
41
|
-
--status-stopped-bg: #fff0dd;
|
|
42
38
|
--status-stopped-text: #9a5a09;
|
|
43
|
-
--status-history-bg: #ece7df;
|
|
44
|
-
--status-history-text: #645647;
|
|
45
39
|
--tree-history-text: #b7b0a7;
|
|
46
|
-
--status-unknown-bg: #ece9ff;
|
|
47
40
|
--status-unknown-text: #5a4bb0;
|
|
48
41
|
|
|
49
42
|
--user-bubble: #fee9dd;
|
|
@@ -54,7 +47,6 @@
|
|
|
54
47
|
--terminal-fg: #e8edf5;
|
|
55
48
|
--terminal-cursor: #ffd166;
|
|
56
49
|
|
|
57
|
-
--shadow-soft: 0 14px 34px rgba(44, 31, 15, 0.16);
|
|
58
50
|
--shadow-strong: 0 24px 54px rgba(44, 31, 15, 0.24);
|
|
59
51
|
}
|
|
60
52
|
|
|
@@ -526,136 +518,6 @@ textarea:focus-visible {
|
|
|
526
518
|
border-radius: 8px;
|
|
527
519
|
}
|
|
528
520
|
|
|
529
|
-
.session-item {
|
|
530
|
-
text-align: left;
|
|
531
|
-
width: 100%;
|
|
532
|
-
border: 1px solid var(--line);
|
|
533
|
-
background: var(--panel-strong);
|
|
534
|
-
color: var(--text);
|
|
535
|
-
border-radius: 10px;
|
|
536
|
-
padding: 11px 11px 11px 10px;
|
|
537
|
-
animation: itemIn 220ms ease both;
|
|
538
|
-
animation-delay: calc(var(--item-index, 0) * 30ms);
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
.session-item:hover {
|
|
542
|
-
border-color: #d1aa7f;
|
|
543
|
-
background: #fff8ef;
|
|
544
|
-
box-shadow: inset 3px 0 0 #d39c6d;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
.session-item.active {
|
|
548
|
-
border-color: #c68d5a;
|
|
549
|
-
background: #fff3e8;
|
|
550
|
-
box-shadow: inset 3px 0 0 var(--accent), 0 0 0 2px rgba(196, 85, 31, 0.14);
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
.session-item.status-history:not(.active),
|
|
554
|
-
.session-item.status-stopped:not(.active),
|
|
555
|
-
.session-item.status-unknown:not(.active) {
|
|
556
|
-
border-color: rgba(181, 146, 99, 0.22);
|
|
557
|
-
background: rgba(255, 252, 247, 0.72);
|
|
558
|
-
box-shadow: none;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
.session-item.status-history:not(.active) .session-name,
|
|
562
|
-
.session-item.status-history:not(.active) .session-meta,
|
|
563
|
-
.session-item.status-history:not(.active) .session-time,
|
|
564
|
-
.session-item.status-stopped:not(.active) .session-name,
|
|
565
|
-
.session-item.status-stopped:not(.active) .session-meta,
|
|
566
|
-
.session-item.status-stopped:not(.active) .session-time,
|
|
567
|
-
.session-item.status-unknown:not(.active) .session-name,
|
|
568
|
-
.session-item.status-unknown:not(.active) .session-meta,
|
|
569
|
-
.session-item.status-unknown:not(.active) .session-time {
|
|
570
|
-
opacity: 0.25;
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
.session-name {
|
|
574
|
-
font-size: 13px;
|
|
575
|
-
font-weight: 700;
|
|
576
|
-
margin-bottom: 6px;
|
|
577
|
-
word-break: break-all;
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
.session-meta {
|
|
581
|
-
display: flex;
|
|
582
|
-
align-items: center;
|
|
583
|
-
gap: 7px;
|
|
584
|
-
font-size: 12px;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
.session-status {
|
|
588
|
-
border-radius: 999px;
|
|
589
|
-
padding: 2px 8px;
|
|
590
|
-
font-weight: 700;
|
|
591
|
-
font-size: 11px;
|
|
592
|
-
line-height: 1.4;
|
|
593
|
-
border: 1px solid transparent;
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
.session-status.running {
|
|
597
|
-
background: var(--status-running-bg);
|
|
598
|
-
color: var(--status-running-text);
|
|
599
|
-
border-color: #a9dacf;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
.session-status.stopped {
|
|
603
|
-
background: var(--status-stopped-bg);
|
|
604
|
-
color: var(--status-stopped-text);
|
|
605
|
-
border-color: #edc98e;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
.session-status.history {
|
|
609
|
-
background: var(--status-history-bg);
|
|
610
|
-
color: var(--status-history-text);
|
|
611
|
-
border-color: #d8cebe;
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
.session-status.unknown {
|
|
615
|
-
background: var(--status-unknown-bg);
|
|
616
|
-
color: var(--status-unknown-text);
|
|
617
|
-
border-color: #cac1fb;
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
.session-count {
|
|
621
|
-
color: var(--muted);
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
.session-time {
|
|
625
|
-
margin-top: 6px;
|
|
626
|
-
font-size: 11px;
|
|
627
|
-
color: #7b6d5d;
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
.workbench-group {
|
|
631
|
-
display: flex;
|
|
632
|
-
flex-direction: column;
|
|
633
|
-
gap: 10px;
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
button.tree-toggle {
|
|
637
|
-
width: 100%;
|
|
638
|
-
text-align: left;
|
|
639
|
-
color: var(--text);
|
|
640
|
-
background: rgba(255, 250, 242, 0.92);
|
|
641
|
-
border-color: rgba(181, 146, 99, 0.38);
|
|
642
|
-
padding: 10px 12px;
|
|
643
|
-
display: flex;
|
|
644
|
-
align-items: flex-start;
|
|
645
|
-
justify-content: flex-start;
|
|
646
|
-
gap: 0;
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
button.tree-toggle:hover {
|
|
650
|
-
transform: none;
|
|
651
|
-
background: #fff6eb;
|
|
652
|
-
border-color: #d1aa7f;
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
button.tree-toggle:active {
|
|
656
|
-
transform: none;
|
|
657
|
-
}
|
|
658
|
-
|
|
659
521
|
.tree-node-block,
|
|
660
522
|
.tree-node-children {
|
|
661
523
|
display: flex;
|
|
@@ -1657,16 +1519,18 @@ body.terminal-mode .composer {
|
|
|
1657
1519
|
gap: 6px;
|
|
1658
1520
|
animation: msgIn 210ms ease both;
|
|
1659
1521
|
animation-delay: 0ms;
|
|
1660
|
-
/* animation 会让每条消息各自建立独立的层叠上下文(transform/opacity 动画的副作用),
|
|
1661
|
-
悬浮显示的 .msg-actions 浮层因此只能在本条消息内部比较 z-index,
|
|
1662
|
-
会被后面消息按 DOM 序整体盖住;悬浮时显式提升本条消息的 z-index 才能穿透 */
|
|
1663
|
-
z-index: 0;
|
|
1664
1522
|
}
|
|
1665
1523
|
|
|
1666
|
-
.msg
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
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
|
+
的区域里,需要显式盖过它 */
|
|
1670
1534
|
z-index: 4;
|
|
1671
1535
|
}
|
|
1672
1536
|
|
|
@@ -1747,12 +1611,6 @@ body.terminal-mode .composer {
|
|
|
1747
1611
|
opacity: 1;
|
|
1748
1612
|
pointer-events: auto;
|
|
1749
1613
|
}
|
|
1750
|
-
|
|
1751
|
-
/* 触屏设备没有真正的 :hover,上面 .msg:hover 提升 z-index 的规则永远不会触发;
|
|
1752
|
-
这里常驻按住基础 z-index 之上,浮层才不会被吸底输入框(sticky, z-index: 3)盖住 */
|
|
1753
|
-
.msg {
|
|
1754
|
-
z-index: 4;
|
|
1755
|
-
}
|
|
1756
1614
|
}
|
|
1757
1615
|
|
|
1758
1616
|
.msg-copy-btn {
|
|
@@ -1781,24 +1639,6 @@ body.terminal-mode .composer {
|
|
|
1781
1639
|
background: var(--subaccent-soft);
|
|
1782
1640
|
}
|
|
1783
1641
|
|
|
1784
|
-
.msg-exit {
|
|
1785
|
-
font-family: var(--font-mono);
|
|
1786
|
-
font-size: 11px;
|
|
1787
|
-
letter-spacing: 0.1px;
|
|
1788
|
-
color: var(--muted);
|
|
1789
|
-
}
|
|
1790
|
-
|
|
1791
|
-
.msg.user .msg-exit {
|
|
1792
|
-
align-self: flex-end;
|
|
1793
|
-
text-align: right;
|
|
1794
|
-
}
|
|
1795
|
-
|
|
1796
|
-
.msg.assistant .msg-exit,
|
|
1797
|
-
.msg.system .msg-exit {
|
|
1798
|
-
align-self: flex-start;
|
|
1799
|
-
text-align: left;
|
|
1800
|
-
}
|
|
1801
|
-
|
|
1802
1642
|
.bubble {
|
|
1803
1643
|
position: relative;
|
|
1804
1644
|
border: 1px solid var(--line);
|
|
@@ -1823,14 +1663,12 @@ body.terminal-mode .composer {
|
|
|
1823
1663
|
}
|
|
1824
1664
|
|
|
1825
1665
|
body.agent-mode .msg.origin-command .bubble,
|
|
1826
|
-
body.agent-mode .msg.origin-command .msg-meta
|
|
1827
|
-
body.agent-mode .msg.origin-command .msg-exit {
|
|
1666
|
+
body.agent-mode .msg.origin-command .msg-meta {
|
|
1828
1667
|
opacity: 0.25;
|
|
1829
1668
|
}
|
|
1830
1669
|
|
|
1831
1670
|
body.command-mode .msg.origin-agent .bubble,
|
|
1832
|
-
body.command-mode .msg.origin-agent .msg-meta
|
|
1833
|
-
body.command-mode .msg.origin-agent .msg-exit {
|
|
1671
|
+
body.command-mode .msg.origin-agent .msg-meta {
|
|
1834
1672
|
opacity: 0.25;
|
|
1835
1673
|
}
|
|
1836
1674
|
|
|
@@ -2039,6 +1877,14 @@ details.trace-card > .trace-card-summary {
|
|
|
2039
1877
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.32) 0%, rgba(255, 249, 240, 0.78) 100%);
|
|
2040
1878
|
}
|
|
2041
1879
|
|
|
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
|
+
|
|
2042
1888
|
.composer-inner {
|
|
2043
1889
|
display: grid;
|
|
2044
1890
|
grid-template-columns: 1fr auto;
|
|
@@ -2131,17 +1977,6 @@ body.composer-options-open .composer-options-panel {
|
|
|
2131
1977
|
}
|
|
2132
1978
|
}
|
|
2133
1979
|
|
|
2134
|
-
@keyframes itemIn {
|
|
2135
|
-
from {
|
|
2136
|
-
opacity: 0;
|
|
2137
|
-
transform: translateY(6px);
|
|
2138
|
-
}
|
|
2139
|
-
to {
|
|
2140
|
-
opacity: 1;
|
|
2141
|
-
transform: translateY(0);
|
|
2142
|
-
}
|
|
2143
|
-
}
|
|
2144
|
-
|
|
2145
1980
|
@keyframes msgIn {
|
|
2146
1981
|
from {
|
|
2147
1982
|
opacity: 0;
|
package/lib/web/frontend/app.js
CHANGED
|
@@ -951,17 +951,6 @@
|
|
|
951
951
|
return base.replace(/\/+$/, '') + '/' + child.replace(/^\/+/, '');
|
|
952
952
|
}
|
|
953
953
|
|
|
954
|
-
function envMapToText(envMap) {
|
|
955
|
-
if (!envMap || typeof envMap !== 'object') {
|
|
956
|
-
return '';
|
|
957
|
-
}
|
|
958
|
-
return Object.entries(envMap)
|
|
959
|
-
.map(function (entry) {
|
|
960
|
-
return entry[0] + '=' + String(entry[1] == null ? '' : entry[1]);
|
|
961
|
-
})
|
|
962
|
-
.join('\n');
|
|
963
|
-
}
|
|
964
|
-
|
|
965
954
|
function textToLineArray(text) {
|
|
966
955
|
return String(text || '')
|
|
967
956
|
.split('\n')
|
|
@@ -2953,10 +2942,6 @@
|
|
|
2953
2942
|
});
|
|
2954
2943
|
}
|
|
2955
2944
|
|
|
2956
|
-
function createTreeMetaText(parts) {
|
|
2957
|
-
return (parts || []).filter(Boolean).join(' · ');
|
|
2958
|
-
}
|
|
2959
|
-
|
|
2960
2945
|
function getSessionCreatedTime(session) {
|
|
2961
2946
|
if (session && session.createdAt) {
|
|
2962
2947
|
const time = new Date(session.createdAt).getTime();
|
|
@@ -3368,7 +3353,7 @@
|
|
|
3368
3353
|
});
|
|
3369
3354
|
}
|
|
3370
3355
|
|
|
3371
|
-
function renderSessionTreeNodes(nodes, parentNode, ancestorHasNext
|
|
3356
|
+
function renderSessionTreeNodes(nodes, parentNode, ancestorHasNext) {
|
|
3372
3357
|
(Array.isArray(nodes) ? nodes : []).forEach(function (node, index) {
|
|
3373
3358
|
const isLastSibling = index === nodes.length - 1;
|
|
3374
3359
|
const item = createTreeItem({
|
|
@@ -3390,8 +3375,6 @@
|
|
|
3390
3375
|
|
|
3391
3376
|
if (node.kind === 'agent') {
|
|
3392
3377
|
item.button.dataset.sessionName = node.sessionName || '';
|
|
3393
|
-
item.button.style.setProperty('--item-index', String(itemCounter.value));
|
|
3394
|
-
itemCounter.value += 1;
|
|
3395
3378
|
state.sessionNodeMap.set(node.sessionName, item.button);
|
|
3396
3379
|
item.button.addEventListener('click', function () {
|
|
3397
3380
|
handleSessionItemClick(node.sessionName || '');
|
|
@@ -3409,7 +3392,7 @@
|
|
|
3409
3392
|
childrenNode.className = `tree-node-children tree-node-children-${node.kind}`;
|
|
3410
3393
|
childrenNode.setAttribute('role', 'group');
|
|
3411
3394
|
childrenNode.hidden = !node.expanded;
|
|
3412
|
-
renderSessionTreeNodes(node.children || [], childrenNode, ancestorHasNext.concat(!isLastSibling)
|
|
3395
|
+
renderSessionTreeNodes(node.children || [], childrenNode, ancestorHasNext.concat(!isLastSibling));
|
|
3413
3396
|
block.appendChild(childrenNode);
|
|
3414
3397
|
parentNode.appendChild(block);
|
|
3415
3398
|
|
|
@@ -3505,8 +3488,7 @@
|
|
|
3505
3488
|
|
|
3506
3489
|
const grouped = groupSessionsByDirectory(state.sessions);
|
|
3507
3490
|
const treeNodes = buildSessionTreeNodes(grouped);
|
|
3508
|
-
|
|
3509
|
-
renderSessionTreeNodes(treeNodes, sessionList, [], itemCounter);
|
|
3491
|
+
renderSessionTreeNodes(treeNodes, sessionList, []);
|
|
3510
3492
|
updateSidebarActiveSelection();
|
|
3511
3493
|
|
|
3512
3494
|
scrollActiveSessionIntoView();
|