@xcanwin/manyoyo 5.7.3 → 5.7.6
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 +262 -0
- package/lib/web/frontend/app.html +33 -3
- package/lib/web/frontend/app.js +818 -103
- package/lib/web/server.js +512 -161
- package/package.json +1 -1
package/lib/web/frontend/app.css
CHANGED
|
@@ -378,6 +378,17 @@ textarea:focus-visible {
|
|
|
378
378
|
font-family: var(--font-ui);
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
+
.field-inline {
|
|
382
|
+
display: grid;
|
|
383
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
384
|
+
gap: 8px;
|
|
385
|
+
align-items: center;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.field-picker-btn {
|
|
389
|
+
white-space: nowrap;
|
|
390
|
+
}
|
|
391
|
+
|
|
381
392
|
.text-block {
|
|
382
393
|
margin-top: 10px;
|
|
383
394
|
}
|
|
@@ -519,6 +530,235 @@ textarea:focus-visible {
|
|
|
519
530
|
color: #7b6d5d;
|
|
520
531
|
}
|
|
521
532
|
|
|
533
|
+
.workbench-group {
|
|
534
|
+
display: flex;
|
|
535
|
+
flex-direction: column;
|
|
536
|
+
gap: 8px;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
button.tree-toggle {
|
|
540
|
+
width: 100%;
|
|
541
|
+
text-align: left;
|
|
542
|
+
color: var(--text);
|
|
543
|
+
background: rgba(255, 250, 242, 0.92);
|
|
544
|
+
border-color: rgba(181, 146, 99, 0.38);
|
|
545
|
+
padding: 10px 12px;
|
|
546
|
+
display: flex;
|
|
547
|
+
align-items: flex-start;
|
|
548
|
+
justify-content: space-between;
|
|
549
|
+
gap: 12px;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
button.tree-toggle:hover {
|
|
553
|
+
transform: none;
|
|
554
|
+
background: #fff6eb;
|
|
555
|
+
border-color: #d1aa7f;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
button.tree-toggle:active {
|
|
559
|
+
transform: none;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
button.tree-toggle:focus-visible {
|
|
563
|
+
outline: none;
|
|
564
|
+
box-shadow: 0 0 0 3px rgba(196, 85, 31, 0.14);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
.tree-toggle-main {
|
|
568
|
+
min-width: 0;
|
|
569
|
+
display: flex;
|
|
570
|
+
flex-direction: column;
|
|
571
|
+
gap: 4px;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.tree-toggle-meta {
|
|
575
|
+
color: var(--muted);
|
|
576
|
+
font-size: 11px;
|
|
577
|
+
line-height: 1.45;
|
|
578
|
+
word-break: break-word;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
.tree-toggle-caret {
|
|
582
|
+
color: #8c7257;
|
|
583
|
+
font-size: 18px;
|
|
584
|
+
line-height: 1;
|
|
585
|
+
flex-shrink: 0;
|
|
586
|
+
transition: transform 140ms ease;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
.tree-toggle[aria-expanded="true"] .tree-toggle-caret {
|
|
590
|
+
transform: rotate(90deg);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
.workbench-group-head {
|
|
594
|
+
padding: 10px 12px;
|
|
595
|
+
border: 1px solid rgba(181, 146, 99, 0.38);
|
|
596
|
+
border-radius: 12px;
|
|
597
|
+
background: rgba(255, 250, 242, 0.92);
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
.workbench-group.has-active .workbench-group-head,
|
|
601
|
+
.container-card.has-active {
|
|
602
|
+
border-color: #c68d5a;
|
|
603
|
+
box-shadow: 0 0 0 2px rgba(196, 85, 31, 0.08);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
.workbench-group-body {
|
|
607
|
+
display: flex;
|
|
608
|
+
flex-direction: column;
|
|
609
|
+
gap: 8px;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
.workbench-group-body[hidden] {
|
|
613
|
+
display: none;
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
.workbench-group-kicker,
|
|
617
|
+
.container-card-kicker {
|
|
618
|
+
color: var(--muted);
|
|
619
|
+
font-size: 10px;
|
|
620
|
+
font-weight: 700;
|
|
621
|
+
letter-spacing: 0.7px;
|
|
622
|
+
text-transform: uppercase;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
.workbench-group-title,
|
|
626
|
+
.container-card-title {
|
|
627
|
+
margin-top: 3px;
|
|
628
|
+
font-weight: 700;
|
|
629
|
+
font-size: 13px;
|
|
630
|
+
line-height: 1.45;
|
|
631
|
+
word-break: break-word;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
.container-stack {
|
|
635
|
+
display: flex;
|
|
636
|
+
flex-direction: column;
|
|
637
|
+
gap: 8px;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
.container-card {
|
|
641
|
+
border: 1px solid var(--line);
|
|
642
|
+
border-radius: 12px;
|
|
643
|
+
background: rgba(255, 255, 255, 0.9);
|
|
644
|
+
padding: 10px;
|
|
645
|
+
display: flex;
|
|
646
|
+
flex-direction: column;
|
|
647
|
+
gap: 10px;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
.container-card-head {
|
|
651
|
+
display: flex;
|
|
652
|
+
align-items: flex-start;
|
|
653
|
+
justify-content: space-between;
|
|
654
|
+
gap: 10px;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
.container-toggle {
|
|
658
|
+
flex: 1;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
.container-card-meta {
|
|
662
|
+
display: flex;
|
|
663
|
+
flex-wrap: wrap;
|
|
664
|
+
gap: 6px;
|
|
665
|
+
align-items: center;
|
|
666
|
+
color: var(--muted);
|
|
667
|
+
font-size: 11px;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
.add-agent-btn {
|
|
671
|
+
padding: 7px 10px;
|
|
672
|
+
font-size: 12px;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
.agent-list {
|
|
676
|
+
display: flex;
|
|
677
|
+
flex-direction: column;
|
|
678
|
+
gap: 6px;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
.agent-list[hidden] {
|
|
682
|
+
display: none;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
.agent-item {
|
|
686
|
+
text-align: left;
|
|
687
|
+
width: 100%;
|
|
688
|
+
border: 1px solid rgba(181, 146, 99, 0.42);
|
|
689
|
+
background: var(--panel-strong);
|
|
690
|
+
color: var(--text);
|
|
691
|
+
border-radius: 10px;
|
|
692
|
+
padding: 10px;
|
|
693
|
+
animation: itemIn 220ms ease both;
|
|
694
|
+
animation-delay: calc(var(--item-index, 0) * 24ms);
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
.agent-item:hover {
|
|
698
|
+
border-color: #d1aa7f;
|
|
699
|
+
background: #fff8ef;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
.agent-item.active {
|
|
703
|
+
border-color: #c68d5a;
|
|
704
|
+
background: #fff3e8;
|
|
705
|
+
box-shadow: inset 3px 0 0 var(--accent), 0 0 0 2px rgba(196, 85, 31, 0.14);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
.agent-name {
|
|
709
|
+
font-size: 13px;
|
|
710
|
+
font-weight: 700;
|
|
711
|
+
margin-bottom: 6px;
|
|
712
|
+
word-break: break-word;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
.agent-meta {
|
|
716
|
+
display: flex;
|
|
717
|
+
align-items: center;
|
|
718
|
+
gap: 7px;
|
|
719
|
+
font-size: 12px;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.agent-time {
|
|
723
|
+
margin-top: 6px;
|
|
724
|
+
font-size: 11px;
|
|
725
|
+
color: #7b6d5d;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
.dir-picker-modal {
|
|
729
|
+
width: min(720px, calc(100vw - 24px));
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
.dir-picker-toolbar {
|
|
733
|
+
display: flex;
|
|
734
|
+
justify-content: space-between;
|
|
735
|
+
gap: 8px;
|
|
736
|
+
margin-bottom: 10px;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
.dir-picker-current {
|
|
740
|
+
margin-bottom: 10px;
|
|
741
|
+
padding: 10px 12px;
|
|
742
|
+
border: 1px solid rgba(181, 146, 99, 0.38);
|
|
743
|
+
border-radius: 10px;
|
|
744
|
+
background: rgba(255, 251, 244, 0.92);
|
|
745
|
+
color: var(--text);
|
|
746
|
+
font-family: var(--font-mono);
|
|
747
|
+
font-size: 12px;
|
|
748
|
+
word-break: break-all;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
.dir-picker-list {
|
|
752
|
+
display: flex;
|
|
753
|
+
flex-direction: column;
|
|
754
|
+
gap: 8px;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
.dir-picker-item {
|
|
758
|
+
width: 100%;
|
|
759
|
+
text-align: left;
|
|
760
|
+
}
|
|
761
|
+
|
|
522
762
|
.empty {
|
|
523
763
|
padding: 12px 10px;
|
|
524
764
|
border: 1px dashed #d4bf9f;
|
|
@@ -1308,6 +1548,28 @@ details.trace-card > .trace-card-summary {
|
|
|
1308
1548
|
}
|
|
1309
1549
|
}
|
|
1310
1550
|
|
|
1551
|
+
.streaming-reply {
|
|
1552
|
+
border-color: var(--subaccent);
|
|
1553
|
+
box-shadow: 0 8px 16px rgba(15, 124, 114, 0.10);
|
|
1554
|
+
}
|
|
1555
|
+
|
|
1556
|
+
.streaming-cursor {
|
|
1557
|
+
display: inline-block;
|
|
1558
|
+
width: 7px;
|
|
1559
|
+
height: 16px;
|
|
1560
|
+
margin-left: 2px;
|
|
1561
|
+
vertical-align: text-bottom;
|
|
1562
|
+
background: var(--subaccent);
|
|
1563
|
+
border-radius: 2px;
|
|
1564
|
+
animation: blink-cursor 640ms steps(2, start) infinite;
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1567
|
+
@keyframes blink-cursor {
|
|
1568
|
+
to {
|
|
1569
|
+
visibility: hidden;
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1311
1573
|
@keyframes shimmer {
|
|
1312
1574
|
100% {
|
|
1313
1575
|
transform: translateX(100%);
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
>关闭</button>
|
|
32
32
|
</div>
|
|
33
33
|
<div class="session-head">
|
|
34
|
-
<span
|
|
34
|
+
<span>工作台</span>
|
|
35
35
|
<span id="sessionCount">0 个</span>
|
|
36
36
|
</div>
|
|
37
37
|
<div id="sessionList"></div>
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
>更多</button>
|
|
59
59
|
<div class="header-actions" id="headerActions">
|
|
60
60
|
<button type="button" id="refreshBtn" class="secondary">刷新</button>
|
|
61
|
+
<button type="button" id="addAgentBtn" class="secondary">新建AGENT</button>
|
|
61
62
|
<button type="button" id="removeBtn" class="danger-outline">删除容器</button>
|
|
62
63
|
<button type="button" id="removeAllBtn" class="danger">删除对话</button>
|
|
63
64
|
</div>
|
|
@@ -154,9 +155,19 @@
|
|
|
154
155
|
<option value="">(不使用 run)</option>
|
|
155
156
|
</select>
|
|
156
157
|
</label>
|
|
157
|
-
<label>hostPath
|
|
158
|
+
<label>hostPath
|
|
159
|
+
<div class="field-inline">
|
|
160
|
+
<input id="createHostPath" placeholder="/abs/path/project" />
|
|
161
|
+
<button type="button" id="pickHostPathBtn" class="secondary field-picker-btn">选择</button>
|
|
162
|
+
</div>
|
|
163
|
+
</label>
|
|
158
164
|
<label>containerName<input id="createContainerName" placeholder="my-dev 或 my-{now}" /></label>
|
|
159
|
-
<label>containerPath
|
|
165
|
+
<label>containerPath
|
|
166
|
+
<div class="field-inline">
|
|
167
|
+
<input id="createContainerPath" placeholder="/workspace" />
|
|
168
|
+
<button type="button" id="pickContainerPathBtn" class="secondary field-picker-btn">选择</button>
|
|
169
|
+
</div>
|
|
170
|
+
</label>
|
|
160
171
|
<label>imageName<input id="createImageName" placeholder="localhost/xcanwin/manyoyo" /></label>
|
|
161
172
|
<label>imageVersion<input id="createImageVersion" placeholder="1.7.4-common" /></label>
|
|
162
173
|
<label>containerMode
|
|
@@ -190,6 +201,25 @@
|
|
|
190
201
|
</form>
|
|
191
202
|
</section>
|
|
192
203
|
</div>
|
|
204
|
+
|
|
205
|
+
<div id="directoryPickerModal" class="modal-backdrop" hidden>
|
|
206
|
+
<section class="modal dir-picker-modal" role="dialog" aria-modal="true" aria-labelledby="directoryPickerTitle">
|
|
207
|
+
<header class="modal-header">
|
|
208
|
+
<h2 id="directoryPickerTitle">选择目录</h2>
|
|
209
|
+
<button type="button" id="directoryPickerCancelBtn" class="secondary">关闭</button>
|
|
210
|
+
</header>
|
|
211
|
+
<div class="modal-body">
|
|
212
|
+
<div id="directoryPickerTip" class="modal-tip"></div>
|
|
213
|
+
<div class="dir-picker-toolbar">
|
|
214
|
+
<button type="button" id="directoryPickerUpBtn" class="secondary">上一级</button>
|
|
215
|
+
<button type="button" id="directoryPickerSelectBtn">使用当前目录</button>
|
|
216
|
+
</div>
|
|
217
|
+
<div id="directoryPickerCurrent" class="dir-picker-current"></div>
|
|
218
|
+
<div id="directoryPickerError" class="modal-error" hidden></div>
|
|
219
|
+
<div id="directoryPickerList" class="dir-picker-list"></div>
|
|
220
|
+
</div>
|
|
221
|
+
</section>
|
|
222
|
+
</div>
|
|
193
223
|
</div>
|
|
194
224
|
|
|
195
225
|
<script src="/app/vendor/xterm.js"></script>
|