@xcanwin/manyoyo 5.4.14 → 5.6.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/README.md +3 -3
- package/docker/manyoyo.Dockerfile +10 -12
- package/lib/agent-resume.js +1 -1
- package/lib/web/frontend/app.css +250 -30
- package/lib/web/frontend/app.html +62 -47
- package/lib/web/frontend/app.js +353 -79
- package/lib/web/server.js +183 -11
- package/package.json +12 -3
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ AI Agent CLI 往往需要:
|
|
|
53
53
|
```bash
|
|
54
54
|
npm install -g @xcanwin/manyoyo
|
|
55
55
|
podman pull ubuntu:24.04 # 仅 Podman 需要
|
|
56
|
-
manyoyo build --iv 1.
|
|
56
|
+
manyoyo build --iv 1.9.0-common
|
|
57
57
|
manyoyo init all
|
|
58
58
|
manyoyo run -r claude
|
|
59
59
|
```
|
|
@@ -137,10 +137,10 @@ manyoyo config command
|
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
139
|
# common 版本
|
|
140
|
-
manyoyo build --iv 1.
|
|
140
|
+
manyoyo build --iv 1.9.0-common
|
|
141
141
|
|
|
142
142
|
# full 版本
|
|
143
|
-
manyoyo build --iv 1.
|
|
143
|
+
manyoyo build --iv 1.9.0-full
|
|
144
144
|
|
|
145
145
|
# 自定义工具集
|
|
146
146
|
manyoyo build --iba TOOL=go,codex,java,gemini
|
|
@@ -221,14 +221,15 @@ RUN <<EOX
|
|
|
221
221
|
# 清理
|
|
222
222
|
npm cache clean --force
|
|
223
223
|
rm -f /tmp/manyoyo-package.json
|
|
224
|
-
rm -rf /tmp/* /var/tmp/* /var/log/apt /var/log/*.log /var/lib/apt/lists/* ~/.npm ~/go/pkg/mod/cache
|
|
224
|
+
rm -rf /tmp/* /var/tmp/* /var/log/apt /var/log/*.log /var/lib/apt/lists/* ~/.npm ~/.cache/node-gyp ~/.claude/plugins/cache ~/go/pkg/mod/cache
|
|
225
|
+
rm -f /var/log/dpkg.log /var/log/bootstrap.log /var/lib/dpkg/status-old /var/cache/debconf/templates.dat-old
|
|
225
226
|
EOX
|
|
226
227
|
|
|
227
228
|
COPY ./docker/res/playwright/playwright-cli-wrapper.sh /usr/local/bin/playwright-cli
|
|
228
229
|
RUN chmod +x /usr/local/bin/playwright-cli
|
|
229
230
|
|
|
230
|
-
# 从 cache-stage 复制 JDT LSP
|
|
231
|
-
COPY --from=cache-stage /opt/jdtls /
|
|
231
|
+
# 从 cache-stage 复制 JDT LSP 到最终位置,避免中转层残留
|
|
232
|
+
COPY --from=cache-stage /opt/jdtls /root/.local/share/jdtls
|
|
232
233
|
|
|
233
234
|
RUN <<EOX
|
|
234
235
|
# 安装 java
|
|
@@ -237,19 +238,16 @@ RUN <<EOX
|
|
|
237
238
|
apt-get install -y --no-install-recommends openjdk-21-jdk maven
|
|
238
239
|
|
|
239
240
|
# 配置 LSP服务(java)
|
|
240
|
-
mkdir -p ~/.local/share/
|
|
241
|
-
cp -a /tmp/jdtls-cache ~/.local/share/jdtls
|
|
242
241
|
ln -sf ~/.local/share/jdtls/bin/jdtls /usr/local/bin/jdtls
|
|
243
242
|
|
|
244
243
|
# 清理
|
|
245
244
|
apt-get clean
|
|
246
245
|
rm -rf /tmp/* /var/tmp/* /var/log/apt /var/log/*.log /var/lib/apt/lists/* ~/.npm ~/go/pkg/mod/cache
|
|
247
246
|
;; esac
|
|
248
|
-
rm -rf /tmp/jdtls-cache
|
|
249
247
|
EOX
|
|
250
248
|
|
|
251
|
-
# 从 cache-stage 复制 gopls
|
|
252
|
-
COPY --from=cache-stage /opt/gopls /
|
|
249
|
+
# 从 cache-stage 复制 gopls 到最终位置,避免中转层残留
|
|
250
|
+
COPY --from=cache-stage /opt/gopls /usr/local/share/manyoyo-gopls
|
|
253
251
|
|
|
254
252
|
RUN <<EOX
|
|
255
253
|
# 安装 go
|
|
@@ -259,21 +257,21 @@ RUN <<EOX
|
|
|
259
257
|
go env -w GOPROXY=https://mirrors.tencent.com/go
|
|
260
258
|
|
|
261
259
|
# 安装 LSP服务(go)
|
|
262
|
-
if [ -f /
|
|
260
|
+
if [ -f /usr/local/share/manyoyo-gopls/gopls ] && [ ! -f /usr/local/share/manyoyo-gopls/.no-cache ]; then
|
|
263
261
|
# 使用缓存
|
|
264
|
-
|
|
265
|
-
|
|
262
|
+
chmod +x /usr/local/share/manyoyo-gopls/gopls
|
|
263
|
+
ln -sf /usr/local/share/manyoyo-gopls/gopls /usr/local/bin/gopls
|
|
266
264
|
else
|
|
267
265
|
# 下载编译
|
|
268
266
|
go install golang.org/x/tools/gopls@latest
|
|
269
267
|
ln -sf ~/go/bin/gopls /usr/local/bin/gopls
|
|
268
|
+
rm -rf /usr/local/share/manyoyo-gopls
|
|
270
269
|
fi
|
|
271
270
|
# 清理
|
|
272
271
|
apt-get clean
|
|
273
272
|
go clean -modcache -cache
|
|
274
273
|
rm -rf /tmp/* /var/tmp/* /var/log/apt /var/log/*.log /var/lib/apt/lists/* ~/.npm ~/go/pkg/mod/cache
|
|
275
274
|
;; esac
|
|
276
|
-
rm -rf /tmp/gopls-cache
|
|
277
275
|
EOX
|
|
278
276
|
|
|
279
277
|
# 配置 supervisor
|
package/lib/agent-resume.js
CHANGED
|
@@ -12,7 +12,7 @@ const AGENT_RESUME_ARG_MAP = {
|
|
|
12
12
|
const AGENT_PROMPT_TEMPLATE_MAP = {
|
|
13
13
|
claude: 'claude -p {prompt}',
|
|
14
14
|
gemini: 'gemini -p {prompt}',
|
|
15
|
-
codex: 'codex exec {prompt}',
|
|
15
|
+
codex: 'codex exec --skip-git-repo-check {prompt}',
|
|
16
16
|
opencode: 'opencode run {prompt}'
|
|
17
17
|
};
|
|
18
18
|
|
package/lib/web/frontend/app.css
CHANGED
|
@@ -580,7 +580,7 @@ textarea:focus-visible {
|
|
|
580
580
|
min-width: 0;
|
|
581
581
|
display: flex;
|
|
582
582
|
flex-direction: column;
|
|
583
|
-
gap:
|
|
583
|
+
gap: 8px;
|
|
584
584
|
}
|
|
585
585
|
|
|
586
586
|
.header-main-top {
|
|
@@ -590,6 +590,11 @@ textarea:focus-visible {
|
|
|
590
590
|
min-width: 0;
|
|
591
591
|
}
|
|
592
592
|
|
|
593
|
+
.header-menu {
|
|
594
|
+
position: relative;
|
|
595
|
+
flex: none;
|
|
596
|
+
}
|
|
597
|
+
|
|
593
598
|
#activeTitle {
|
|
594
599
|
margin: 0;
|
|
595
600
|
font-family: var(--font-display);
|
|
@@ -611,11 +616,24 @@ textarea:focus-visible {
|
|
|
611
616
|
color: var(--muted);
|
|
612
617
|
}
|
|
613
618
|
|
|
619
|
+
.workbench-tabs {
|
|
620
|
+
display: inline-flex;
|
|
621
|
+
flex-wrap: wrap;
|
|
622
|
+
gap: 8px;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
.workbench-tabs button.is-active,
|
|
626
|
+
.composer-mode-switch button.is-active {
|
|
627
|
+
color: #ffffff;
|
|
628
|
+
background: var(--accent);
|
|
629
|
+
border-color: var(--accent-strong);
|
|
630
|
+
}
|
|
631
|
+
|
|
614
632
|
.header-actions {
|
|
615
633
|
display: none;
|
|
616
634
|
position: absolute;
|
|
617
|
-
top: calc(100% +
|
|
618
|
-
right:
|
|
635
|
+
top: calc(100% + 8px);
|
|
636
|
+
right: 0;
|
|
619
637
|
z-index: 8;
|
|
620
638
|
width: min(240px, calc(100vw - 36px));
|
|
621
639
|
padding: 8px;
|
|
@@ -631,40 +649,34 @@ body.mobile-actions-open .header-actions {
|
|
|
631
649
|
display: grid;
|
|
632
650
|
}
|
|
633
651
|
|
|
634
|
-
|
|
635
|
-
|
|
652
|
+
.workspace-shell {
|
|
653
|
+
min-height: 0;
|
|
654
|
+
margin-top: 10px;
|
|
655
|
+
display: grid;
|
|
656
|
+
grid-template-columns: minmax(0, 1fr) 320px;
|
|
657
|
+
gap: 14px;
|
|
636
658
|
}
|
|
637
659
|
|
|
638
|
-
.
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
z-index: 8;
|
|
644
|
-
width: min(200px, calc(100vw - 36px));
|
|
645
|
-
padding: 8px;
|
|
646
|
-
border: 1px solid var(--line);
|
|
647
|
-
border-radius: 10px;
|
|
648
|
-
background: #fffaf2;
|
|
649
|
-
box-shadow: var(--shadow-strong);
|
|
650
|
-
grid-template-columns: 1fr;
|
|
651
|
-
gap: 8px;
|
|
660
|
+
.workspace-main {
|
|
661
|
+
min-height: 0;
|
|
662
|
+
display: grid;
|
|
663
|
+
grid-template-rows: minmax(0, 1fr) auto;
|
|
664
|
+
gap: 0;
|
|
652
665
|
}
|
|
653
666
|
|
|
654
|
-
|
|
655
|
-
|
|
667
|
+
.workspace-pane {
|
|
668
|
+
min-height: 0;
|
|
656
669
|
}
|
|
657
670
|
|
|
658
|
-
.
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
border-color: var(--accent-strong);
|
|
671
|
+
.workspace-pane[hidden],
|
|
672
|
+
.composer[hidden] {
|
|
673
|
+
display: none !important;
|
|
662
674
|
}
|
|
663
675
|
|
|
664
676
|
#messages {
|
|
665
677
|
min-height: 0;
|
|
666
678
|
overflow-y: auto;
|
|
667
|
-
margin:
|
|
679
|
+
margin: 0;
|
|
668
680
|
padding: 14px;
|
|
669
681
|
border: 1px solid var(--line);
|
|
670
682
|
border-radius: 14px;
|
|
@@ -678,9 +690,163 @@ body.mode-menu-open .mode-menu {
|
|
|
678
690
|
|
|
679
691
|
#terminalPanel {
|
|
680
692
|
min-height: 0;
|
|
681
|
-
display: none;
|
|
682
693
|
flex-direction: column;
|
|
683
|
-
margin:
|
|
694
|
+
margin: 0;
|
|
695
|
+
border: 1px solid var(--line);
|
|
696
|
+
border-radius: 14px;
|
|
697
|
+
overflow: hidden;
|
|
698
|
+
background: #131923;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
.inspector-pane {
|
|
702
|
+
overflow-y: auto;
|
|
703
|
+
padding: 0;
|
|
704
|
+
border: 1px solid var(--line);
|
|
705
|
+
border-radius: 14px;
|
|
706
|
+
background:
|
|
707
|
+
linear-gradient(180deg, rgba(255, 255, 255, 0.88) 0%, rgba(252, 246, 236, 0.88) 100%);
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
.context-panel {
|
|
711
|
+
min-height: 0;
|
|
712
|
+
overflow-y: auto;
|
|
713
|
+
border: 1px solid var(--line);
|
|
714
|
+
border-radius: 16px;
|
|
715
|
+
background:
|
|
716
|
+
linear-gradient(180deg, rgba(255, 255, 255, 0.94) 0%, rgba(251, 244, 232, 0.96) 100%);
|
|
717
|
+
box-shadow: 0 10px 24px rgba(46, 31, 13, 0.08);
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
.inspector-stack {
|
|
721
|
+
display: flex;
|
|
722
|
+
flex-direction: column;
|
|
723
|
+
gap: 12px;
|
|
724
|
+
padding: 14px;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
.info-card {
|
|
728
|
+
display: flex;
|
|
729
|
+
flex-direction: column;
|
|
730
|
+
gap: 10px;
|
|
731
|
+
padding: 14px;
|
|
732
|
+
border: 1px solid rgba(181, 146, 99, 0.4);
|
|
733
|
+
border-radius: 14px;
|
|
734
|
+
background: rgba(255, 253, 250, 0.9);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
.empty-card {
|
|
738
|
+
min-height: 112px;
|
|
739
|
+
justify-content: center;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
.card-head {
|
|
743
|
+
display: flex;
|
|
744
|
+
align-items: center;
|
|
745
|
+
justify-content: space-between;
|
|
746
|
+
gap: 10px;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
.card-title {
|
|
750
|
+
font-family: var(--font-display);
|
|
751
|
+
font-size: 15px;
|
|
752
|
+
font-weight: 700;
|
|
753
|
+
letter-spacing: 0.3px;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
.card-desc {
|
|
757
|
+
color: var(--muted);
|
|
758
|
+
font-size: 13px;
|
|
759
|
+
line-height: 1.55;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
.inline-action {
|
|
763
|
+
padding: 6px 10px;
|
|
764
|
+
font-size: 12px;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
.kv-list,
|
|
768
|
+
.check-list {
|
|
769
|
+
display: flex;
|
|
770
|
+
flex-direction: column;
|
|
771
|
+
gap: 8px;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.kv-row {
|
|
775
|
+
display: grid;
|
|
776
|
+
grid-template-columns: 108px minmax(0, 1fr);
|
|
777
|
+
gap: 10px;
|
|
778
|
+
align-items: start;
|
|
779
|
+
padding-top: 8px;
|
|
780
|
+
border-top: 1px dashed rgba(181, 146, 99, 0.34);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
.kv-row:first-child {
|
|
784
|
+
padding-top: 0;
|
|
785
|
+
border-top: none;
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
.kv-label {
|
|
789
|
+
min-width: 0;
|
|
790
|
+
color: var(--muted);
|
|
791
|
+
font-size: 12px;
|
|
792
|
+
font-weight: 700;
|
|
793
|
+
text-transform: uppercase;
|
|
794
|
+
letter-spacing: 0.3px;
|
|
795
|
+
line-height: 1.45;
|
|
796
|
+
overflow-wrap: anywhere;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
.kv-value {
|
|
800
|
+
min-width: 0;
|
|
801
|
+
color: var(--text);
|
|
802
|
+
font-family: var(--font-mono);
|
|
803
|
+
font-size: 12px;
|
|
804
|
+
line-height: 1.5;
|
|
805
|
+
word-break: break-word;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
.check-item {
|
|
809
|
+
display: flex;
|
|
810
|
+
flex-direction: column;
|
|
811
|
+
gap: 4px;
|
|
812
|
+
padding: 10px 12px;
|
|
813
|
+
border-radius: 12px;
|
|
814
|
+
border: 1px solid rgba(181, 146, 99, 0.28);
|
|
815
|
+
background: rgba(255, 252, 246, 0.86);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
.check-main {
|
|
819
|
+
display: flex;
|
|
820
|
+
align-items: center;
|
|
821
|
+
justify-content: space-between;
|
|
822
|
+
gap: 10px;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
.check-label,
|
|
826
|
+
.check-value {
|
|
827
|
+
font-weight: 700;
|
|
828
|
+
font-size: 13px;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
.check-detail {
|
|
832
|
+
color: var(--muted);
|
|
833
|
+
font-size: 12px;
|
|
834
|
+
line-height: 1.45;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
.tone-ok .check-value,
|
|
838
|
+
.kv-row.tone-ok .kv-value {
|
|
839
|
+
color: var(--subaccent-strong);
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
.tone-warn .check-value,
|
|
843
|
+
.kv-row.tone-warn .kv-value {
|
|
844
|
+
color: #9a5a09;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
.tone-danger .check-value,
|
|
848
|
+
.kv-row.tone-danger .kv-value {
|
|
849
|
+
color: var(--danger);
|
|
684
850
|
}
|
|
685
851
|
|
|
686
852
|
.term-keybar {
|
|
@@ -890,11 +1056,29 @@ body.command-mode .msg.origin-agent .bubble {
|
|
|
890
1056
|
|
|
891
1057
|
.composer {
|
|
892
1058
|
border-top: 1px solid rgba(181, 146, 99, 0.45);
|
|
893
|
-
margin-top:
|
|
1059
|
+
margin-top: 12px;
|
|
894
1060
|
padding: 12px 8px 4px;
|
|
895
1061
|
background: linear-gradient(180deg, rgba(255, 255, 255, 0.32) 0%, rgba(255, 249, 240, 0.78) 100%);
|
|
896
1062
|
}
|
|
897
1063
|
|
|
1064
|
+
.composer-toolbar {
|
|
1065
|
+
display: flex;
|
|
1066
|
+
align-items: center;
|
|
1067
|
+
justify-content: space-between;
|
|
1068
|
+
gap: 10px;
|
|
1069
|
+
margin-bottom: 10px;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
.composer-mode-switch {
|
|
1073
|
+
display: inline-flex;
|
|
1074
|
+
gap: 8px;
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
.composer-toolbar-tip {
|
|
1078
|
+
color: var(--muted);
|
|
1079
|
+
font-size: 12px;
|
|
1080
|
+
}
|
|
1081
|
+
|
|
898
1082
|
.composer-inner {
|
|
899
1083
|
display: grid;
|
|
900
1084
|
grid-template-columns: 1fr auto;
|
|
@@ -1035,8 +1219,18 @@ body.command-mode .msg.origin-agent .bubble {
|
|
|
1035
1219
|
grid-template-columns: minmax(0, 1fr);
|
|
1036
1220
|
}
|
|
1037
1221
|
|
|
1222
|
+
.workspace-shell {
|
|
1223
|
+
grid-template-columns: minmax(0, 1fr);
|
|
1224
|
+
gap: 10px;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
.context-panel {
|
|
1228
|
+
display: none;
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1038
1231
|
#messages,
|
|
1039
|
-
#terminalPanel
|
|
1232
|
+
#terminalPanel,
|
|
1233
|
+
.inspector-pane {
|
|
1040
1234
|
min-height: 0;
|
|
1041
1235
|
}
|
|
1042
1236
|
|
|
@@ -1088,6 +1282,32 @@ body.command-mode .msg.origin-agent .bubble {
|
|
|
1088
1282
|
display: none;
|
|
1089
1283
|
}
|
|
1090
1284
|
|
|
1285
|
+
.workbench-tabs {
|
|
1286
|
+
display: grid;
|
|
1287
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
1288
|
+
gap: 6px;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
.workbench-tabs button {
|
|
1292
|
+
padding: 8px 10px;
|
|
1293
|
+
font-size: 12px;
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
.composer-toolbar {
|
|
1297
|
+
flex-direction: column;
|
|
1298
|
+
align-items: flex-start;
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
.composer-toolbar-tip {
|
|
1302
|
+
display: none;
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
.composer-mode-switch {
|
|
1306
|
+
width: 100%;
|
|
1307
|
+
display: grid;
|
|
1308
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1091
1311
|
#commandInput {
|
|
1092
1312
|
min-height: 68px;
|
|
1093
1313
|
max-height: 160px;
|
|
@@ -48,59 +48,74 @@
|
|
|
48
48
|
aria-controls="sessionList"
|
|
49
49
|
>会话</button>
|
|
50
50
|
<h1 id="activeTitle">未选择会话</h1>
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
51
|
+
<div class="header-menu">
|
|
52
|
+
<button
|
|
53
|
+
type="button"
|
|
54
|
+
id="mobileActionsToggle"
|
|
55
|
+
class="secondary mobile-actions-toggle"
|
|
56
|
+
aria-expanded="false"
|
|
57
|
+
aria-controls="headerActions"
|
|
58
|
+
>更多</button>
|
|
59
|
+
<div class="header-actions" id="headerActions">
|
|
60
|
+
<button type="button" id="refreshBtn" class="secondary">刷新</button>
|
|
61
|
+
<button type="button" id="removeBtn" class="danger-outline">删除容器</button>
|
|
62
|
+
<button type="button" id="removeAllBtn" class="danger">删除对话</button>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
65
|
</div>
|
|
66
66
|
<div id="activeMeta">请选择左侧会话</div>
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
<div class="header-actions" id="headerActions">
|
|
74
|
-
<button type="button" id="refreshBtn" class="secondary">刷新</button>
|
|
75
|
-
<button type="button" id="removeBtn" class="danger-outline">删除容器</button>
|
|
76
|
-
<button type="button" id="removeAllBtn" class="danger">删除对话</button>
|
|
67
|
+
<div class="workbench-tabs" id="workbenchTabs" aria-label="工作台视图">
|
|
68
|
+
<button type="button" id="viewActivityBtn" class="secondary is-active">活动</button>
|
|
69
|
+
<button type="button" id="viewTerminalBtn" class="secondary">终端</button>
|
|
70
|
+
<button type="button" id="viewConfigBtn" class="secondary">配置</button>
|
|
71
|
+
<button type="button" id="viewCheckBtn" class="secondary">检查</button>
|
|
72
|
+
</div>
|
|
77
73
|
</div>
|
|
78
74
|
</header>
|
|
79
|
-
<section
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
<
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
75
|
+
<section class="workspace-shell">
|
|
76
|
+
<div class="workspace-main">
|
|
77
|
+
<section id="messages" class="workspace-pane"></section>
|
|
78
|
+
<section id="terminalPanel" class="workspace-pane" hidden>
|
|
79
|
+
<div id="terminalKeybar" class="term-keybar" aria-label="终端快捷键">
|
|
80
|
+
<button type="button" class="term-key-btn" data-key="esc">esc</button>
|
|
81
|
+
<button type="button" class="term-key-btn" data-key="tab">tab</button>
|
|
82
|
+
<button type="button" class="term-key-btn term-ctrl-btn" data-key="ctrl">ctrl</button>
|
|
83
|
+
<button type="button" class="term-key-btn term-alt-btn" data-key="alt">alt</button>
|
|
84
|
+
<button type="button" class="term-key-btn" data-key="left"> ◀ </button>
|
|
85
|
+
<button type="button" class="term-key-btn" data-key="up"> ▲ </button>
|
|
86
|
+
<button type="button" class="term-key-btn" data-key="down"> ▼ </button>
|
|
87
|
+
<button type="button" class="term-key-btn" data-key="right"> ▶ </button>
|
|
88
|
+
</div>
|
|
89
|
+
<div id="terminalScreen" aria-label="终端输出区域"></div>
|
|
90
|
+
</section>
|
|
91
|
+
<section id="configPanel" class="workspace-pane inspector-pane" hidden>
|
|
92
|
+
<div id="configSummary" class="inspector-stack"></div>
|
|
93
|
+
</section>
|
|
94
|
+
<section id="checkPanel" class="workspace-pane inspector-pane" hidden>
|
|
95
|
+
<div id="checkSummary" class="inspector-stack"></div>
|
|
96
|
+
</section>
|
|
97
|
+
<form class="composer" id="composer">
|
|
98
|
+
<div class="composer-toolbar">
|
|
99
|
+
<div class="composer-mode-switch" aria-label="活动输入模式">
|
|
100
|
+
<button type="button" id="activityAgentBtn" class="secondary is-active">Agent</button>
|
|
101
|
+
<button type="button" id="activityCommandBtn" class="secondary">命令</button>
|
|
102
|
+
</div>
|
|
103
|
+
<div class="composer-toolbar-tip">活动页支持 Agent 提示词和容器命令两种输入。</div>
|
|
104
|
+
</div>
|
|
105
|
+
<div class="composer-inner">
|
|
106
|
+
<textarea id="commandInput" placeholder="输入容器命令,例如: ls -la"></textarea>
|
|
107
|
+
<button type="submit" id="sendBtn">发送</button>
|
|
108
|
+
</div>
|
|
109
|
+
<div class="composer-foot">
|
|
110
|
+
<span id="composerHint">Enter 发送 · Shift/Alt + Enter 换行</span>
|
|
111
|
+
<span id="sendState" class="send-state">未选择会话</span>
|
|
112
|
+
</div>
|
|
113
|
+
</form>
|
|
90
114
|
</div>
|
|
91
|
-
<
|
|
92
|
-
|
|
115
|
+
<aside class="context-panel" id="contextPanel">
|
|
116
|
+
<div id="contextSummary" class="inspector-stack"></div>
|
|
117
|
+
</aside>
|
|
93
118
|
</section>
|
|
94
|
-
<form class="composer" id="composer">
|
|
95
|
-
<div class="composer-inner">
|
|
96
|
-
<textarea id="commandInput" placeholder="输入容器命令,例如: ls -la"></textarea>
|
|
97
|
-
<button type="submit" id="sendBtn">发送</button>
|
|
98
|
-
</div>
|
|
99
|
-
<div class="composer-foot">
|
|
100
|
-
<span id="composerHint">Enter 发送 · Shift/Alt + Enter 换行</span>
|
|
101
|
-
<span id="sendState" class="send-state">未选择会话</span>
|
|
102
|
-
</div>
|
|
103
|
-
</form>
|
|
104
119
|
</main>
|
|
105
120
|
<div id="sidebarBackdrop" class="sidebar-backdrop" hidden></div>
|
|
106
121
|
|