codebee 0.1.21 → 0.1.23
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/CHANGELOG.md +183 -171
- package/README.md +32 -6
- package/app/core/aiflavor.py +63 -9
- package/app/core/knowledge.py +19 -7
- package/app/core/pipeline.py +146 -6
- package/app/core/portscan.py +188 -0
- package/app/core/router.py +57 -5
- package/app/core/skills.py +26 -47
- package/app/core/task_compile.py +87 -0
- package/app/main.py +42 -0
- package/app/pet.py +125 -28
- package/app/ui/app.js +264 -18
- package/app/ui/i18n.js +35 -0
- package/app/ui/index.html +1143 -1137
- package/app/ui/style.css +64 -0
- package/package.json +1 -1
package/app/ui/index.html
CHANGED
|
@@ -1,1148 +1,1154 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="zh-CN" data-lang="zh">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
6
|
-
<title>CodeBee · 多智能体编排台</title>
|
|
7
|
-
<link rel="manifest" href="manifest.json">
|
|
8
|
-
<link rel="icon" href="icons/icon-192.png">
|
|
9
|
-
<link rel="apple-touch-icon" href="icons/icon-192.png">
|
|
10
|
-
<meta name="theme-color" content="#6d5df6">
|
|
11
|
-
<meta name="mobile-web-app-capable" content="yes">
|
|
12
|
-
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
13
|
-
<meta name="apple-mobile-web-app-status-bar-style"="black-translucent">
|
|
14
|
-
<meta name="apple-mobile-web-app-title" content="CodeBee">
|
|
15
|
-
<link rel="stylesheet" href="style.css">
|
|
16
|
-
<!-- 首屏预涂:在样式表之后、绘制之前定好皮肤与明暗 + 语言,避免刷新时闪一下默认配色。
|
|
17
|
-
皮肤值不在这里校验——非法值匹配不到任何 html[data-skin=...] 规则,首涂落经典底色,
|
|
18
|
-
app.js 加载后会按 currentSkin() 校正为默认皮肤。 -->
|
|
19
|
-
<script>
|
|
20
|
-
(function () {
|
|
21
|
-
try {
|
|
22
|
-
document.documentElement.dataset.skin = localStorage.getItem("orch.skin") || "ocean";
|
|
23
|
-
document.documentElement.dataset.theme = localStorage.getItem("orch.theme") === "dark" ? "dark" : "light";
|
|
24
|
-
document.documentElement.dataset.lang = localStorage.getItem("orch.lang") === "en" ? "en" : "zh";
|
|
25
|
-
document.documentElement.lang = document.documentElement.dataset.lang === "en" ? "en" : "zh-CN";
|
|
26
|
-
} catch (e) {
|
|
27
|
-
document.documentElement.dataset.skin = "ocean";
|
|
28
|
-
document.documentElement.dataset.theme = "light";
|
|
29
|
-
document.documentElement.dataset.lang = "zh";
|
|
30
|
-
}
|
|
31
|
-
})();
|
|
32
|
-
</script>
|
|
33
|
-
</head>
|
|
34
|
-
<body>
|
|
35
|
-
<!-- ================= 图标精灵:统一线性图标(stroke=currentColor,随主题与 hover 自动变色) ================= -->
|
|
36
|
-
<svg id="icon-sprite" aria-hidden="true" focusable="false">
|
|
37
|
-
<symbol id="i-search" viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.8-4.8"/></symbol>
|
|
38
|
-
<symbol id="i-help" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/></symbol>
|
|
39
|
-
<symbol id="i-chevrons-d" viewBox="0 0 24 24"><path d="m6 6 6 6 6-6"/><path d="m6 13 6 6 6-6"/></symbol>
|
|
40
|
-
<symbol id="i-gear" viewBox="0 0 24 24"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></symbol>
|
|
41
|
-
<symbol id="i-tasks" viewBox="0 0 24 24"><path d="M3 6h11"/><path d="M3 12h11"/><path d="M3 18h7"/><path d="m16.5 16.5 2 2 4-4"/></symbol>
|
|
42
|
-
<symbol id="i-history" viewBox="0 0 24 24"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/><path d="M12 7v5l4 2"/></symbol>
|
|
43
|
-
<symbol id="i-chart" viewBox="0 0 24 24"><path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="M8 17v-5"/><path d="M13 17V8"/><path d="M18 17v-3"/></symbol>
|
|
44
|
-
<symbol id="i-cpu" viewBox="0 0 24 24"><rect x="4" y="4" width="16" height="16" rx="2"/><rect x="9" y="9" width="6" height="6"/><path d="M9 2v2"/><path d="M15 2v2"/><path d="M9 20v2"/><path d="M15 20v2"/><path d="M2 9h2"/><path d="M2 15h2"/><path d="M20 9h2"/><path d="M20 15h2"/></symbol>
|
|
45
|
-
<symbol id="i-layers" viewBox="0 0 24 24"><path d="M12 2 2 7l10 5 10-5-10-5Z"/><path d="m2 17 10 5 10-5"/><path d="m2 12 10 5 10-5"/></symbol>
|
|
46
|
-
<symbol id="i-link" viewBox="0 0 24 24"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></symbol>
|
|
47
|
-
<symbol id="i-lock" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></symbol>
|
|
48
|
-
<symbol id="i-unlock" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 9.9-1"/></symbol>
|
|
49
|
-
<symbol id="i-bell" viewBox="0 0 24 24"><path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"/></symbol>
|
|
50
|
-
<symbol id="i-bee" viewBox="0 0 24 24"><ellipse cx="12" cy="14" rx="5.2" ry="6.2"/><path d="M8 12h8M8.3 14.8h7.4M9.4 17.4h5.2"/><path d="M9.6 8.4C8 6.2 5.4 6.6 5.7 8.6c.2 1.4 2.1 1.9 3.7 1.1M14.4 8.4c1.6-2.2 4.2-1.8 3.9.2-.2 1.4-2.1 1.9-3.7 1.1"/><path d="M13.4 5.6l2.1-2.1M15.9 6.9l2.5-1.2"/></symbol>
|
|
51
|
-
<symbol id="i-gamepad" viewBox="0 0 24 24"><line x1="6" x2="10" y1="11" y2="11"/><line x1="8" x2="8" y1="9" y2="13"/><line x1="15" x2="15.01" y1="12" y2="12"/><line x1="18" x2="18.01" y1="10" y2="10"/><path d="M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z"/></symbol>
|
|
52
|
-
<symbol id="i-book" viewBox="0 0 24 24"><path d="M4 5a2 2 0 0 1 2-2h9l5 5v11a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2z"/><path d="M8 8h5M8 12h8M8 16h6"/></symbol>
|
|
53
|
-
<symbol id="i-plus" viewBox="0 0 24 24"><path d="M12 5v14"/><path d="M5 12h14"/></symbol>
|
|
54
|
-
<symbol id="i-chat" viewBox="0 0 24 24"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/><path d="M8 9h8M8 12.5h5"/></symbol>
|
|
55
|
-
<symbol id="i-workflow" viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/><path d="M10 6.5h4a3 3 0 0 1 3 3V14"/></symbol>
|
|
56
|
-
<symbol id="i-phone" viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2.5"/><path d="M12 18h.01"/></symbol>
|
|
57
|
-
<symbol id="i-arrow-left" viewBox="0 0 24 24"><path d="M19 12H5"/><path d="m12 19-7-7 7-7"/></symbol>
|
|
58
|
-
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 6h16"/><path d="M4 12h16"/><path d="M4 18h16"/></symbol>
|
|
59
|
-
<symbol id="i-moon" viewBox="0 0 24 24"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></symbol>
|
|
60
|
-
<symbol id="i-globe" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 2c1.9 0 3.6 2.8 4 6.5h-8c.4-3.7 2.1-6.5 4-6.5ZM4.3 10.5h2.7c-.1 1-.1 2 0 3H4.3a8 8 0 0 1 0-3Zm.8-2a8 8 0 0 1 4-4.2c-1 1.3-1.8 3-2.1 4.2H5.1Zm-1 7h2c.3 1.3 1 3 2.1 4.2a8 8 0 0 1-4-4.2Zm2-2a17 17 0 0 1 0-3h8a17 17 0 0 1 0 3h-8Zm2.9 6.2c-1-1.2-1.8-2.9-2.1-4.2h1.9c.3 1.2 1.1 3 2.1 4.2a8 8 0 0 1-1.9 0Zm3 0c-1-.5-2-2.6-2.4-4.2h4.8c-.4 1.6-1.4 3.7-2.4 4.2Zm1.9-.2c1-1.2 1.8-2.9 2.1-4.2h2a8 8 0 0 1-4.1 4.2Zm4.4-6.2h-2.7c.1-1 .1-2 0-3h2.7a8 8 0 0 1 0 3Zm-2.4-5a11 11 0 0 0-2-4.2 8 8 0 0 1 4 4.2h-2Z"/><path d="M7 10.5h10M7 13.5h10" fill="none" stroke="currentColor" stroke-width=".8" opacity=".45"/></symbol><symbol id="i-palette" viewBox="0 0 24 24"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"/><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"/><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"/><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"/><path d="M12 2a10 10 0 0 0 0 20 2 2 0 0 0 2-2v-1a2 2 0 0 1 2-2h1.5A4.5 4.5 0 0 0 22 12.5C22 6.7 17.5 2 12 2Z"/></symbol>
|
|
61
|
-
<symbol id="i-check" viewBox="0 0 24 24"><path d="m4.5 12.5 5 5 10-11"/></symbol>
|
|
62
|
-
<symbol id="i-chevron-r" viewBox="0 0 24 24"><path d="m9 5 7 7-7 7"/></symbol>
|
|
63
|
-
<symbol id="i-folder" viewBox="0 0 24 24"><path d="M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"/></symbol>
|
|
64
|
-
<symbol id="i-paperclip" viewBox="0 0 24 24"><path d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/></symbol>
|
|
65
|
-
<symbol id="i-git-branch" viewBox="0 0 24 24"><line x1="6" x2="6" y1="3" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol>
|
|
66
|
-
<symbol id="i-x" viewBox="0 0 24 24"><path d="M6 6l12 12"/><path d="M18 6 6 18"/></symbol>
|
|
67
|
-
<symbol id="i-sun" viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></symbol>
|
|
68
|
-
<symbol id="i-refresh" viewBox="0 0 24 24"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/></symbol>
|
|
69
|
-
<symbol id="i-sigma" viewBox="0 0 24 24"><path d="M18 7V5a1 1 0 0 0-1-1H6.5a.5.5 0 0 0-.4.8l4.5 6a2 2 0 0 1 0 2.4l-4.5 6a.5.5 0 0 0 .4.8H17a1 1 0 0 0 1-1v-2"/></symbol>
|
|
70
|
-
<symbol id="i-hash" viewBox="0 0 24 24"><path d="M4 9h16"/><path d="M4 15h16"/><path d="M10 3 8 21"/><path d="M16 3l-2 18"/></symbol>
|
|
71
|
-
<symbol id="i-coin" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8"/><path d="M12 18V6"/></symbol>
|
|
72
|
-
<symbol id="i-gauge" viewBox="0 0 24 24"><path d="m12 14 4-4"/><path d="M3.34 19a10 10 0 1 1 17.32 0"/></symbol>
|
|
73
|
-
<symbol id="i-calendar-days" viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="18" rx="2"/><path d="M3 10h18"/><path d="M8 2v4"/><path d="M16 2v4"/><path d="M8 15h.01"/><path d="M12 15h.01"/><path d="M16 15h.01"/></symbol>
|
|
74
|
-
<symbol id="i-grip" viewBox="0 0 24 24"><path d="M4 7h16"/><path d="M4 12h16"/><path d="M4 17h16"/></symbol>
|
|
75
|
-
<symbol id="i-arrow-up" viewBox="0 0 24 24"><path d="M12 19V5"/><path d="m5 12 7-7 7 7"/></symbol>
|
|
76
|
-
<symbol id="i-baton" viewBox="0 0 24 24">
|
|
77
|
-
<path d="M6.8 17.2 13.6 8.2" stroke-width="2.4"/>
|
|
78
|
-
<circle cx="5.2" cy="18.8" r="2.6" fill="currentColor" stroke="none"/>
|
|
79
|
-
<circle cx="16" cy="5.9" r="1.6" fill="currentColor" stroke="none"/>
|
|
80
|
-
<circle cx="19.9" cy="4.3" r="2" fill="currentColor" stroke="none"/>
|
|
81
|
-
<circle cx="21.6" cy="8.9" r="2.3" fill="currentColor" stroke="none"/>
|
|
82
|
-
</symbol>
|
|
83
|
-
<symbol id="i-rocket" viewBox="0 0 24 24"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"/><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"/><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"/><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"/></symbol>
|
|
84
|
-
<!-- 任务类型图标(flows.py 预置流程 icon 字段引用;stroke=currentColor 黑白随主题) -->
|
|
85
|
-
<symbol id="i-code" viewBox="0 0 24 24"><path d="m4 17 6-5-6-5"/><path d="M12 19h8"/></symbol>
|
|
86
|
-
<symbol id="i-book-open" viewBox="0 0 24 24"><path d="M2 4h6a4 4 0 0 1 4 4v13a3 3 0 0 0-3-3H2z"/><path d="M22 4h-6a4 4 0 0 0-4 4v13a3 3 0 0 1 3-3h7z"/></symbol>
|
|
87
|
-
<symbol id="i-library" viewBox="0 0 24 24"><path d="m16 6 4 14"/><path d="M12 6v14"/><path d="M8 8v12"/><path d="M4 4v16"/></symbol>
|
|
88
|
-
<symbol id="i-news" viewBox="0 0 24 24"><path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Z"/><path d="M4 22a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8"/><path d="M15 18h-5"/><path d="M10 6h8v4h-8V6Z"/></symbol>
|
|
89
|
-
<symbol id="i-clapper" viewBox="0 0 24 24"><path d="M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3Z"/><path d="m6.2 5.3 3.1 3.9"/><path d="m12.4 3.4 3.1 4"/><path d="M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z"/></symbol>
|
|
90
|
-
<symbol id="i-file-text" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><path d="M16 13H8"/><path d="M16 17H8"/><path d="M10 9H8"/></symbol>
|
|
91
|
-
<symbol id="i-lang" viewBox="0 0 24 24"><path d="m5 8 6 6"/><path d="m4 14 6-6 2-3"/><path d="M2 5h12"/><path d="M7 2h1"/><path d="m22 22-5-10-5 10"/><path d="M14 18h6"/></symbol>
|
|
92
|
-
<symbol id="i-file-search" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><circle cx="11.5" cy="14.5" r="2.5"/><path d="m13.3 16.3 1.7 1.7"/></symbol>
|
|
93
|
-
<symbol id="i-mic" viewBox="0 0 24 24"><rect x="9" y="2" width="6" height="12" rx="3"/><path d="M5 10a7 7 0 0 0 14 0"/><path d="M12 19v3"/></symbol>
|
|
94
|
-
<symbol id="i-clip-check" viewBox="0 0 24 24"><rect x="8" y="2" width="8" height="4" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><path d="m9 14 2 2 4-4"/></symbol>
|
|
95
|
-
<symbol id="i-mail" viewBox="0 0 24 24"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/></symbol>
|
|
96
|
-
<symbol id="i-blocks" viewBox="0 0 24 24"><rect x="14" y="3" width="7" height="7" rx="1"/><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"/></symbol>
|
|
97
|
-
<symbol id="i-idcard" viewBox="0 0 24 24"><rect x="2" y="5" width="20" height="14" rx="2"/><circle cx="8" cy="10.5" r="2"/><path d="M5.5 15.5a2.5 2.5 0 0 1 5 0"/><path d="M13.5 10H18"/><path d="M13.5 14H18"/></symbol>
|
|
98
|
-
<!-- 任务详情面板开合(#btn-insp):箭头方向由 CSS 变量穿透 use 影子树切换,开着=‹ 收起,关着=› 展开 -->
|
|
99
|
-
<symbol id="i-panel" viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="16" rx="2.5"/><path d="M15.5 4v16"/><path d="m11 9.5-2.5 2.5 2.5 2.5" style="display:var(--insp-chev-open,none)"/><path d="m10 9.5 2.5 2.5-2.5 2.5" style="display:var(--insp-chev-closed,inline)"/></symbol>
|
|
100
|
-
</svg>
|
|
101
|
-
<div id="drawer-mask" aria-hidden="true"></div>
|
|
102
|
-
<div id="app">
|
|
103
|
-
|
|
104
|
-
<!-- ================= 侧栏 ================= -->
|
|
105
|
-
<aside id="sidebar">
|
|
106
|
-
<!-- 常规视图:任务树 -->
|
|
107
|
-
<div class="side-main">
|
|
108
|
-
<div class="brand" title="CodeBee · 多智能体编排台" data-i18n-title="CodeBee · 多智能体编排台">
|
|
109
|
-
<span class="brand-name">CodeBee</span>
|
|
110
|
-
</div>
|
|
111
|
-
<button id="btn-new-task" class="new-task"><span class="nt-label" data-i18n="+ 新任务">+ 新任务</span><span class="kbd" aria-hidden="true">N</span></button>
|
|
112
|
-
<button class="side-search" id="btn-cmdk" title="搜索" data-i18n-title="搜索">
|
|
113
|
-
<svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>
|
|
114
|
-
<span class="ss-label" data-i18n="搜索">搜索</span>
|
|
115
|
-
<span class="kbd" aria-hidden="true">Ctrl K</span>
|
|
116
|
-
</button>
|
|
117
|
-
<div class="side-quick">
|
|
118
|
-
<button class="qitem" id="btn-q-automation" title="自动化" data-i18n-title="自动化">
|
|
119
|
-
<svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg>
|
|
120
|
-
<span data-i18n="自动化">自动化</span>
|
|
121
|
-
</button>
|
|
122
|
-
<button class="qitem" id="btn-q-market" title="插件市场" data-i18n-title="插件市场">
|
|
123
|
-
<svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>
|
|
124
|
-
<span data-i18n="插件市场">插件市场</span>
|
|
125
|
-
</button>
|
|
126
|
-
</div>
|
|
127
|
-
<div class="side-section tasks">
|
|
128
|
-
<div class="side-label-row">
|
|
129
|
-
<div data-i18n="任务" class="side-label">任务</div>
|
|
130
|
-
<button id="btn-side-expand" class="foot-btn notify-toggle" title="展开全部" aria-label="展开全部"
|
|
131
|
-
data-i18n-title="展开全部" data-i18n-aria="展开全部">
|
|
132
|
-
<svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg>
|
|
133
|
-
</button>
|
|
134
|
-
<button id="btn-side-arch" class="foot-btn notify-toggle arch-toggle" title="显示已归档" aria-label="显示已归档"
|
|
135
|
-
data-i18n-title="显示已归档" data-i18n-aria="显示已归档">
|
|
136
|
-
<svg class="ico" aria-hidden="true"><use href="#i-history"></use></svg>
|
|
137
|
-
</button>
|
|
138
|
-
<button id="btn-notify-toggle" class="foot-btn notify-toggle" title="完成/待裁决提示音" aria-label="完成/待裁决提示音"
|
|
139
|
-
data-i18n-title="完成/待裁决提示音" data-i18n-aria="完成/待裁决提示音">
|
|
140
|
-
<svg class="ico" aria-hidden="true"><use href="#i-bell"></use></svg>
|
|
141
|
-
</button>
|
|
142
|
-
</div>
|
|
143
|
-
<div id="side-tasks" class="side-tasks"></div>
|
|
144
|
-
</div>
|
|
145
|
-
<div class="side-foot">
|
|
146
|
-
<button id="btn-settings" class="foot-btn" title="设置" aria-label="设置" data-i18n-aria="设置" data-i18n-title="设置">
|
|
147
|
-
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-gear"></use></svg>
|
|
148
|
-
</button>
|
|
149
|
-
<!-- 中间:CodeBee 自己的智能体(编排者)当前用的厂商;点击到设置里的「编排设置」更换 -->
|
|
150
|
-
<button id="btn-prov-side" class="foot-prov">
|
|
151
|
-
<span id="prov-side-dot" class="pdot"></span>
|
|
152
|
-
<span data-i18n="未选厂商" id="prov-side-text" class="nm">未选厂商</span>
|
|
153
|
-
<span id="prov-side-badge" class="pbadge hidden"></span>
|
|
154
|
-
</button>
|
|
155
|
-
<button id="btn-phone-side" class="foot-btn" title="手机连接(扫码用手机打开 CodeBee)" aria-label="手机连接" data-i18n-aria="手机连接" data-i18n-title="手机连接(扫码用手机打开 CodeBee)">
|
|
156
|
-
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-phone"></use></svg>
|
|
157
|
-
</button>
|
|
158
|
-
</div>
|
|
159
|
-
</div>
|
|
160
|
-
<!-- 文件浏览视图:右键文件夹「查看文件」进入,左栏整体换成该目录的文件树 -->
|
|
161
|
-
<div class="side-files">
|
|
162
|
-
<button id="btn-files-back" class="set-back" data-i18n="返回任务列表">
|
|
163
|
-
<svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回任务列表
|
|
164
|
-
</button>
|
|
165
|
-
<div class="sf-head" id="sf-dir-row" title="">
|
|
166
|
-
<svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg>
|
|
167
|
-
<span id="sf-dir" class="sf-title"></span>
|
|
168
|
-
<span id="sf-count" class="sf-count"></span>
|
|
169
|
-
</div>
|
|
170
|
-
<div id="sf-body" class="sf-body"></div>
|
|
171
|
-
</div>
|
|
172
|
-
<!-- 设置视图:左栏整体变成设置导航 -->
|
|
173
|
-
<div class="side-settings">
|
|
174
|
-
<button id="btn-set-back" class="set-back" data-i18n="返回 CodeBee">
|
|
175
|
-
<svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回 CodeBee
|
|
176
|
-
</button>
|
|
177
|
-
<div data-i18n="编排" class="set-group">编排</div>
|
|
178
|
-
<button class="set-item active" data-sub="tasks" data-i18n="任务"><svg class="ico" aria-hidden="true"><use href="#i-tasks"></use></svg>任务</button>
|
|
179
|
-
<button class="set-item" data-sub="runs" data-i18n="运行记录"><svg class="ico" aria-hidden="true"><use href="#i-history"></use></svg>运行记录</button>
|
|
180
|
-
<button class="set-item" data-sub="automation" data-i18n="自动化"><svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg>自动化</button>
|
|
181
|
-
<button class="set-item" data-sub="zentao" data-i18n="禅道"><svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>禅道</button>
|
|
182
|
-
<button class="set-item" data-sub="usage" data-i18n="用量统计"><svg class="ico" aria-hidden="true"><use href="#i-chart"></use></svg>用量统计</button>
|
|
183
|
-
<div data-i18n="配置" class="set-group">配置</div>
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN" data-lang="zh">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
6
|
+
<title>CodeBee · 多智能体编排台</title>
|
|
7
|
+
<link rel="manifest" href="manifest.json">
|
|
8
|
+
<link rel="icon" href="icons/icon-192.png">
|
|
9
|
+
<link rel="apple-touch-icon" href="icons/icon-192.png">
|
|
10
|
+
<meta name="theme-color" content="#6d5df6">
|
|
11
|
+
<meta name="mobile-web-app-capable" content="yes">
|
|
12
|
+
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
13
|
+
<meta name="apple-mobile-web-app-status-bar-style"="black-translucent">
|
|
14
|
+
<meta name="apple-mobile-web-app-title" content="CodeBee">
|
|
15
|
+
<link rel="stylesheet" href="style.css">
|
|
16
|
+
<!-- 首屏预涂:在样式表之后、绘制之前定好皮肤与明暗 + 语言,避免刷新时闪一下默认配色。
|
|
17
|
+
皮肤值不在这里校验——非法值匹配不到任何 html[data-skin=...] 规则,首涂落经典底色,
|
|
18
|
+
app.js 加载后会按 currentSkin() 校正为默认皮肤。 -->
|
|
19
|
+
<script>
|
|
20
|
+
(function () {
|
|
21
|
+
try {
|
|
22
|
+
document.documentElement.dataset.skin = localStorage.getItem("orch.skin") || "ocean";
|
|
23
|
+
document.documentElement.dataset.theme = localStorage.getItem("orch.theme") === "dark" ? "dark" : "light";
|
|
24
|
+
document.documentElement.dataset.lang = localStorage.getItem("orch.lang") === "en" ? "en" : "zh";
|
|
25
|
+
document.documentElement.lang = document.documentElement.dataset.lang === "en" ? "en" : "zh-CN";
|
|
26
|
+
} catch (e) {
|
|
27
|
+
document.documentElement.dataset.skin = "ocean";
|
|
28
|
+
document.documentElement.dataset.theme = "light";
|
|
29
|
+
document.documentElement.dataset.lang = "zh";
|
|
30
|
+
}
|
|
31
|
+
})();
|
|
32
|
+
</script>
|
|
33
|
+
</head>
|
|
34
|
+
<body>
|
|
35
|
+
<!-- ================= 图标精灵:统一线性图标(stroke=currentColor,随主题与 hover 自动变色) ================= -->
|
|
36
|
+
<svg id="icon-sprite" aria-hidden="true" focusable="false">
|
|
37
|
+
<symbol id="i-search" viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.8-4.8"/></symbol>
|
|
38
|
+
<symbol id="i-help" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/></symbol>
|
|
39
|
+
<symbol id="i-chevrons-d" viewBox="0 0 24 24"><path d="m6 6 6 6 6-6"/><path d="m6 13 6 6 6-6"/></symbol>
|
|
40
|
+
<symbol id="i-gear" viewBox="0 0 24 24"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></symbol>
|
|
41
|
+
<symbol id="i-tasks" viewBox="0 0 24 24"><path d="M3 6h11"/><path d="M3 12h11"/><path d="M3 18h7"/><path d="m16.5 16.5 2 2 4-4"/></symbol>
|
|
42
|
+
<symbol id="i-history" viewBox="0 0 24 24"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/><path d="M12 7v5l4 2"/></symbol>
|
|
43
|
+
<symbol id="i-chart" viewBox="0 0 24 24"><path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="M8 17v-5"/><path d="M13 17V8"/><path d="M18 17v-3"/></symbol>
|
|
44
|
+
<symbol id="i-cpu" viewBox="0 0 24 24"><rect x="4" y="4" width="16" height="16" rx="2"/><rect x="9" y="9" width="6" height="6"/><path d="M9 2v2"/><path d="M15 2v2"/><path d="M9 20v2"/><path d="M15 20v2"/><path d="M2 9h2"/><path d="M2 15h2"/><path d="M20 9h2"/><path d="M20 15h2"/></symbol>
|
|
45
|
+
<symbol id="i-layers" viewBox="0 0 24 24"><path d="M12 2 2 7l10 5 10-5-10-5Z"/><path d="m2 17 10 5 10-5"/><path d="m2 12 10 5 10-5"/></symbol>
|
|
46
|
+
<symbol id="i-link" viewBox="0 0 24 24"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></symbol>
|
|
47
|
+
<symbol id="i-lock" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></symbol>
|
|
48
|
+
<symbol id="i-unlock" viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 9.9-1"/></symbol>
|
|
49
|
+
<symbol id="i-bell" viewBox="0 0 24 24"><path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"/></symbol>
|
|
50
|
+
<symbol id="i-bee" viewBox="0 0 24 24"><ellipse cx="12" cy="14" rx="5.2" ry="6.2"/><path d="M8 12h8M8.3 14.8h7.4M9.4 17.4h5.2"/><path d="M9.6 8.4C8 6.2 5.4 6.6 5.7 8.6c.2 1.4 2.1 1.9 3.7 1.1M14.4 8.4c1.6-2.2 4.2-1.8 3.9.2-.2 1.4-2.1 1.9-3.7 1.1"/><path d="M13.4 5.6l2.1-2.1M15.9 6.9l2.5-1.2"/></symbol>
|
|
51
|
+
<symbol id="i-gamepad" viewBox="0 0 24 24"><line x1="6" x2="10" y1="11" y2="11"/><line x1="8" x2="8" y1="9" y2="13"/><line x1="15" x2="15.01" y1="12" y2="12"/><line x1="18" x2="18.01" y1="10" y2="10"/><path d="M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z"/></symbol>
|
|
52
|
+
<symbol id="i-book" viewBox="0 0 24 24"><path d="M4 5a2 2 0 0 1 2-2h9l5 5v11a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2z"/><path d="M8 8h5M8 12h8M8 16h6"/></symbol>
|
|
53
|
+
<symbol id="i-plus" viewBox="0 0 24 24"><path d="M12 5v14"/><path d="M5 12h14"/></symbol>
|
|
54
|
+
<symbol id="i-chat" viewBox="0 0 24 24"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/><path d="M8 9h8M8 12.5h5"/></symbol>
|
|
55
|
+
<symbol id="i-workflow" viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="14" width="7" height="7" rx="1.5"/><path d="M10 6.5h4a3 3 0 0 1 3 3V14"/></symbol>
|
|
56
|
+
<symbol id="i-phone" viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2.5"/><path d="M12 18h.01"/></symbol>
|
|
57
|
+
<symbol id="i-arrow-left" viewBox="0 0 24 24"><path d="M19 12H5"/><path d="m12 19-7-7 7-7"/></symbol>
|
|
58
|
+
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 6h16"/><path d="M4 12h16"/><path d="M4 18h16"/></symbol>
|
|
59
|
+
<symbol id="i-moon" viewBox="0 0 24 24"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></symbol>
|
|
60
|
+
<symbol id="i-globe" viewBox="0 0 24 24"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20Zm0 2c1.9 0 3.6 2.8 4 6.5h-8c.4-3.7 2.1-6.5 4-6.5ZM4.3 10.5h2.7c-.1 1-.1 2 0 3H4.3a8 8 0 0 1 0-3Zm.8-2a8 8 0 0 1 4-4.2c-1 1.3-1.8 3-2.1 4.2H5.1Zm-1 7h2c.3 1.3 1 3 2.1 4.2a8 8 0 0 1-4-4.2Zm2-2a17 17 0 0 1 0-3h8a17 17 0 0 1 0 3h-8Zm2.9 6.2c-1-1.2-1.8-2.9-2.1-4.2h1.9c.3 1.2 1.1 3 2.1 4.2a8 8 0 0 1-1.9 0Zm3 0c-1-.5-2-2.6-2.4-4.2h4.8c-.4 1.6-1.4 3.7-2.4 4.2Zm1.9-.2c1-1.2 1.8-2.9 2.1-4.2h2a8 8 0 0 1-4.1 4.2Zm4.4-6.2h-2.7c.1-1 .1-2 0-3h2.7a8 8 0 0 1 0 3Zm-2.4-5a11 11 0 0 0-2-4.2 8 8 0 0 1 4 4.2h-2Z"/><path d="M7 10.5h10M7 13.5h10" fill="none" stroke="currentColor" stroke-width=".8" opacity=".45"/></symbol><symbol id="i-palette" viewBox="0 0 24 24"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"/><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"/><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"/><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"/><path d="M12 2a10 10 0 0 0 0 20 2 2 0 0 0 2-2v-1a2 2 0 0 1 2-2h1.5A4.5 4.5 0 0 0 22 12.5C22 6.7 17.5 2 12 2Z"/></symbol>
|
|
61
|
+
<symbol id="i-check" viewBox="0 0 24 24"><path d="m4.5 12.5 5 5 10-11"/></symbol>
|
|
62
|
+
<symbol id="i-chevron-r" viewBox="0 0 24 24"><path d="m9 5 7 7-7 7"/></symbol>
|
|
63
|
+
<symbol id="i-folder" viewBox="0 0 24 24"><path d="M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"/></symbol>
|
|
64
|
+
<symbol id="i-paperclip" viewBox="0 0 24 24"><path d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/></symbol>
|
|
65
|
+
<symbol id="i-git-branch" viewBox="0 0 24 24"><line x1="6" x2="6" y1="3" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/></symbol>
|
|
66
|
+
<symbol id="i-x" viewBox="0 0 24 24"><path d="M6 6l12 12"/><path d="M18 6 6 18"/></symbol>
|
|
67
|
+
<symbol id="i-sun" viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/><path d="M12 2v2"/><path d="M12 20v2"/><path d="m4.93 4.93 1.41 1.41"/><path d="m17.66 17.66 1.41 1.41"/><path d="M2 12h2"/><path d="M20 12h2"/><path d="m6.34 17.66-1.41 1.41"/><path d="m19.07 4.93-1.41 1.41"/></symbol>
|
|
68
|
+
<symbol id="i-refresh" viewBox="0 0 24 24"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/></symbol>
|
|
69
|
+
<symbol id="i-sigma" viewBox="0 0 24 24"><path d="M18 7V5a1 1 0 0 0-1-1H6.5a.5.5 0 0 0-.4.8l4.5 6a2 2 0 0 1 0 2.4l-4.5 6a.5.5 0 0 0 .4.8H17a1 1 0 0 0 1-1v-2"/></symbol>
|
|
70
|
+
<symbol id="i-hash" viewBox="0 0 24 24"><path d="M4 9h16"/><path d="M4 15h16"/><path d="M10 3 8 21"/><path d="M16 3l-2 18"/></symbol>
|
|
71
|
+
<symbol id="i-coin" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8"/><path d="M12 18V6"/></symbol>
|
|
72
|
+
<symbol id="i-gauge" viewBox="0 0 24 24"><path d="m12 14 4-4"/><path d="M3.34 19a10 10 0 1 1 17.32 0"/></symbol>
|
|
73
|
+
<symbol id="i-calendar-days" viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="18" rx="2"/><path d="M3 10h18"/><path d="M8 2v4"/><path d="M16 2v4"/><path d="M8 15h.01"/><path d="M12 15h.01"/><path d="M16 15h.01"/></symbol>
|
|
74
|
+
<symbol id="i-grip" viewBox="0 0 24 24"><path d="M4 7h16"/><path d="M4 12h16"/><path d="M4 17h16"/></symbol>
|
|
75
|
+
<symbol id="i-arrow-up" viewBox="0 0 24 24"><path d="M12 19V5"/><path d="m5 12 7-7 7 7"/></symbol>
|
|
76
|
+
<symbol id="i-baton" viewBox="0 0 24 24">
|
|
77
|
+
<path d="M6.8 17.2 13.6 8.2" stroke-width="2.4"/>
|
|
78
|
+
<circle cx="5.2" cy="18.8" r="2.6" fill="currentColor" stroke="none"/>
|
|
79
|
+
<circle cx="16" cy="5.9" r="1.6" fill="currentColor" stroke="none"/>
|
|
80
|
+
<circle cx="19.9" cy="4.3" r="2" fill="currentColor" stroke="none"/>
|
|
81
|
+
<circle cx="21.6" cy="8.9" r="2.3" fill="currentColor" stroke="none"/>
|
|
82
|
+
</symbol>
|
|
83
|
+
<symbol id="i-rocket" viewBox="0 0 24 24"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"/><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"/><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"/><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"/></symbol>
|
|
84
|
+
<!-- 任务类型图标(flows.py 预置流程 icon 字段引用;stroke=currentColor 黑白随主题) -->
|
|
85
|
+
<symbol id="i-code" viewBox="0 0 24 24"><path d="m4 17 6-5-6-5"/><path d="M12 19h8"/></symbol>
|
|
86
|
+
<symbol id="i-book-open" viewBox="0 0 24 24"><path d="M2 4h6a4 4 0 0 1 4 4v13a3 3 0 0 0-3-3H2z"/><path d="M22 4h-6a4 4 0 0 0-4 4v13a3 3 0 0 1 3-3h7z"/></symbol>
|
|
87
|
+
<symbol id="i-library" viewBox="0 0 24 24"><path d="m16 6 4 14"/><path d="M12 6v14"/><path d="M8 8v12"/><path d="M4 4v16"/></symbol>
|
|
88
|
+
<symbol id="i-news" viewBox="0 0 24 24"><path d="M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Z"/><path d="M4 22a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"/><path d="M18 14h-8"/><path d="M15 18h-5"/><path d="M10 6h8v4h-8V6Z"/></symbol>
|
|
89
|
+
<symbol id="i-clapper" viewBox="0 0 24 24"><path d="M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3Z"/><path d="m6.2 5.3 3.1 3.9"/><path d="m12.4 3.4 3.1 4"/><path d="M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z"/></symbol>
|
|
90
|
+
<symbol id="i-file-text" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><path d="M16 13H8"/><path d="M16 17H8"/><path d="M10 9H8"/></symbol>
|
|
91
|
+
<symbol id="i-lang" viewBox="0 0 24 24"><path d="m5 8 6 6"/><path d="m4 14 6-6 2-3"/><path d="M2 5h12"/><path d="M7 2h1"/><path d="m22 22-5-10-5 10"/><path d="M14 18h6"/></symbol>
|
|
92
|
+
<symbol id="i-file-search" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><circle cx="11.5" cy="14.5" r="2.5"/><path d="m13.3 16.3 1.7 1.7"/></symbol>
|
|
93
|
+
<symbol id="i-mic" viewBox="0 0 24 24"><rect x="9" y="2" width="6" height="12" rx="3"/><path d="M5 10a7 7 0 0 0 14 0"/><path d="M12 19v3"/></symbol>
|
|
94
|
+
<symbol id="i-clip-check" viewBox="0 0 24 24"><rect x="8" y="2" width="8" height="4" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><path d="m9 14 2 2 4-4"/></symbol>
|
|
95
|
+
<symbol id="i-mail" viewBox="0 0 24 24"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/></symbol>
|
|
96
|
+
<symbol id="i-blocks" viewBox="0 0 24 24"><rect x="14" y="3" width="7" height="7" rx="1"/><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"/></symbol>
|
|
97
|
+
<symbol id="i-idcard" viewBox="0 0 24 24"><rect x="2" y="5" width="20" height="14" rx="2"/><circle cx="8" cy="10.5" r="2"/><path d="M5.5 15.5a2.5 2.5 0 0 1 5 0"/><path d="M13.5 10H18"/><path d="M13.5 14H18"/></symbol>
|
|
98
|
+
<!-- 任务详情面板开合(#btn-insp):箭头方向由 CSS 变量穿透 use 影子树切换,开着=‹ 收起,关着=› 展开 -->
|
|
99
|
+
<symbol id="i-panel" viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="16" rx="2.5"/><path d="M15.5 4v16"/><path d="m11 9.5-2.5 2.5 2.5 2.5" style="display:var(--insp-chev-open,none)"/><path d="m10 9.5 2.5 2.5-2.5 2.5" style="display:var(--insp-chev-closed,inline)"/></symbol>
|
|
100
|
+
</svg>
|
|
101
|
+
<div id="drawer-mask" aria-hidden="true"></div>
|
|
102
|
+
<div id="app">
|
|
103
|
+
|
|
104
|
+
<!-- ================= 侧栏 ================= -->
|
|
105
|
+
<aside id="sidebar">
|
|
106
|
+
<!-- 常规视图:任务树 -->
|
|
107
|
+
<div class="side-main">
|
|
108
|
+
<div class="brand" title="CodeBee · 多智能体编排台" data-i18n-title="CodeBee · 多智能体编排台">
|
|
109
|
+
<span class="brand-name">CodeBee</span>
|
|
110
|
+
</div>
|
|
111
|
+
<button id="btn-new-task" class="new-task"><span class="nt-label" data-i18n="+ 新任务">+ 新任务</span><span class="kbd" aria-hidden="true">N</span></button>
|
|
112
|
+
<button class="side-search" id="btn-cmdk" title="搜索" data-i18n-title="搜索">
|
|
113
|
+
<svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>
|
|
114
|
+
<span class="ss-label" data-i18n="搜索">搜索</span>
|
|
115
|
+
<span class="kbd" aria-hidden="true">Ctrl K</span>
|
|
116
|
+
</button>
|
|
117
|
+
<div class="side-quick">
|
|
118
|
+
<button class="qitem" id="btn-q-automation" title="自动化" data-i18n-title="自动化">
|
|
119
|
+
<svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg>
|
|
120
|
+
<span data-i18n="自动化">自动化</span>
|
|
121
|
+
</button>
|
|
122
|
+
<button class="qitem" id="btn-q-market" title="插件市场" data-i18n-title="插件市场">
|
|
123
|
+
<svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>
|
|
124
|
+
<span data-i18n="插件市场">插件市场</span>
|
|
125
|
+
</button>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="side-section tasks">
|
|
128
|
+
<div class="side-label-row">
|
|
129
|
+
<div data-i18n="任务" class="side-label">任务</div>
|
|
130
|
+
<button id="btn-side-expand" class="foot-btn notify-toggle" title="展开全部" aria-label="展开全部"
|
|
131
|
+
data-i18n-title="展开全部" data-i18n-aria="展开全部">
|
|
132
|
+
<svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg>
|
|
133
|
+
</button>
|
|
134
|
+
<button id="btn-side-arch" class="foot-btn notify-toggle arch-toggle" title="显示已归档" aria-label="显示已归档"
|
|
135
|
+
data-i18n-title="显示已归档" data-i18n-aria="显示已归档">
|
|
136
|
+
<svg class="ico" aria-hidden="true"><use href="#i-history"></use></svg>
|
|
137
|
+
</button>
|
|
138
|
+
<button id="btn-notify-toggle" class="foot-btn notify-toggle" title="完成/待裁决提示音" aria-label="完成/待裁决提示音"
|
|
139
|
+
data-i18n-title="完成/待裁决提示音" data-i18n-aria="完成/待裁决提示音">
|
|
140
|
+
<svg class="ico" aria-hidden="true"><use href="#i-bell"></use></svg>
|
|
141
|
+
</button>
|
|
142
|
+
</div>
|
|
143
|
+
<div id="side-tasks" class="side-tasks"></div>
|
|
144
|
+
</div>
|
|
145
|
+
<div class="side-foot">
|
|
146
|
+
<button id="btn-settings" class="foot-btn" title="设置" aria-label="设置" data-i18n-aria="设置" data-i18n-title="设置">
|
|
147
|
+
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-gear"></use></svg>
|
|
148
|
+
</button>
|
|
149
|
+
<!-- 中间:CodeBee 自己的智能体(编排者)当前用的厂商;点击到设置里的「编排设置」更换 -->
|
|
150
|
+
<button id="btn-prov-side" class="foot-prov">
|
|
151
|
+
<span id="prov-side-dot" class="pdot"></span>
|
|
152
|
+
<span data-i18n="未选厂商" id="prov-side-text" class="nm">未选厂商</span>
|
|
153
|
+
<span id="prov-side-badge" class="pbadge hidden"></span>
|
|
154
|
+
</button>
|
|
155
|
+
<button id="btn-phone-side" class="foot-btn" title="手机连接(扫码用手机打开 CodeBee)" aria-label="手机连接" data-i18n-aria="手机连接" data-i18n-title="手机连接(扫码用手机打开 CodeBee)">
|
|
156
|
+
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-phone"></use></svg>
|
|
157
|
+
</button>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
<!-- 文件浏览视图:右键文件夹「查看文件」进入,左栏整体换成该目录的文件树 -->
|
|
161
|
+
<div class="side-files">
|
|
162
|
+
<button id="btn-files-back" class="set-back" data-i18n="返回任务列表">
|
|
163
|
+
<svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回任务列表
|
|
164
|
+
</button>
|
|
165
|
+
<div class="sf-head" id="sf-dir-row" title="">
|
|
166
|
+
<svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg>
|
|
167
|
+
<span id="sf-dir" class="sf-title"></span>
|
|
168
|
+
<span id="sf-count" class="sf-count"></span>
|
|
169
|
+
</div>
|
|
170
|
+
<div id="sf-body" class="sf-body"></div>
|
|
171
|
+
</div>
|
|
172
|
+
<!-- 设置视图:左栏整体变成设置导航 -->
|
|
173
|
+
<div class="side-settings">
|
|
174
|
+
<button id="btn-set-back" class="set-back" data-i18n="返回 CodeBee">
|
|
175
|
+
<svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回 CodeBee
|
|
176
|
+
</button>
|
|
177
|
+
<div data-i18n="编排" class="set-group">编排</div>
|
|
178
|
+
<button class="set-item active" data-sub="tasks" data-i18n="任务"><svg class="ico" aria-hidden="true"><use href="#i-tasks"></use></svg>任务</button>
|
|
179
|
+
<button class="set-item" data-sub="runs" data-i18n="运行记录"><svg class="ico" aria-hidden="true"><use href="#i-history"></use></svg>运行记录</button>
|
|
180
|
+
<button class="set-item" data-sub="automation" data-i18n="自动化"><svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg>自动化</button>
|
|
181
|
+
<button class="set-item" data-sub="zentao" data-i18n="禅道"><svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>禅道</button>
|
|
182
|
+
<button class="set-item" data-sub="usage" data-i18n="用量统计"><svg class="ico" aria-hidden="true"><use href="#i-chart"></use></svg>用量统计</button>
|
|
183
|
+
<div data-i18n="配置" class="set-group">配置</div>
|
|
184
184
|
<button class="set-item" data-sub="agents" data-i18n="本机智能体"><svg class="ico" aria-hidden="true"><use href="#i-cpu"></use></svg>本机智能体</button>
|
|
185
|
-
<button class="set-item" data-sub="models" data-i18n="模型接入"><svg class="ico" aria-hidden="true"><use href="#i-layers"></use></svg>模型接入</button>
|
|
185
|
+
<button class="set-item" data-sub="models" data-i18n="模型接入"><svg class="ico" aria-hidden="true"><use href="#i-layers"></use></svg>模型接入</button>
|
|
186
186
|
<button class="set-item" data-sub="bindings" data-i18n="模型调度(可选)"><svg class="ico" aria-hidden="true"><use href="#i-link"></use></svg>模型调度(可选)</button>
|
|
187
|
-
<button class="set-item" data-sub="skills" data-i18n="经验库"><svg class="ico" aria-hidden="true"><use href="#i-book"></use></svg>经验库</button>
|
|
188
|
-
<button class="set-item" data-sub="knowledge" data-i18n="知识库"><svg class="ico" aria-hidden="true"><use href="#i-sigma"></use></svg>知识库</button>
|
|
189
|
-
<button class="set-item" data-sub="market" data-i18n="插件市场"><svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>插件市场</button>
|
|
190
|
-
<button class="set-item" data-sub="orch" data-i18n="编排设置"><svg class="ico" aria-hidden="true"><use href="#i-workflow"></use></svg>编排设置</button>
|
|
191
|
-
<div data-i18n="数据" class="set-group">数据</div>
|
|
192
|
-
<button class="set-item" data-sub="data" data-i18n="数据与备份"><svg class="ico" aria-hidden="true"><use href="#i-library"></use></svg>数据与备份</button>
|
|
193
|
-
<div data-i18n="外观" class="set-group">外观</div>
|
|
194
|
-
<button class="set-item" data-sub="appearance" data-i18n="皮肤"><svg class="ico" aria-hidden="true"><use href="#i-palette"></use></svg>皮肤</button>
|
|
195
|
-
<div data-i18n="软件" class="set-group">软件</div>
|
|
196
|
-
<button id="btn-guide" class="set-item" data-sub="__guide" data-i18n="帮助中心"><svg class="ico" aria-hidden="true"><use href="#i-rocket"></use></svg>帮助中心</button>
|
|
197
|
-
<button id="btn-about" class="set-item" data-sub="about" data-i18n="关于与更新"><svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>关于与更新</button>
|
|
198
|
-
<div data-i18n="远程" class="set-group">远程</div>
|
|
199
|
-
<button id="btn-phone" class="set-item" data-sub="__phone" data-i18n="手机连接"><svg class="ico" aria-hidden="true"><use href="#i-phone"></use></svg>手机连接</button>
|
|
200
|
-
</div>
|
|
201
|
-
</aside>
|
|
202
|
-
|
|
203
|
-
<!-- ================= 主栏 ================= -->
|
|
204
|
-
<div id="mainwrap">
|
|
205
|
-
<header class="topbar">
|
|
206
|
-
<button id="btn-menu" class="icon-btn" title="收起 / 展开侧栏" aria-label="收起 / 展开侧栏" data-i18n-aria="收起 / 展开侧栏" data-i18n-title="收起 / 展开侧栏">
|
|
207
|
-
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-menu"></use></svg>
|
|
208
|
-
</button>
|
|
209
|
-
<button id="upd-pill" class="pill upd-pill hidden" onclick="switchTab('about')" title="发现新版本,点击前往更新" aria-label="发现新版本" data-i18n-title="发现新版本,点击前往更新" data-i18n-aria="发现新版本">
|
|
210
|
-
<svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span id="upd-pill-txt"></span>
|
|
211
|
-
<span class="upd-x" role="button" onclick="event.stopPropagation();updDismiss()" title="忽略此版本" aria-label="忽略此版本" data-i18n-title="忽略此版本" data-i18n-aria="忽略此版本"><svg class="ico" aria-hidden="true"><use href="#i-x"></use></svg></span>
|
|
212
|
-
</button>
|
|
213
|
-
<div data-i18n="任务" id="page-title" class="page-title">任务</div>
|
|
214
|
-
<div id="health-banner" class="health-banner hidden" onclick="healthBannerClick()" title="供应商健康告警" aria-label="供应商健康告警" data-i18n-title="供应商健康告警" data-i18n-aria="供应商健康告警"></div>
|
|
215
|
-
<div class="top-actions">
|
|
216
|
-
<button id="ctrl-pill" class="pill ctrl icon-only hidden" onclick="ctrlClick()" title="多端控制权" aria-label="多端控制权" data-i18n-aria="多端控制权" data-i18n-title="多端控制权"><svg class="ico" aria-hidden="true"><use href="#i-unlock"></use></svg></button>
|
|
217
|
-
<!-- 语言快捷切换:语言名用母语写死(中文/English),刻意不做 i18n——任何母语的人都要能读懂并选中 -->
|
|
218
|
-
<div class="lang-wrap">
|
|
219
|
-
<button id="btn-lang" class="pill icon-only" type="button" onclick="toggleLangMenu()" title="语言 / Language" aria-label="切换语言" aria-haspopup="listbox" aria-controls="lang-menu" data-i18n-title="语言 / Language" data-i18n-aria="切换语言"><svg class="ico" aria-hidden="true"><use href="#i-globe"></use></svg></button>
|
|
220
|
-
<div id="lang-menu" class="lang-menu hidden" role="listbox" aria-label="语言 / Language" data-i18n-aria="语言 / Language">
|
|
221
|
-
<button type="button" class="lang-item" role="option" data-lang="zh" onclick="pickLang('zh')"><span>中文</span><svg class="ico li-check" aria-hidden="true"><use href="#i-check"></use></svg></button>
|
|
222
|
-
<button type="button" class="lang-item" role="option" data-lang="en" onclick="pickLang('en')"><span>English</span><svg class="ico li-check" aria-hidden="true"><use href="#i-check"></use></svg></button>
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
<button id="btn-skin" class="pill icon-only" title="皮肤 / 换肤:多套配色,各含日间与夜间" aria-label="皮肤 / 换肤" data-i18n-aria="皮肤 / 换肤" data-i18n-title="皮肤 / 换肤:多套配色,各含日间与夜间"><svg class="ico" aria-hidden="true"><use href="#i-palette"></use></svg></button>
|
|
226
|
-
<button id="btn-theme" class="pill icon-only" title="切换日间 / 夜间主题" aria-label="切换日间 / 夜间主题" data-i18n-aria="切换日间 / 夜间主题" data-i18n-title="切换日间 / 夜间主题"><svg class="ico" aria-hidden="true"><use href="#i-moon"></use></svg></button>
|
|
227
|
-
<!-- 详情面板开关:贴动作组最右 = 紧挨面板弹出的那一侧,空间映射一致 -->
|
|
228
|
-
<button id="btn-insp" class="pill icon-only" type="button" onclick="toggleInspector()" title="打开任务详情" aria-label="打开任务详情" data-i18n-title="打开任务详情" data-i18n-aria="打开任务详情"><svg class="ico" aria-hidden="true"><use href="#i-panel"></use></svg></button>
|
|
229
|
-
<div data-i18n="连接中…" id="conn" class="conn">连接中…</div>
|
|
230
|
-
</div>
|
|
231
|
-
</header>
|
|
232
|
-
|
|
233
|
-
<main>
|
|
234
|
-
<!-- ================= 设置页(导航在左栏,内容为居中窄栏) ================= -->
|
|
235
|
-
<section id="page-settings" class="page">
|
|
236
|
-
<div id="sub-tasks" class="subpage">
|
|
237
|
-
<div class="panel wide composer">
|
|
238
|
-
<div class="hero-row">
|
|
239
|
-
<h2 class="hero" id="cmp-greet">上午好呀,有什么想让我帮忙的吗</h2>
|
|
240
|
-
</div>
|
|
241
|
-
<div class="form">
|
|
242
|
-
<!-- Composer 大输入框:工作目录作为框内首行上下文;值真源仍是
|
|
243
|
-
#f-type / #f-workdir(既有 ID,联动与测试锚点全兼容)。
|
|
244
|
-
附件在左下、发送在右下;Enter 发送,Shift+Enter 换行 -->
|
|
245
|
-
<div class="cmp-box">
|
|
246
|
-
<div class="cmp-pills">
|
|
247
|
-
<div class="cmp-wd">
|
|
248
|
-
<svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg>
|
|
249
|
-
<div class="input-row">
|
|
250
|
-
<input id="f-workdir" placeholder="工作目录 · 留空用默认" data-i18n-ph="工作目录 · 留空用默认">
|
|
251
|
-
<button data-i18n="选择…" class="ghost small wd-pick-btn" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('f-workdir')">选择…</button>
|
|
252
|
-
<button type="button" id="f-workdir-menu-btn" class="ghost small wd-menu-btn" aria-haspopup="listbox" aria-controls="wd-menu" title="最近使用的文件夹" data-i18n-title="最近使用的文件夹" onclick="toggleWdMenu(event)">
|
|
253
|
-
<svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg>
|
|
254
|
-
</button>
|
|
255
|
-
</div>
|
|
256
|
-
<!-- 最近文件夹下拉:点 ▾ 展开(toggleWdMenu 渲染),含浏览与「用默认路径」 -->
|
|
257
|
-
<div id="wd-menu" class="wd-menu hidden" role="listbox" aria-label="最近使用的文件夹" data-i18n-aria="最近使用的文件夹"></div>
|
|
258
|
-
</div>
|
|
259
|
-
<!-- 工作目录指向 git 仓库时出现(probeGit 显隐):分支以小胶囊挂同一条上下文条,
|
|
260
|
-
悬停看当前分支/脏区/检出说明(renderGitHint 写 title);运行时检出任务分支 -->
|
|
261
|
-
<div class="field hidden" id="row-git">
|
|
262
|
-
<label data-i18n="代码版本"><svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>代码版本</label>
|
|
263
|
-
<select id="f-git-rev"></select>
|
|
264
|
-
<p class="hint" id="git-hint"></p>
|
|
265
|
-
</div>
|
|
266
|
-
</div>
|
|
267
|
-
<!-- 平时空(默认路径提示由 JS 写进占位符);继续会话/克隆任务预填时这里落覆盖警告 -->
|
|
268
|
-
<p class="hint cmp-hint" id="f-workdir-hint"></p>
|
|
269
|
-
<div class="cmp-context-note"><svg class="ico" aria-hidden="true"><use href="#i-chat"></use></svg><span data-i18n="描述目标即可,CodeBee 会自动拆解并执行">描述目标即可,CodeBee 会自动拆解并执行</span></div>
|
|
270
|
-
<div id="att-chips" class="att-chips" aria-live="polite"></div>
|
|
271
|
-
<textarea id="f-goal" rows="3" placeholder="要完成什么,一句话即可" required data-i18n-ph="要完成什么,一句话即可"></textarea>
|
|
272
|
-
<div class="cmp-bar">
|
|
273
|
-
<div class="cmp-mode">
|
|
274
|
-
<div class="type-wrap">
|
|
275
|
-
<select id="f-type" class="hidden" tabindex="-1" aria-hidden="true"></select>
|
|
276
|
-
<button type="button" id="f-type-btn" class="type-pick" onclick="toggleTypeMenu()" aria-haspopup="listbox" aria-controls="type-menu">
|
|
277
|
-
<span class="tp-ico" id="f-type-ico" aria-hidden="true"></span>
|
|
278
|
-
<span class="tp-name" id="f-type-name"></span>
|
|
279
|
-
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
280
|
-
</button>
|
|
281
|
-
<div id="type-menu" class="type-menu hidden" role="listbox" aria-label="任务类型" data-i18n-aria="任务类型"></div>
|
|
282
|
-
</div>
|
|
283
|
-
</div>
|
|
284
|
-
<div class="att-strip">
|
|
285
|
-
<button type="button" class="ghost small" id="btn-attach" title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB),创建任务时落盘到工作目录 _attachments/;也可直接粘贴截图" data-i18n-title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB),创建任务时落盘到工作目录 _attachments/;也可直接粘贴截图"><svg class="ico" aria-hidden="true"><use href="#i-paperclip"></use></svg><span data-i18n="附件">附件</span></button>
|
|
286
|
-
</div>
|
|
287
|
-
<div class="cmp-send">
|
|
288
|
-
<span id="create-msg" class="msg"></span>
|
|
289
|
-
<button id="btn-create" class="primary round" title="创建并运行" data-i18n-title="创建并运行" aria-label="创建并运行" data-i18n-aria="创建并运行"><svg class="ico" aria-hidden="true"><use href="#i-arrow-up"></use></svg></button>
|
|
290
|
-
</div>
|
|
291
|
-
</div>
|
|
292
|
-
<input type="file" id="f-attach-file" class="hidden" multiple>
|
|
293
|
-
</div>
|
|
294
|
-
<!-- 快捷类型:点一个即选定并聚焦目标框(renderQuickChips 渲染) -->
|
|
295
|
-
<div id="cmp-quick" class="cmp-quick" role="group" aria-label="常用类型" data-i18n-aria="常用类型"></div>
|
|
296
|
-
<!-- 开跑前成本预估(refreshEstimate 填充;无同类样本时保持隐藏) -->
|
|
297
|
-
<p class="hint cmp-estimate hidden" id="cmp-estimate"></p>
|
|
298
|
-
<!-- 需求拷问采访卡(renderClarify 渲染;goal 模糊时出现,跳过=直接创建) -->
|
|
299
|
-
<div id="clarify-box" class="clarify-box hidden"></div>
|
|
300
|
-
<div class="field hidden" id="row-resume-session">
|
|
301
|
-
<label data-i18n="选择会话">选择会话</label>
|
|
302
|
-
<select id="f-resume-session"><option data-i18n="(加载中…)">(加载中…)</option></select>
|
|
303
|
-
<p class="hint" id="resume-session-hint"></p>
|
|
304
|
-
</div>
|
|
305
|
-
|
|
306
|
-
<details id="f-advanced">
|
|
307
|
-
<summary data-i18n="更多选项">更多选项</summary>
|
|
308
|
-
<div class="adv-body">
|
|
309
|
-
<div class="grid-2">
|
|
310
|
-
<div class="field">
|
|
311
|
-
<label data-i18n="继续会话">继续会话</label>
|
|
312
|
-
<select id="f-resume-agent">
|
|
313
|
-
<option data-i18n="不沿用(全新开始)" value="">不沿用(全新开始)</option>
|
|
314
|
-
</select>
|
|
315
|
-
</div>
|
|
316
|
-
<div class="field"><label data-i18n="任务标题">任务标题</label><input id="f-title" placeholder="可空,自动取目标首行" data-i18n-ph="可空,自动取目标首行"></div>
|
|
317
|
-
</div>
|
|
318
|
-
<div class="field"><label data-i18n="上下文">上下文</label><textarea id="f-context" rows="2" placeholder="背景信息、约束、相关文件(可空)" data-i18n-ph="背景信息、约束、相关文件(可空)"></textarea></div>
|
|
319
|
-
<div class="field">
|
|
320
|
-
<label data-i18n="编排模式">编排模式</label>
|
|
321
|
-
<select id="f-mode">
|
|
322
|
-
<option data-i18n="智能(推荐):自动拆解 + 智能路由 + 失败自动修复/换将" value="auto">智能(推荐):自动拆解 + 智能路由 + 失败自动修复/换将</option>
|
|
323
|
-
<option data-i18n="手动:自行指定实现者与评审组" value="manual">手动:自行指定实现者与评审组</option>
|
|
324
|
-
</select>
|
|
325
|
-
</div>
|
|
326
|
-
|
|
327
|
-
<div id="f-code-only">
|
|
328
|
-
<div class="field"><label data-i18n="验证命令">验证命令</label><input id="f-verify" placeholder="例:python -m pytest -q(可空=只评审)" data-i18n-ph="例:python -m pytest -q(可空=只评审)"></div>
|
|
329
|
-
</div>
|
|
330
|
-
<div id="f-review-only" class="hidden">
|
|
331
|
-
<div id="bible-create-field" class="field hidden">
|
|
332
|
-
<label><svg class="ico" aria-hidden="true"><use href="#i-book"></use></svg><span data-i18n="初始故事圣经">初始故事圣经</span><span class="field-optional" data-i18n="可选">可选</span></label>
|
|
333
|
-
<textarea id="f-bible" rows="5" placeholder="人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md" data-i18n-ph="人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md"></textarea>
|
|
334
|
-
<p class="hint" data-i18n="连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。">连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。另可放 plot-modules.md 剧情模块库(拆文沉淀的桥段/爽点素材,每章自动注入)。</p>
|
|
335
|
-
</div>
|
|
336
|
-
<div class="grid-3">
|
|
337
|
-
<div class="field"><label data-i18n="稿件文件(合并稿)">稿件文件(合并稿)</label><input id="f-manuscript" value="manuscript.md" placeholder="工作目录内的文件名" data-i18n-ph="工作目录内的文件名"></div>
|
|
338
|
-
<div class="field"><label data-i18n="评审轮数">评审轮数</label><input id="f-rounds" type="number" value="2" min="1" max="5"></div>
|
|
339
|
-
<div class="field"><label data-i18n="发布阈值(全书)">发布阈值(全书)</label><input id="f-threshold" type="number" value="7.0" min="1" max="10" step="0.5"></div>
|
|
340
|
-
<div class="field"><label data-i18n="候选并发数(单稿赛马,1=关)">候选并发数(单稿赛马,1=关)</label><input id="f-bestof" type="number" value="1" min="1" max="3" title="同时起草多份候选稿,终审择优并吸收落选稿优点;每多一路多一份起草开销" data-i18n-title="同时起草多份候选稿,终审择优并吸收落选稿优点;每多一路多一份起草开销"></div>
|
|
341
|
-
</div>
|
|
342
|
-
<div class="field"><label data-i18n="评审维度(逗号分隔,可自定义)">评审维度(逗号分隔,可自定义)</label><input id="f-rubric" placeholder="例:情节, 人物, 文笔" data-i18n-ph="例:情节, 人物, 文笔"></div>
|
|
343
|
-
<div class="grid-2">
|
|
344
|
-
<div class="field"><label data-i18n="连载模式:章节数(空 = 单稿件一次成文)">连载模式:章节数(空 = 单稿件一次成文)</label><input id="f-chapters" type="number" min="2" max="20" placeholder="例:8(逐章起草+评审+修订)" data-i18n-ph="例:8(逐章起草+评审+修订)"></div>
|
|
345
|
-
<div class="field"><label data-i18n="每章约字数">每章约字数</label><input id="f-words-per-ch" type="number" min="500" max="8000" step="100" placeholder="例:2500" data-i18n-ph="例:2500"></div>
|
|
346
|
-
<div class="field"><label data-i18n="同章赛马稿件数">同章赛马稿件数</label><input id="f-variants" type="number" min="1" max="3" step="1" placeholder="1 = 关闭(2-3 每章多稿择优,更贵)" data-i18n-ph="1 = 关闭(2-3 每章多稿择优,更贵)"></div>
|
|
347
|
-
</div>
|
|
348
|
-
</div>
|
|
349
|
-
|
|
350
|
-
<div id="f-manual-only" class="hidden">
|
|
351
|
-
<div class="grid-2">
|
|
352
|
-
<div class="field"><label data-i18n="实现者">实现者</label><select id="f-impl"></select></div>
|
|
353
|
-
<div class="field" id="critic-box"><label data-i18n="评审组">评审组</label><div id="f-critics" class="chips"></div></div>
|
|
354
|
-
</div>
|
|
355
|
-
</div>
|
|
356
|
-
</div>
|
|
357
|
-
</details>
|
|
358
|
-
</div>
|
|
359
|
-
</div>
|
|
360
|
-
</div>
|
|
361
|
-
|
|
362
|
-
<!-- 运行记录 -->
|
|
363
|
-
<div id="sub-runs" class="subpage hidden">
|
|
364
|
-
<div class="panel wide">
|
|
365
|
-
<div class="panel-head">
|
|
366
|
-
<h2 data-i18n="运行记录">运行记录</h2>
|
|
367
|
-
<div class="actions">
|
|
368
|
-
<button data-i18n="全部清除" id="btn-clear-runs" class="danger small" onclick="clearRuns()" title="删除全部已结束的运行记录(运行中的会保留)" data-i18n-title="删除全部已结束的运行记录(运行中的会保留)">全部清除</button>
|
|
369
|
-
</div>
|
|
370
|
-
</div>
|
|
371
|
-
<div id="run-list" class="list"></div>
|
|
372
|
-
</div>
|
|
373
|
-
<!-- 运行详情:头部(标题/状态/操作/统计)+ 标签分区 + 贴底日志抽屉。
|
|
374
|
-
分区内容的 hidden 语义不变(没数据整块收起);标签页只切外层 pane。 -->
|
|
375
|
-
<div id="run-detail" class="panel wide hidden">
|
|
376
|
-
<!-- 右栏一张卡:任务信息(返回/标题/状态/操作)+ 分区导航,发丝线分区;
|
|
377
|
-
日志控制台停靠卡片下方,不再横向盖住主区内容 -->
|
|
378
|
-
<div id="rd-railcol">
|
|
379
|
-
<div id="rd-rail">
|
|
380
|
-
<div class="detail-head">
|
|
381
|
-
<button id="btn-back" class="ghost" data-i18n="返回"><svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回</button>
|
|
382
|
-
<h2 id="rd-title"></h2>
|
|
383
|
-
<span id="rd-status" class="chip"></span>
|
|
384
|
-
<div class="rd-actions">
|
|
385
|
-
<button id="btn-pause" class="ghost hidden" data-i18n="暂停">暂停</button>
|
|
386
|
-
<button data-i18n="取消运行" id="btn-cancel" class="danger hidden">取消运行</button>
|
|
387
|
-
<button data-i18n="↻ 继续任务" id="btn-retry" class="primary hidden" data-i18n-title="再跑一次这个任务;连载任务会断点续跑,已完成章节不重写" title="再跑一次这个任务;连载任务会断点续跑,已完成章节不重写">↻ 继续任务</button>
|
|
388
|
-
<button data-i18n="✎ 编辑重试" id="btn-editretry" class="ghost hidden" data-i18n-title="取回原任务的目标/目录/评审设置,修改后提交即重新开跑" title="取回原任务的目标/目录/评审设置,修改后提交即重新开跑">✎ 编辑重试</button>
|
|
389
|
-
<button data-i18n="继续连载" id="btn-continue" class="ghost hidden">继续连载</button>
|
|
390
|
-
<button data-i18n="基于此任务新建" id="btn-newfrom" class="ghost hidden">基于此任务新建</button>
|
|
391
|
-
<button data-i18n="分享页" id="btn-share" class="ghost hidden" data-i18n-title="生成自包含分享页(单文件 HTML),可直接发给他人查看任务成果" title="生成自包含分享页(单文件 HTML),可直接发给他人查看任务成果">分享页</button>
|
|
392
|
-
<button data-i18n="删除记录" id="btn-delete" class="danger hidden">删除记录</button>
|
|
393
|
-
<button data-i18n="✉ 继续对话" id="btn-talk" class="ghost hidden" data-i18n-title="人工检查有问题?告诉主智能体,由它判断怎么引导执行" title="人工检查有问题?告诉主智能体,由它判断怎么引导执行">✉ 继续对话</button>
|
|
394
|
-
<button id="rd-more-toggle" class="rd-more-toggle" type="button" aria-label="更多任务信息" data-i18n-aria="更多任务信息" aria-expanded="false" aria-controls="rd-meta-popover" title="更多任务信息" data-i18n-title="更多任务信息">•••</button>
|
|
395
|
-
</div>
|
|
396
|
-
<!-- 人工干预(非直连任务):运行中=递话入箱,下一步开始前送达主智能体;
|
|
397
|
-
已结束=发送后自动断点续跑,主智能体带着反馈重新规划/引导执行 -->
|
|
398
|
-
<div id="rd-talk" class="rd-talk hidden">
|
|
399
|
-
<div id="rd-talk-atts" class="rd-talk-atts"></div>
|
|
400
|
-
<textarea id="rd-talk-input" rows="3" placeholder="哪里不对、要改哪里?主智能体会据此判断并引导执行" data-i18n-ph="哪里不对、要改哪里?主智能体会据此判断并引导执行"></textarea>
|
|
401
|
-
<div class="rd-talk-bar">
|
|
402
|
-
<button id="rd-talk-attach" class="ghost" data-i18n="附件" data-i18n-title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB);也可直接粘贴截图" title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB);也可直接粘贴截图">附件</button>
|
|
403
|
-
<span id="rd-talk-hint" class="hint"></span>
|
|
404
|
-
<button id="rd-talk-send" class="primary small" data-i18n="递话">递话</button>
|
|
405
|
-
</div>
|
|
406
|
-
<input id="rd-talk-file" type="file" multiple accept=".png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.txt,.md,.markdown,.csv,.json,.log,.py,.js,.ts,.html,.css,.xml,.yml,.yaml,.toml,.pdf,.docx,.xlsx,.pptx" class="hidden">
|
|
407
|
-
</div>
|
|
408
|
-
<div id="rd-meta-popover" class="rd-meta-popover hidden" role="dialog" aria-label="任务信息" data-i18n-aria="任务信息">
|
|
409
|
-
<div class="rd-meta-popover-head"><span data-i18n="任务信息">任务信息</span><button id="rd-more-close" type="button" class="ghost" aria-label="关闭" data-i18n-aria="关闭">×</button></div>
|
|
410
|
-
<div id="rd-meta" class="stats rd-meta-strip"></div>
|
|
411
|
-
<div id="rd-overview" class="rd-overview hidden" aria-live="polite"></div>
|
|
412
|
-
</div>
|
|
413
|
-
</div>
|
|
414
|
-
<div id="rd-tabs" class="rd-tabs" role="tablist" data-i18n-aria="详情分区">
|
|
415
|
-
<button id="rd-tab-chat" class="rd-tab" role="tab" aria-controls="rd-pane-chat" aria-selected="false" tabindex="-1" data-tab="chat" data-i18n="对话"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-chat"></use></svg>对话<span class="rd-badge hidden"></span></button>
|
|
416
|
-
<button id="rd-tab-hive" class="rd-tab" role="tab" aria-controls="rd-pane-hive" aria-selected="false" tabindex="-1" data-tab="hive" data-i18n="蜂巢"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-bee"></use></svg>蜂巢<span class="rd-badge hidden"></span></button>
|
|
417
|
-
<button id="rd-tab-steps" class="rd-tab" role="tab" aria-controls="rd-pane-steps" aria-selected="false" tabindex="-1" data-tab="steps" data-i18n="步骤"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-tasks"></use></svg>步骤<span class="rd-badge hidden"></span></button>
|
|
418
|
-
<button id="rd-tab-result" class="rd-tab" role="tab" aria-controls="rd-pane-result" aria-selected="false" tabindex="-1" data-tab="result" data-i18n="成果"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-file-text"></use></svg>成果<span class="rd-badge hidden"></span></button>
|
|
419
|
-
<button id="rd-tab-git" class="rd-tab" role="tab" aria-controls="rd-pane-git" aria-selected="false" tabindex="-1" data-tab="git" data-i18n="Git"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>Git<span class="rd-badge hidden"></span></button>
|
|
420
|
-
<button id="rd-tab-bible" class="rd-tab" role="tab" aria-controls="rd-pane-bible" aria-selected="false" tabindex="-1" data-tab="bible" data-i18n="圣经"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-book"></use></svg>圣经<span class="rd-badge hidden"></span></button>
|
|
421
|
-
<button id="rd-tab-bookmeta" class="rd-tab" role="tab" aria-controls="rd-pane-bookmeta" aria-selected="false" tabindex="-1" data-tab="bookmeta" data-i18n="作品信息"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-idcard"></use></svg>作品信息<span class="rd-badge hidden"></span></button>
|
|
422
|
-
</div>
|
|
423
|
-
<!-- 直连任务「对话为主」导航:常规页签条收起(chat-mode),这里给按需打开
|
|
424
|
-
其它分区的小按钮 + 非对话分区时的「返回对话」入口 -->
|
|
425
|
-
<div id="rd-chat-nav" class="hidden"></div>
|
|
426
|
-
</div><!-- /rd-rail -->
|
|
427
|
-
<!-- 日志控制台:停靠右栏卡片下方(窄侧栏),点击蜂巢格/步骤的 CLI 日志在此展开;
|
|
428
|
-
顶边手柄可拖拽调高度(双击复位),运行中自动贴底跟随最新输出 -->
|
|
429
|
-
<div id="rd-log" class="logbox rd-logdrawer hidden">
|
|
430
|
-
<div id="rd-log-grip" class="rd-log-grip" data-i18n-title="拖拽调整高度;双击复位" title="拖拽调整高度;双击复位"></div>
|
|
431
|
-
<div class="log-live-bar">
|
|
432
|
-
<svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>
|
|
433
|
-
<span id="rd-log-step" class="rd-log-step" data-i18n-title="当前日志所属的步骤" title="当前日志所属的步骤"></span>
|
|
434
|
-
<span id="rd-log-live" class="log-live"></span>
|
|
435
|
-
<span id="rd-log-at" class="log-at"></span>
|
|
436
|
-
<span class="spacer"></span>
|
|
437
|
-
<button class="ghost rd-log-x" onclick="rdLogClose()" data-i18n-title="关闭日志" title="关闭日志"><svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg></button>
|
|
438
|
-
</div>
|
|
439
|
-
<pre id="rd-log-text"></pre>
|
|
440
|
-
</div>
|
|
441
|
-
</div><!-- /rd-railcol -->
|
|
442
|
-
<div class="rd-main">
|
|
443
|
-
<!-- 对话分区(直连任务默认):用户消息与 CLI 输出混排的时间线 + 贴底追话框。
|
|
444
|
-
运行中发出去走信箱(下一步送达);已结束发出去走 /chat 自动续跑新一轮。 -->
|
|
445
|
-
<div id="rd-pane-chat" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-chat" data-pane="chat">
|
|
446
|
-
<div id="rd-chat" class="rd-chat hidden">
|
|
447
|
-
<div id="rd-chat-flow" class="rd-chat-flow"></div>
|
|
448
|
-
<div class="rd-chat-bar">
|
|
449
|
-
<div id="rd-chat-continue-note" class="rd-chat-continue-note hidden"><span class="continue-dot"></span><span data-i18n="本轮已完成,可以继续对话">本轮已完成,可以继续对话</span><button id="rd-chat-focus" type="button" class="ghost small" data-i18n="继续对话">继续对话</button></div>
|
|
450
|
-
<textarea id="rd-chat-input" rows="2" data-i18n-ph="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)" placeholder="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)"></textarea>
|
|
451
|
-
<div class="rd-chat-tools">
|
|
452
|
-
<button id="rd-chat-attach" class="ghost" data-i18n-title="添加附件" title="添加附件" data-i18n-aria="添加附件" aria-label="添加附件"><svg class="ico" aria-hidden="true"><use href="#i-plus"></use></svg></button>
|
|
453
|
-
<button id="rd-chat-voice" class="ghost hidden" data-i18n-title="语音输入(口述转文字填入输入框)" title="语音输入(口述转文字填入输入框)" data-i18n-aria="语音输入" aria-label="语音输入"><svg class="ico" aria-hidden="true"><use href="#i-mic"></use></svg></button>
|
|
454
|
-
<span id="rd-chat-att-list" class="rd-att-list"></span>
|
|
455
|
-
<span id="rd-chat-hint" class="rd-hint"></span>
|
|
456
|
-
<button id="rd-chat-send" class="primary round" data-i18n-title="发送" title="发送" data-i18n-aria="发送" aria-label="发送"><svg class="ico" aria-hidden="true"><use href="#i-arrow-up"></use></svg></button>
|
|
457
|
-
</div>
|
|
458
|
-
<input id="rd-chat-file" type="file" multiple accept=".png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.txt,.md,.markdown,.csv,.json,.log,.py,.js,.ts,.html,.css,.xml,.yml,.yaml,.toml,.pdf,.docx,.xlsx,.pptx" class="hidden" />
|
|
459
|
-
</div>
|
|
460
|
-
</div>
|
|
461
|
-
</div>
|
|
462
|
-
<div id="rd-pane-hive" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-hive" data-pane="hive">
|
|
463
|
-
<div id="rd-hive" class="rd-hive hidden">
|
|
464
|
-
<div class="sec-title"><svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg><span data-i18n="蜂巢工作台">蜂巢工作台</span><span id="rd-hive-sub" class="tag"></span><button class="hhelp" data-help-topic="serial" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button></div>
|
|
465
|
-
<div id="rd-hive-cells" class="hive-cells"></div>
|
|
466
|
-
</div>
|
|
467
|
-
<!-- 运行中指挥信箱:renderDirector 只认活跃 run,渲染时摘掉 hidden;
|
|
468
|
-
与检查器的迷你指挥坞不同屏(详情上下文检查器让位),这里是带附件的完整版 -->
|
|
469
|
-
<div id="rd-direct" class="rd-direct hidden">
|
|
470
|
-
<div class="sec-title"><svg class="ico" aria-hidden="true"><use href="#i-baton"></use></svg><span data-i18n="运行中指挥">运行中指挥</span></div>
|
|
471
|
-
<div id="rd-msgs" class="rd-msgs"></div>
|
|
472
|
-
<div class="rd-composer">
|
|
473
|
-
<textarea id="rd-msg-input" rows="2" data-i18n-ph="补充说明或纠偏,将随下一条智能体步骤下达;可直接粘贴截图" placeholder="补充说明或纠偏,将随下一条智能体步骤下达;可直接粘贴截图"></textarea>
|
|
474
|
-
<div class="rd-composer-bar">
|
|
475
|
-
<button id="rd-attach-btn" class="ghost" data-i18n="附件">附件</button>
|
|
476
|
-
<span id="rd-attach-list" class="rd-att-list"></span>
|
|
477
|
-
<span id="rd-direct-hint" class="rd-hint"></span>
|
|
478
|
-
<button id="rd-send-btn" class="primary" data-i18n="下达指令">下达指令</button>
|
|
479
|
-
</div>
|
|
480
|
-
<input id="rd-attach-file" type="file" multiple accept=".png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.txt,.md,.markdown,.csv,.json,.log,.py,.js,.ts,.html,.css,.xml,.yml,.yaml,.toml,.pdf,.docx,.xlsx,.pptx" class="hidden" />
|
|
481
|
-
</div>
|
|
482
|
-
</div>
|
|
483
|
-
</div>
|
|
484
|
-
<div id="rd-pane-steps" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-steps" data-pane="steps">
|
|
485
|
-
<div id="rd-plan" class="hidden"></div>
|
|
486
|
-
<div id="rd-steps" class="steps"></div>
|
|
487
|
-
</div>
|
|
488
|
-
<div id="rd-pane-result" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-result" data-pane="result">
|
|
489
|
-
<div id="rd-outcome" class="rd-outcome hidden"></div>
|
|
490
|
-
<h3 data-i18n="报告" class="sec-title">报告</h3>
|
|
491
|
-
<div id="rd-report" class="report"></div>
|
|
492
|
-
<div id="rd-arts" class="rd-arts hidden"></div>
|
|
493
|
-
</div>
|
|
494
|
-
<div id="rd-pane-git" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-git" data-pane="git">
|
|
495
|
-
<div id="rd-git" class="rd-git hidden"></div>
|
|
496
|
-
</div>
|
|
497
|
-
<div id="rd-pane-bible" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-bible" data-pane="bible">
|
|
498
|
-
<div id="rd-bible" class="rd-bible hidden"></div>
|
|
499
|
-
</div>
|
|
500
|
-
<div id="rd-pane-bookmeta" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-bookmeta" data-pane="bookmeta">
|
|
501
|
-
<div id="rd-bookmeta" class="rd-bookmeta hidden"></div>
|
|
502
|
-
</div>
|
|
503
|
-
</div>
|
|
504
|
-
</div>
|
|
505
|
-
</div>
|
|
506
|
-
|
|
507
|
-
<!-- 自动化:定时任务 + 模板 -->
|
|
508
|
-
<div id="sub-automation" class="subpage hidden">
|
|
509
|
-
<div class="panel wide">
|
|
510
|
-
<div class="panel-head">
|
|
511
|
-
<h2 data-i18n="自动化">自动化</h2>
|
|
512
|
-
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
513
|
-
<div class="actions">
|
|
514
|
-
<button id="btn-auto-refresh" class="ghost small" title="重新拉取任务列表" data-i18n-title="重新拉取任务列表"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span data-i18n="刷新">刷新</span></button>
|
|
515
|
-
<button id="btn-auto-new" class="primary small" title="创建一个按计划自动运行的任务" data-i18n-title="创建一个按计划自动运行的任务"><span data-i18n="新建定时任务">新建定时任务</span></button>
|
|
516
|
-
</div>
|
|
517
|
-
</div>
|
|
518
|
-
<p data-i18n="按计划自动运行任务,或在需要时随时执行。" class="hint">按计划自动运行任务,或在需要时随时执行。</p>
|
|
519
|
-
<div id="auto-filter" class="seg" role="group" aria-label="任务筛选" data-i18n-aria="任务筛选">
|
|
520
|
-
<button data-i18n="全部" class="seg-btn active" data-f="all">全部</button>
|
|
521
|
-
<button data-i18n="进行中" class="seg-btn" data-f="on">进行中</button>
|
|
522
|
-
<button data-i18n="已停用" class="seg-btn" data-f="off">已停用</button>
|
|
523
|
-
</div>
|
|
524
|
-
<div id="auto-list" class="cards"></div>
|
|
525
|
-
<h3 data-i18n="定时任务模板" class="sec-title">定时任务模板</h3>
|
|
526
|
-
<div id="auto-tpl" class="cards auto-tpl-grid"></div>
|
|
527
|
-
</div>
|
|
528
|
-
</div>
|
|
529
|
-
|
|
530
|
-
<!-- 禅道:Bug 自动扫描修复 -->
|
|
531
|
-
<div id="sub-zentao" class="subpage hidden">
|
|
532
|
-
<div class="panel wide">
|
|
533
|
-
<div class="panel-head">
|
|
534
|
-
<h2 data-i18n="禅道 Bug 自动修复">禅道 Bug 自动修复</h2>
|
|
535
|
-
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
536
|
-
<div class="actions">
|
|
537
|
-
<button id="btn-zentao-test" class="ghost small" title="用当前表单里的连接信息试连禅道" data-i18n-title="用当前表单里的连接信息试连禅道"><span data-i18n="测试连接">测试连接</span></button>
|
|
538
|
-
<button id="btn-zentao-scan" class="primary small" title="立刻扫一遍激活 Bug 并对账回写" data-i18n-title="立刻扫一遍激活 Bug 并对账回写"><span data-i18n="立即扫描">立即扫描</span></button>
|
|
539
|
-
</div>
|
|
540
|
-
</div>
|
|
541
|
-
<p data-i18n="定时扫描禅道多个产品的激活 Bug:先按模块路由/AI 排查定责(前端/后端/双端/非我方),我方端自动创建代码修复任务(实现→验证→评审→修复),修完自动合并并 resolve 或转派对应负责人;测试指错人也按排查结论改派。" class="hint">定时扫描禅道多个产品的激活 Bug:先按模块路由/AI 排查定责(前端/后端/双端/非我方),我方端自动创建代码修复任务(实现→验证→评审→修复),修完自动合并并 resolve 或转派对应负责人;测试指错人也按排查结论改派。</p>
|
|
542
|
-
<div id="zentao-status" class="hint zt-status"></div>
|
|
543
|
-
<h3 data-i18n="禅道连接" class="sec-title">禅道连接</h3>
|
|
544
|
-
<div class="zt-grid">
|
|
545
|
-
<label data-i18n="禅道地址">禅道地址</label><input id="zt-base-url" type="text" placeholder="https://zentao.example.com(子目录部署带子目录)" data-i18n-ph="https://zentao.example.com(子目录部署带子目录)">
|
|
546
|
-
<label data-i18n="账号">账号</label><input id="zt-account" type="text" placeholder="建议建专用账号(如 codebee)收 Bug" data-i18n-ph="建议建专用账号(如 codebee)收 Bug">
|
|
547
|
-
<label data-i18n="密码">密码</label><input id="zt-password" type="password" placeholder="" autocomplete="new-password">
|
|
548
|
-
</div>
|
|
549
|
-
<h3 data-i18n="自动化" class="sec-title">自动化</h3>
|
|
550
|
-
<div class="zt-grid zt-grid-toggles">
|
|
551
|
-
<label class="toggle" title="模块路由没命中时,用 AI 读 Bug 描述判端(前端/后端/双端/非我方);关掉则未命中模块的 Bug 留人工" data-i18n-title="模块路由没命中时,用 AI 读 Bug 描述判端(前端/后端/双端/非我方);关掉则未命中模块的 Bug 留人工"><input id="zt-triageai" type="checkbox"><span data-i18n="AI 排查兜底">AI 排查兜底</span></label>
|
|
552
|
-
<label class="toggle" title="修复任务评审通过后,自动到禅道 resolve(fixed)并回评论" data-i18n-title="修复任务评审通过后,自动到禅道 resolve(fixed)并回评论"><input id="zt-autoresolve" type="checkbox"><span data-i18n="自动 resolve Bug">自动 resolve Bug</span></label>
|
|
553
|
-
<label class="toggle" title="把任务分支自动合并回基线分支(需配置基线分支;合并失败不 resolve 不转派,留人工)" data-i18n-title="把任务分支自动合并回基线分支(需配置基线分支;合并失败不 resolve 不转派,留人工)"><input id="zt-automerge" type="checkbox"><span data-i18n="自动合并代码">自动合并代码</span></label>
|
|
554
|
-
<label class="toggle" title="按下面的间隔定时扫描;关掉后仍可手动「立即扫描」" data-i18n-title="按下面的间隔定时扫描;关掉后仍可手动「立即扫描」"><input id="zt-poll" type="checkbox"><span data-i18n="定时扫描">定时扫描</span></label>
|
|
555
|
-
<label data-i18n="扫描间隔(小时)">扫描间隔(小时)</label><input id="zt-interval" type="number" min="1" max="168" step="1">
|
|
556
|
-
</div>
|
|
557
|
-
<div class="ops"><button id="btn-zentao-save" class="primary small"><span data-i18n="保存配置">保存配置</span></button></div>
|
|
558
|
-
<h3 data-i18n="产品档案" class="sec-title">产品档案</h3>
|
|
559
|
-
<p data-i18n="每个产品一份档案:我方端(自动修)、两端仓库与负责人、模块路由(模块 → 端/人,排查优先级最高)。" class="hint">每个产品一份档案:我方端(自动修)、两端仓库与负责人、模块路由(模块 → 端/人,排查优先级最高)。</p>
|
|
560
|
-
<div id="zt-profiles" class="cards"></div>
|
|
561
|
-
<div class="ops">
|
|
562
|
-
<button id="btn-zentao-fetchcat" class="ghost small" title="从禅道拉产品与账号清单:产品 ID、负责人变下拉选择(需连接可用)" data-i18n-title="从禅道拉产品与账号清单:产品 ID、负责人变下拉选择(需连接可用)"><span data-i18n="拉取清单">拉取清单</span></button>
|
|
563
|
-
<button id="btn-zentao-addprofile" class="ghost small"><span data-i18n="+ 添加产品">+ 添加产品</span></button>
|
|
564
|
-
</div>
|
|
565
|
-
<datalist id="zt-users"></datalist>
|
|
566
|
-
<h3 data-i18n="修复记录" class="sec-title">修复记录</h3>
|
|
567
|
-
<div id="zentao-claims"></div>
|
|
568
|
-
</div>
|
|
569
|
-
</div>
|
|
570
|
-
|
|
571
|
-
<!-- 使用统计 -->
|
|
572
|
-
<div id="sub-usage" class="subpage hidden">
|
|
573
|
-
<div class="panel wide">
|
|
574
|
-
<div class="panel-head">
|
|
575
|
-
<h2 data-i18n="使用统计">使用统计<span class="badge2" data-i18n="应用用量">应用用量</span></h2>
|
|
576
|
-
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
577
|
-
<div class="actions" id="usage-ranges">
|
|
578
|
-
<div class="seg" role="group" aria-label="时间范围" data-i18n-aria="时间范围">
|
|
579
|
-
<button data-i18n="今天" class="seg-btn active" data-days="1">今天</button>
|
|
580
|
-
<button data-i18n="近 7 天" class="seg-btn" data-days="7">近 7 天</button>
|
|
581
|
-
<button data-i18n="近 30 天" class="seg-btn" data-days="30">近 30 天</button>
|
|
582
|
-
<button data-i18n="全部" class="seg-btn" data-days="0">全部</button>
|
|
583
|
-
</div>
|
|
584
|
-
<button id="btn-usage-refresh" class="icon-btn" title="重新拉取" aria-label="重新拉取" data-i18n-aria="重新拉取" data-i18n-title="重新拉取">
|
|
585
|
-
<svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg>
|
|
586
|
-
</button>
|
|
587
|
-
</div>
|
|
588
|
-
</div>
|
|
589
|
-
<p data-i18n="统计所有真实 LLM 调用:编排各角色步骤(规划/实现/评审/修订…)、编排者直连 API、连通性冒烟与 AI 修复;mock 智能体与本地验证不计入。" class="hint">统计所有真实 LLM 调用:编排各角色步骤(规划/实现/评审/修订…)、编排者直连 API、连通性冒烟与 AI 修复;mock 智能体与本地验证不计入。</p>
|
|
590
|
-
<div id="usage-kpis" class="usage-kpis"><p data-i18n="加载中…" class="hint">加载中…</p></div>
|
|
591
|
-
<div id="usage-note"></div>
|
|
592
|
-
<h3 data-i18n="Token 活动" class="sec-title">Token 活动</h3>
|
|
593
|
-
<div class="usage-heat-head">
|
|
594
|
-
<div class="usage-heat-scale" aria-hidden="true"><span data-i18n="少">少</span><i class="hs0"></i><i class="hs1"></i><i class="hs2"></i><i class="hs3"></i><i class="hs4"></i><span data-i18n="多">多</span></div>
|
|
595
|
-
<div class="seg" id="usage-heat-modes" role="group" aria-label="热力图粒度" data-i18n-aria="热力图粒度">
|
|
596
|
-
<button data-i18n="每日" class="seg-btn active" data-heat="day">每日</button>
|
|
597
|
-
<button data-i18n="每周" class="seg-btn" data-heat="week">每周</button>
|
|
598
|
-
<button data-i18n="累计" class="seg-btn" data-heat="total">累计</button>
|
|
599
|
-
</div>
|
|
600
|
-
</div>
|
|
601
|
-
<div id="usage-heat"></div>
|
|
602
|
-
<h3 data-i18n="每日 Token 趋势图" class="sec-title">每日 Token 趋势图</h3>
|
|
603
|
-
<div id="usage-trend"></div>
|
|
604
|
-
<h3 data-i18n="模型用量" class="sec-title">模型用量</h3>
|
|
605
|
-
<div id="usage-models"></div>
|
|
606
|
-
<div id="usage-dims"></div>
|
|
607
|
-
<h3 data-i18n="最近调用" class="sec-title">最近调用</h3>
|
|
608
|
-
<div id="usage-recent" class="list"></div>
|
|
609
|
-
</div>
|
|
610
|
-
</div>
|
|
611
|
-
|
|
612
|
-
<!-- 智能体管理 -->
|
|
613
|
-
<div id="sub-agents" class="subpage hidden">
|
|
614
|
-
<div class="panel wide">
|
|
615
|
-
<div class="panel-head">
|
|
616
|
-
<h2 data-i18n="智能体目录">智能体目录</h2>
|
|
617
|
-
<button class="hhelp" data-help-topic="models" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
618
|
-
<div class="actions">
|
|
187
|
+
<button class="set-item" data-sub="skills" data-i18n="经验库"><svg class="ico" aria-hidden="true"><use href="#i-book"></use></svg>经验库</button>
|
|
188
|
+
<button class="set-item" data-sub="knowledge" data-i18n="知识库"><svg class="ico" aria-hidden="true"><use href="#i-sigma"></use></svg>知识库</button>
|
|
189
|
+
<button class="set-item" data-sub="market" data-i18n="插件市场"><svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>插件市场</button>
|
|
190
|
+
<button class="set-item" data-sub="orch" data-i18n="编排设置"><svg class="ico" aria-hidden="true"><use href="#i-workflow"></use></svg>编排设置</button>
|
|
191
|
+
<div data-i18n="数据" class="set-group">数据</div>
|
|
192
|
+
<button class="set-item" data-sub="data" data-i18n="数据与备份"><svg class="ico" aria-hidden="true"><use href="#i-library"></use></svg>数据与备份</button>
|
|
193
|
+
<div data-i18n="外观" class="set-group">外观</div>
|
|
194
|
+
<button class="set-item" data-sub="appearance" data-i18n="皮肤"><svg class="ico" aria-hidden="true"><use href="#i-palette"></use></svg>皮肤</button>
|
|
195
|
+
<div data-i18n="软件" class="set-group">软件</div>
|
|
196
|
+
<button id="btn-guide" class="set-item" data-sub="__guide" data-i18n="帮助中心"><svg class="ico" aria-hidden="true"><use href="#i-rocket"></use></svg>帮助中心</button>
|
|
197
|
+
<button id="btn-about" class="set-item" data-sub="about" data-i18n="关于与更新"><svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>关于与更新</button>
|
|
198
|
+
<div data-i18n="远程" class="set-group">远程</div>
|
|
199
|
+
<button id="btn-phone" class="set-item" data-sub="__phone" data-i18n="手机连接"><svg class="ico" aria-hidden="true"><use href="#i-phone"></use></svg>手机连接</button>
|
|
200
|
+
</div>
|
|
201
|
+
</aside>
|
|
202
|
+
|
|
203
|
+
<!-- ================= 主栏 ================= -->
|
|
204
|
+
<div id="mainwrap">
|
|
205
|
+
<header class="topbar">
|
|
206
|
+
<button id="btn-menu" class="icon-btn" title="收起 / 展开侧栏" aria-label="收起 / 展开侧栏" data-i18n-aria="收起 / 展开侧栏" data-i18n-title="收起 / 展开侧栏">
|
|
207
|
+
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-menu"></use></svg>
|
|
208
|
+
</button>
|
|
209
|
+
<button id="upd-pill" class="pill upd-pill hidden" onclick="switchTab('about')" title="发现新版本,点击前往更新" aria-label="发现新版本" data-i18n-title="发现新版本,点击前往更新" data-i18n-aria="发现新版本">
|
|
210
|
+
<svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span id="upd-pill-txt"></span>
|
|
211
|
+
<span class="upd-x" role="button" onclick="event.stopPropagation();updDismiss()" title="忽略此版本" aria-label="忽略此版本" data-i18n-title="忽略此版本" data-i18n-aria="忽略此版本"><svg class="ico" aria-hidden="true"><use href="#i-x"></use></svg></span>
|
|
212
|
+
</button>
|
|
213
|
+
<div data-i18n="任务" id="page-title" class="page-title">任务</div>
|
|
214
|
+
<div id="health-banner" class="health-banner hidden" onclick="healthBannerClick()" title="供应商健康告警" aria-label="供应商健康告警" data-i18n-title="供应商健康告警" data-i18n-aria="供应商健康告警"></div>
|
|
215
|
+
<div class="top-actions">
|
|
216
|
+
<button id="ctrl-pill" class="pill ctrl icon-only hidden" onclick="ctrlClick()" title="多端控制权" aria-label="多端控制权" data-i18n-aria="多端控制权" data-i18n-title="多端控制权"><svg class="ico" aria-hidden="true"><use href="#i-unlock"></use></svg></button>
|
|
217
|
+
<!-- 语言快捷切换:语言名用母语写死(中文/English),刻意不做 i18n——任何母语的人都要能读懂并选中 -->
|
|
218
|
+
<div class="lang-wrap">
|
|
219
|
+
<button id="btn-lang" class="pill icon-only" type="button" onclick="toggleLangMenu()" title="语言 / Language" aria-label="切换语言" aria-haspopup="listbox" aria-controls="lang-menu" data-i18n-title="语言 / Language" data-i18n-aria="切换语言"><svg class="ico" aria-hidden="true"><use href="#i-globe"></use></svg></button>
|
|
220
|
+
<div id="lang-menu" class="lang-menu hidden" role="listbox" aria-label="语言 / Language" data-i18n-aria="语言 / Language">
|
|
221
|
+
<button type="button" class="lang-item" role="option" data-lang="zh" onclick="pickLang('zh')"><span>中文</span><svg class="ico li-check" aria-hidden="true"><use href="#i-check"></use></svg></button>
|
|
222
|
+
<button type="button" class="lang-item" role="option" data-lang="en" onclick="pickLang('en')"><span>English</span><svg class="ico li-check" aria-hidden="true"><use href="#i-check"></use></svg></button>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
<button id="btn-skin" class="pill icon-only" title="皮肤 / 换肤:多套配色,各含日间与夜间" aria-label="皮肤 / 换肤" data-i18n-aria="皮肤 / 换肤" data-i18n-title="皮肤 / 换肤:多套配色,各含日间与夜间"><svg class="ico" aria-hidden="true"><use href="#i-palette"></use></svg></button>
|
|
226
|
+
<button id="btn-theme" class="pill icon-only" title="切换日间 / 夜间主题" aria-label="切换日间 / 夜间主题" data-i18n-aria="切换日间 / 夜间主题" data-i18n-title="切换日间 / 夜间主题"><svg class="ico" aria-hidden="true"><use href="#i-moon"></use></svg></button>
|
|
227
|
+
<!-- 详情面板开关:贴动作组最右 = 紧挨面板弹出的那一侧,空间映射一致 -->
|
|
228
|
+
<button id="btn-insp" class="pill icon-only" type="button" onclick="toggleInspector()" title="打开任务详情" aria-label="打开任务详情" data-i18n-title="打开任务详情" data-i18n-aria="打开任务详情"><svg class="ico" aria-hidden="true"><use href="#i-panel"></use></svg></button>
|
|
229
|
+
<div data-i18n="连接中…" id="conn" class="conn">连接中…</div>
|
|
230
|
+
</div>
|
|
231
|
+
</header>
|
|
232
|
+
|
|
233
|
+
<main>
|
|
234
|
+
<!-- ================= 设置页(导航在左栏,内容为居中窄栏) ================= -->
|
|
235
|
+
<section id="page-settings" class="page">
|
|
236
|
+
<div id="sub-tasks" class="subpage">
|
|
237
|
+
<div class="panel wide composer">
|
|
238
|
+
<div class="hero-row">
|
|
239
|
+
<h2 class="hero" id="cmp-greet">上午好呀,有什么想让我帮忙的吗</h2>
|
|
240
|
+
</div>
|
|
241
|
+
<div class="form">
|
|
242
|
+
<!-- Composer 大输入框:工作目录作为框内首行上下文;值真源仍是
|
|
243
|
+
#f-type / #f-workdir(既有 ID,联动与测试锚点全兼容)。
|
|
244
|
+
附件在左下、发送在右下;Enter 发送,Shift+Enter 换行 -->
|
|
245
|
+
<div class="cmp-box">
|
|
246
|
+
<div class="cmp-pills">
|
|
247
|
+
<div class="cmp-wd">
|
|
248
|
+
<svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg>
|
|
249
|
+
<div class="input-row">
|
|
250
|
+
<input id="f-workdir" placeholder="工作目录 · 留空用默认" data-i18n-ph="工作目录 · 留空用默认">
|
|
251
|
+
<button data-i18n="选择…" class="ghost small wd-pick-btn" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('f-workdir')">选择…</button>
|
|
252
|
+
<button type="button" id="f-workdir-menu-btn" class="ghost small wd-menu-btn" aria-haspopup="listbox" aria-controls="wd-menu" title="最近使用的文件夹" data-i18n-title="最近使用的文件夹" onclick="toggleWdMenu(event)">
|
|
253
|
+
<svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg>
|
|
254
|
+
</button>
|
|
255
|
+
</div>
|
|
256
|
+
<!-- 最近文件夹下拉:点 ▾ 展开(toggleWdMenu 渲染),含浏览与「用默认路径」 -->
|
|
257
|
+
<div id="wd-menu" class="wd-menu hidden" role="listbox" aria-label="最近使用的文件夹" data-i18n-aria="最近使用的文件夹"></div>
|
|
258
|
+
</div>
|
|
259
|
+
<!-- 工作目录指向 git 仓库时出现(probeGit 显隐):分支以小胶囊挂同一条上下文条,
|
|
260
|
+
悬停看当前分支/脏区/检出说明(renderGitHint 写 title);运行时检出任务分支 -->
|
|
261
|
+
<div class="field hidden" id="row-git">
|
|
262
|
+
<label data-i18n="代码版本"><svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>代码版本</label>
|
|
263
|
+
<select id="f-git-rev"></select>
|
|
264
|
+
<p class="hint" id="git-hint"></p>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
<!-- 平时空(默认路径提示由 JS 写进占位符);继续会话/克隆任务预填时这里落覆盖警告 -->
|
|
268
|
+
<p class="hint cmp-hint" id="f-workdir-hint"></p>
|
|
269
|
+
<div class="cmp-context-note"><svg class="ico" aria-hidden="true"><use href="#i-chat"></use></svg><span data-i18n="描述目标即可,CodeBee 会自动拆解并执行">描述目标即可,CodeBee 会自动拆解并执行</span></div>
|
|
270
|
+
<div id="att-chips" class="att-chips" aria-live="polite"></div>
|
|
271
|
+
<textarea id="f-goal" rows="3" placeholder="要完成什么,一句话即可" required data-i18n-ph="要完成什么,一句话即可"></textarea>
|
|
272
|
+
<div class="cmp-bar">
|
|
273
|
+
<div class="cmp-mode">
|
|
274
|
+
<div class="type-wrap">
|
|
275
|
+
<select id="f-type" class="hidden" tabindex="-1" aria-hidden="true"></select>
|
|
276
|
+
<button type="button" id="f-type-btn" class="type-pick" onclick="toggleTypeMenu()" aria-haspopup="listbox" aria-controls="type-menu">
|
|
277
|
+
<span class="tp-ico" id="f-type-ico" aria-hidden="true"></span>
|
|
278
|
+
<span class="tp-name" id="f-type-name"></span>
|
|
279
|
+
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
280
|
+
</button>
|
|
281
|
+
<div id="type-menu" class="type-menu hidden" role="listbox" aria-label="任务类型" data-i18n-aria="任务类型"></div>
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
<div class="att-strip">
|
|
285
|
+
<button type="button" class="ghost small" id="btn-attach" title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB),创建任务时落盘到工作目录 _attachments/;也可直接粘贴截图" data-i18n-title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB),创建任务时落盘到工作目录 _attachments/;也可直接粘贴截图"><svg class="ico" aria-hidden="true"><use href="#i-paperclip"></use></svg><span data-i18n="附件">附件</span></button>
|
|
286
|
+
</div>
|
|
287
|
+
<div class="cmp-send">
|
|
288
|
+
<span id="create-msg" class="msg"></span>
|
|
289
|
+
<button id="btn-create" class="primary round" title="创建并运行" data-i18n-title="创建并运行" aria-label="创建并运行" data-i18n-aria="创建并运行"><svg class="ico" aria-hidden="true"><use href="#i-arrow-up"></use></svg></button>
|
|
290
|
+
</div>
|
|
291
|
+
</div>
|
|
292
|
+
<input type="file" id="f-attach-file" class="hidden" multiple>
|
|
293
|
+
</div>
|
|
294
|
+
<!-- 快捷类型:点一个即选定并聚焦目标框(renderQuickChips 渲染) -->
|
|
295
|
+
<div id="cmp-quick" class="cmp-quick" role="group" aria-label="常用类型" data-i18n-aria="常用类型"></div>
|
|
296
|
+
<!-- 开跑前成本预估(refreshEstimate 填充;无同类样本时保持隐藏) -->
|
|
297
|
+
<p class="hint cmp-estimate hidden" id="cmp-estimate"></p>
|
|
298
|
+
<!-- 需求拷问采访卡(renderClarify 渲染;goal 模糊时出现,跳过=直接创建) -->
|
|
299
|
+
<div id="clarify-box" class="clarify-box hidden"></div>
|
|
300
|
+
<div class="field hidden" id="row-resume-session">
|
|
301
|
+
<label data-i18n="选择会话">选择会话</label>
|
|
302
|
+
<select id="f-resume-session"><option data-i18n="(加载中…)">(加载中…)</option></select>
|
|
303
|
+
<p class="hint" id="resume-session-hint"></p>
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
<details id="f-advanced">
|
|
307
|
+
<summary data-i18n="更多选项">更多选项</summary>
|
|
308
|
+
<div class="adv-body">
|
|
309
|
+
<div class="grid-2">
|
|
310
|
+
<div class="field">
|
|
311
|
+
<label data-i18n="继续会话">继续会话</label>
|
|
312
|
+
<select id="f-resume-agent">
|
|
313
|
+
<option data-i18n="不沿用(全新开始)" value="">不沿用(全新开始)</option>
|
|
314
|
+
</select>
|
|
315
|
+
</div>
|
|
316
|
+
<div class="field"><label data-i18n="任务标题">任务标题</label><input id="f-title" placeholder="可空,自动取目标首行" data-i18n-ph="可空,自动取目标首行"></div>
|
|
317
|
+
</div>
|
|
318
|
+
<div class="field"><label data-i18n="上下文">上下文</label><textarea id="f-context" rows="2" placeholder="背景信息、约束、相关文件(可空)" data-i18n-ph="背景信息、约束、相关文件(可空)"></textarea></div>
|
|
319
|
+
<div class="field">
|
|
320
|
+
<label data-i18n="编排模式">编排模式</label>
|
|
321
|
+
<select id="f-mode">
|
|
322
|
+
<option data-i18n="智能(推荐):自动拆解 + 智能路由 + 失败自动修复/换将" value="auto">智能(推荐):自动拆解 + 智能路由 + 失败自动修复/换将</option>
|
|
323
|
+
<option data-i18n="手动:自行指定实现者与评审组" value="manual">手动:自行指定实现者与评审组</option>
|
|
324
|
+
</select>
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
<div id="f-code-only">
|
|
328
|
+
<div class="field"><label data-i18n="验证命令">验证命令</label><input id="f-verify" placeholder="例:python -m pytest -q(可空=只评审)" data-i18n-ph="例:python -m pytest -q(可空=只评审)"></div>
|
|
329
|
+
</div>
|
|
330
|
+
<div id="f-review-only" class="hidden">
|
|
331
|
+
<div id="bible-create-field" class="field hidden">
|
|
332
|
+
<label><svg class="ico" aria-hidden="true"><use href="#i-book"></use></svg><span data-i18n="初始故事圣经">初始故事圣经</span><span class="field-optional" data-i18n="可选">可选</span></label>
|
|
333
|
+
<textarea id="f-bible" rows="5" placeholder="人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md" data-i18n-ph="人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md"></textarea>
|
|
334
|
+
<p class="hint" data-i18n="连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。">连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。另可放 plot-modules.md 剧情模块库(拆文沉淀的桥段/爽点素材,每章自动注入)。</p>
|
|
335
|
+
</div>
|
|
336
|
+
<div class="grid-3">
|
|
337
|
+
<div class="field"><label data-i18n="稿件文件(合并稿)">稿件文件(合并稿)</label><input id="f-manuscript" value="manuscript.md" placeholder="工作目录内的文件名" data-i18n-ph="工作目录内的文件名"></div>
|
|
338
|
+
<div class="field"><label data-i18n="评审轮数">评审轮数</label><input id="f-rounds" type="number" value="2" min="1" max="5"></div>
|
|
339
|
+
<div class="field"><label data-i18n="发布阈值(全书)">发布阈值(全书)</label><input id="f-threshold" type="number" value="7.0" min="1" max="10" step="0.5"></div>
|
|
340
|
+
<div class="field"><label data-i18n="候选并发数(单稿赛马,1=关)">候选并发数(单稿赛马,1=关)</label><input id="f-bestof" type="number" value="1" min="1" max="3" title="同时起草多份候选稿,终审择优并吸收落选稿优点;每多一路多一份起草开销" data-i18n-title="同时起草多份候选稿,终审择优并吸收落选稿优点;每多一路多一份起草开销"></div>
|
|
341
|
+
</div>
|
|
342
|
+
<div class="field"><label data-i18n="评审维度(逗号分隔,可自定义)">评审维度(逗号分隔,可自定义)</label><input id="f-rubric" placeholder="例:情节, 人物, 文笔" data-i18n-ph="例:情节, 人物, 文笔"></div>
|
|
343
|
+
<div class="grid-2">
|
|
344
|
+
<div class="field"><label data-i18n="连载模式:章节数(空 = 单稿件一次成文)">连载模式:章节数(空 = 单稿件一次成文)</label><input id="f-chapters" type="number" min="2" max="20" placeholder="例:8(逐章起草+评审+修订)" data-i18n-ph="例:8(逐章起草+评审+修订)"></div>
|
|
345
|
+
<div class="field"><label data-i18n="每章约字数">每章约字数</label><input id="f-words-per-ch" type="number" min="500" max="8000" step="100" placeholder="例:2500" data-i18n-ph="例:2500"></div>
|
|
346
|
+
<div class="field"><label data-i18n="同章赛马稿件数">同章赛马稿件数</label><input id="f-variants" type="number" min="1" max="3" step="1" placeholder="1 = 关闭(2-3 每章多稿择优,更贵)" data-i18n-ph="1 = 关闭(2-3 每章多稿择优,更贵)"></div>
|
|
347
|
+
</div>
|
|
348
|
+
</div>
|
|
349
|
+
|
|
350
|
+
<div id="f-manual-only" class="hidden">
|
|
351
|
+
<div class="grid-2">
|
|
352
|
+
<div class="field"><label data-i18n="实现者">实现者</label><select id="f-impl"></select></div>
|
|
353
|
+
<div class="field" id="critic-box"><label data-i18n="评审组">评审组</label><div id="f-critics" class="chips"></div></div>
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
</div>
|
|
357
|
+
</details>
|
|
358
|
+
</div>
|
|
359
|
+
</div>
|
|
360
|
+
</div>
|
|
361
|
+
|
|
362
|
+
<!-- 运行记录 -->
|
|
363
|
+
<div id="sub-runs" class="subpage hidden">
|
|
364
|
+
<div class="panel wide">
|
|
365
|
+
<div class="panel-head">
|
|
366
|
+
<h2 data-i18n="运行记录">运行记录</h2>
|
|
367
|
+
<div class="actions">
|
|
368
|
+
<button data-i18n="全部清除" id="btn-clear-runs" class="danger small" onclick="clearRuns()" title="删除全部已结束的运行记录(运行中的会保留)" data-i18n-title="删除全部已结束的运行记录(运行中的会保留)">全部清除</button>
|
|
369
|
+
</div>
|
|
370
|
+
</div>
|
|
371
|
+
<div id="run-list" class="list"></div>
|
|
372
|
+
</div>
|
|
373
|
+
<!-- 运行详情:头部(标题/状态/操作/统计)+ 标签分区 + 贴底日志抽屉。
|
|
374
|
+
分区内容的 hidden 语义不变(没数据整块收起);标签页只切外层 pane。 -->
|
|
375
|
+
<div id="run-detail" class="panel wide hidden">
|
|
376
|
+
<!-- 右栏一张卡:任务信息(返回/标题/状态/操作)+ 分区导航,发丝线分区;
|
|
377
|
+
日志控制台停靠卡片下方,不再横向盖住主区内容 -->
|
|
378
|
+
<div id="rd-railcol">
|
|
379
|
+
<div id="rd-rail">
|
|
380
|
+
<div class="detail-head">
|
|
381
|
+
<button id="btn-back" class="ghost" data-i18n="返回"><svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回</button>
|
|
382
|
+
<h2 id="rd-title"></h2>
|
|
383
|
+
<span id="rd-status" class="chip"></span>
|
|
384
|
+
<div class="rd-actions">
|
|
385
|
+
<button id="btn-pause" class="ghost hidden" data-i18n="暂停">暂停</button>
|
|
386
|
+
<button data-i18n="取消运行" id="btn-cancel" class="danger hidden">取消运行</button>
|
|
387
|
+
<button data-i18n="↻ 继续任务" id="btn-retry" class="primary hidden" data-i18n-title="再跑一次这个任务;连载任务会断点续跑,已完成章节不重写" title="再跑一次这个任务;连载任务会断点续跑,已完成章节不重写">↻ 继续任务</button>
|
|
388
|
+
<button data-i18n="✎ 编辑重试" id="btn-editretry" class="ghost hidden" data-i18n-title="取回原任务的目标/目录/评审设置,修改后提交即重新开跑" title="取回原任务的目标/目录/评审设置,修改后提交即重新开跑">✎ 编辑重试</button>
|
|
389
|
+
<button data-i18n="继续连载" id="btn-continue" class="ghost hidden">继续连载</button>
|
|
390
|
+
<button data-i18n="基于此任务新建" id="btn-newfrom" class="ghost hidden">基于此任务新建</button>
|
|
391
|
+
<button data-i18n="分享页" id="btn-share" class="ghost hidden" data-i18n-title="生成自包含分享页(单文件 HTML),可直接发给他人查看任务成果" title="生成自包含分享页(单文件 HTML),可直接发给他人查看任务成果">分享页</button>
|
|
392
|
+
<button data-i18n="删除记录" id="btn-delete" class="danger hidden">删除记录</button>
|
|
393
|
+
<button data-i18n="✉ 继续对话" id="btn-talk" class="ghost hidden" data-i18n-title="人工检查有问题?告诉主智能体,由它判断怎么引导执行" title="人工检查有问题?告诉主智能体,由它判断怎么引导执行">✉ 继续对话</button>
|
|
394
|
+
<button id="rd-more-toggle" class="rd-more-toggle" type="button" aria-label="更多任务信息" data-i18n-aria="更多任务信息" aria-expanded="false" aria-controls="rd-meta-popover" title="更多任务信息" data-i18n-title="更多任务信息">•••</button>
|
|
395
|
+
</div>
|
|
396
|
+
<!-- 人工干预(非直连任务):运行中=递话入箱,下一步开始前送达主智能体;
|
|
397
|
+
已结束=发送后自动断点续跑,主智能体带着反馈重新规划/引导执行 -->
|
|
398
|
+
<div id="rd-talk" class="rd-talk hidden">
|
|
399
|
+
<div id="rd-talk-atts" class="rd-talk-atts"></div>
|
|
400
|
+
<textarea id="rd-talk-input" rows="3" placeholder="哪里不对、要改哪里?主智能体会据此判断并引导执行" data-i18n-ph="哪里不对、要改哪里?主智能体会据此判断并引导执行"></textarea>
|
|
401
|
+
<div class="rd-talk-bar">
|
|
402
|
+
<button id="rd-talk-attach" class="ghost" data-i18n="附件" data-i18n-title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB);也可直接粘贴截图" title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB);也可直接粘贴截图">附件</button>
|
|
403
|
+
<span id="rd-talk-hint" class="hint"></span>
|
|
404
|
+
<button id="rd-talk-send" class="primary small" data-i18n="递话">递话</button>
|
|
405
|
+
</div>
|
|
406
|
+
<input id="rd-talk-file" type="file" multiple accept=".png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.txt,.md,.markdown,.csv,.json,.log,.py,.js,.ts,.html,.css,.xml,.yml,.yaml,.toml,.pdf,.docx,.xlsx,.pptx" class="hidden">
|
|
407
|
+
</div>
|
|
408
|
+
<div id="rd-meta-popover" class="rd-meta-popover hidden" role="dialog" aria-label="任务信息" data-i18n-aria="任务信息">
|
|
409
|
+
<div class="rd-meta-popover-head"><span data-i18n="任务信息">任务信息</span><button id="rd-more-close" type="button" class="ghost" aria-label="关闭" data-i18n-aria="关闭">×</button></div>
|
|
410
|
+
<div id="rd-meta" class="stats rd-meta-strip"></div>
|
|
411
|
+
<div id="rd-overview" class="rd-overview hidden" aria-live="polite"></div>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
<div id="rd-tabs" class="rd-tabs" role="tablist" data-i18n-aria="详情分区">
|
|
415
|
+
<button id="rd-tab-chat" class="rd-tab" role="tab" aria-controls="rd-pane-chat" aria-selected="false" tabindex="-1" data-tab="chat" data-i18n="对话"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-chat"></use></svg>对话<span class="rd-badge hidden"></span></button>
|
|
416
|
+
<button id="rd-tab-hive" class="rd-tab" role="tab" aria-controls="rd-pane-hive" aria-selected="false" tabindex="-1" data-tab="hive" data-i18n="蜂巢"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-bee"></use></svg>蜂巢<span class="rd-badge hidden"></span></button>
|
|
417
|
+
<button id="rd-tab-steps" class="rd-tab" role="tab" aria-controls="rd-pane-steps" aria-selected="false" tabindex="-1" data-tab="steps" data-i18n="步骤"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-tasks"></use></svg>步骤<span class="rd-badge hidden"></span></button>
|
|
418
|
+
<button id="rd-tab-result" class="rd-tab" role="tab" aria-controls="rd-pane-result" aria-selected="false" tabindex="-1" data-tab="result" data-i18n="成果"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-file-text"></use></svg>成果<span class="rd-badge hidden"></span></button>
|
|
419
|
+
<button id="rd-tab-git" class="rd-tab" role="tab" aria-controls="rd-pane-git" aria-selected="false" tabindex="-1" data-tab="git" data-i18n="Git"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>Git<span class="rd-badge hidden"></span></button>
|
|
420
|
+
<button id="rd-tab-bible" class="rd-tab" role="tab" aria-controls="rd-pane-bible" aria-selected="false" tabindex="-1" data-tab="bible" data-i18n="圣经"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-book"></use></svg>圣经<span class="rd-badge hidden"></span></button>
|
|
421
|
+
<button id="rd-tab-bookmeta" class="rd-tab" role="tab" aria-controls="rd-pane-bookmeta" aria-selected="false" tabindex="-1" data-tab="bookmeta" data-i18n="作品信息"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-idcard"></use></svg>作品信息<span class="rd-badge hidden"></span></button>
|
|
422
|
+
</div>
|
|
423
|
+
<!-- 直连任务「对话为主」导航:常规页签条收起(chat-mode),这里给按需打开
|
|
424
|
+
其它分区的小按钮 + 非对话分区时的「返回对话」入口 -->
|
|
425
|
+
<div id="rd-chat-nav" class="hidden"></div>
|
|
426
|
+
</div><!-- /rd-rail -->
|
|
427
|
+
<!-- 日志控制台:停靠右栏卡片下方(窄侧栏),点击蜂巢格/步骤的 CLI 日志在此展开;
|
|
428
|
+
顶边手柄可拖拽调高度(双击复位),运行中自动贴底跟随最新输出 -->
|
|
429
|
+
<div id="rd-log" class="logbox rd-logdrawer hidden">
|
|
430
|
+
<div id="rd-log-grip" class="rd-log-grip" data-i18n-title="拖拽调整高度;双击复位" title="拖拽调整高度;双击复位"></div>
|
|
431
|
+
<div class="log-live-bar">
|
|
432
|
+
<svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>
|
|
433
|
+
<span id="rd-log-step" class="rd-log-step" data-i18n-title="当前日志所属的步骤" title="当前日志所属的步骤"></span>
|
|
434
|
+
<span id="rd-log-live" class="log-live"></span>
|
|
435
|
+
<span id="rd-log-at" class="log-at"></span>
|
|
436
|
+
<span class="spacer"></span>
|
|
437
|
+
<button class="ghost rd-log-x" onclick="rdLogClose()" data-i18n-title="关闭日志" title="关闭日志"><svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg></button>
|
|
438
|
+
</div>
|
|
439
|
+
<pre id="rd-log-text"></pre>
|
|
440
|
+
</div>
|
|
441
|
+
</div><!-- /rd-railcol -->
|
|
442
|
+
<div class="rd-main">
|
|
443
|
+
<!-- 对话分区(直连任务默认):用户消息与 CLI 输出混排的时间线 + 贴底追话框。
|
|
444
|
+
运行中发出去走信箱(下一步送达);已结束发出去走 /chat 自动续跑新一轮。 -->
|
|
445
|
+
<div id="rd-pane-chat" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-chat" data-pane="chat">
|
|
446
|
+
<div id="rd-chat" class="rd-chat hidden">
|
|
447
|
+
<div id="rd-chat-flow" class="rd-chat-flow"></div>
|
|
448
|
+
<div class="rd-chat-bar">
|
|
449
|
+
<div id="rd-chat-continue-note" class="rd-chat-continue-note hidden"><span class="continue-dot"></span><span data-i18n="本轮已完成,可以继续对话">本轮已完成,可以继续对话</span><button id="rd-chat-focus" type="button" class="ghost small" data-i18n="继续对话">继续对话</button></div>
|
|
450
|
+
<textarea id="rd-chat-input" rows="2" data-i18n-ph="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)" placeholder="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)"></textarea>
|
|
451
|
+
<div class="rd-chat-tools">
|
|
452
|
+
<button id="rd-chat-attach" class="ghost" data-i18n-title="添加附件" title="添加附件" data-i18n-aria="添加附件" aria-label="添加附件"><svg class="ico" aria-hidden="true"><use href="#i-plus"></use></svg></button>
|
|
453
|
+
<button id="rd-chat-voice" class="ghost hidden" data-i18n-title="语音输入(口述转文字填入输入框)" title="语音输入(口述转文字填入输入框)" data-i18n-aria="语音输入" aria-label="语音输入"><svg class="ico" aria-hidden="true"><use href="#i-mic"></use></svg></button>
|
|
454
|
+
<span id="rd-chat-att-list" class="rd-att-list"></span>
|
|
455
|
+
<span id="rd-chat-hint" class="rd-hint"></span>
|
|
456
|
+
<button id="rd-chat-send" class="primary round" data-i18n-title="发送" title="发送" data-i18n-aria="发送" aria-label="发送"><svg class="ico" aria-hidden="true"><use href="#i-arrow-up"></use></svg></button>
|
|
457
|
+
</div>
|
|
458
|
+
<input id="rd-chat-file" type="file" multiple accept=".png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.txt,.md,.markdown,.csv,.json,.log,.py,.js,.ts,.html,.css,.xml,.yml,.yaml,.toml,.pdf,.docx,.xlsx,.pptx" class="hidden" />
|
|
459
|
+
</div>
|
|
460
|
+
</div>
|
|
461
|
+
</div>
|
|
462
|
+
<div id="rd-pane-hive" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-hive" data-pane="hive">
|
|
463
|
+
<div id="rd-hive" class="rd-hive hidden">
|
|
464
|
+
<div class="sec-title"><svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg><span data-i18n="蜂巢工作台">蜂巢工作台</span><span id="rd-hive-sub" class="tag"></span><button class="hhelp" data-help-topic="serial" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button></div>
|
|
465
|
+
<div id="rd-hive-cells" class="hive-cells"></div>
|
|
466
|
+
</div>
|
|
467
|
+
<!-- 运行中指挥信箱:renderDirector 只认活跃 run,渲染时摘掉 hidden;
|
|
468
|
+
与检查器的迷你指挥坞不同屏(详情上下文检查器让位),这里是带附件的完整版 -->
|
|
469
|
+
<div id="rd-direct" class="rd-direct hidden">
|
|
470
|
+
<div class="sec-title"><svg class="ico" aria-hidden="true"><use href="#i-baton"></use></svg><span data-i18n="运行中指挥">运行中指挥</span></div>
|
|
471
|
+
<div id="rd-msgs" class="rd-msgs"></div>
|
|
472
|
+
<div class="rd-composer">
|
|
473
|
+
<textarea id="rd-msg-input" rows="2" data-i18n-ph="补充说明或纠偏,将随下一条智能体步骤下达;可直接粘贴截图" placeholder="补充说明或纠偏,将随下一条智能体步骤下达;可直接粘贴截图"></textarea>
|
|
474
|
+
<div class="rd-composer-bar">
|
|
475
|
+
<button id="rd-attach-btn" class="ghost" data-i18n="附件">附件</button>
|
|
476
|
+
<span id="rd-attach-list" class="rd-att-list"></span>
|
|
477
|
+
<span id="rd-direct-hint" class="rd-hint"></span>
|
|
478
|
+
<button id="rd-send-btn" class="primary" data-i18n="下达指令">下达指令</button>
|
|
479
|
+
</div>
|
|
480
|
+
<input id="rd-attach-file" type="file" multiple accept=".png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.txt,.md,.markdown,.csv,.json,.log,.py,.js,.ts,.html,.css,.xml,.yml,.yaml,.toml,.pdf,.docx,.xlsx,.pptx" class="hidden" />
|
|
481
|
+
</div>
|
|
482
|
+
</div>
|
|
483
|
+
</div>
|
|
484
|
+
<div id="rd-pane-steps" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-steps" data-pane="steps">
|
|
485
|
+
<div id="rd-plan" class="hidden"></div>
|
|
486
|
+
<div id="rd-steps" class="steps"></div>
|
|
487
|
+
</div>
|
|
488
|
+
<div id="rd-pane-result" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-result" data-pane="result">
|
|
489
|
+
<div id="rd-outcome" class="rd-outcome hidden"></div>
|
|
490
|
+
<h3 data-i18n="报告" class="sec-title">报告</h3>
|
|
491
|
+
<div id="rd-report" class="report"></div>
|
|
492
|
+
<div id="rd-arts" class="rd-arts hidden"></div>
|
|
493
|
+
</div>
|
|
494
|
+
<div id="rd-pane-git" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-git" data-pane="git">
|
|
495
|
+
<div id="rd-git" class="rd-git hidden"></div>
|
|
496
|
+
</div>
|
|
497
|
+
<div id="rd-pane-bible" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-bible" data-pane="bible">
|
|
498
|
+
<div id="rd-bible" class="rd-bible hidden"></div>
|
|
499
|
+
</div>
|
|
500
|
+
<div id="rd-pane-bookmeta" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-bookmeta" data-pane="bookmeta">
|
|
501
|
+
<div id="rd-bookmeta" class="rd-bookmeta hidden"></div>
|
|
502
|
+
</div>
|
|
503
|
+
</div>
|
|
504
|
+
</div>
|
|
505
|
+
</div>
|
|
506
|
+
|
|
507
|
+
<!-- 自动化:定时任务 + 模板 -->
|
|
508
|
+
<div id="sub-automation" class="subpage hidden">
|
|
509
|
+
<div class="panel wide">
|
|
510
|
+
<div class="panel-head">
|
|
511
|
+
<h2 data-i18n="自动化">自动化</h2>
|
|
512
|
+
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
513
|
+
<div class="actions">
|
|
514
|
+
<button id="btn-auto-refresh" class="ghost small" title="重新拉取任务列表" data-i18n-title="重新拉取任务列表"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span data-i18n="刷新">刷新</span></button>
|
|
515
|
+
<button id="btn-auto-new" class="primary small" title="创建一个按计划自动运行的任务" data-i18n-title="创建一个按计划自动运行的任务"><span data-i18n="新建定时任务">新建定时任务</span></button>
|
|
516
|
+
</div>
|
|
517
|
+
</div>
|
|
518
|
+
<p data-i18n="按计划自动运行任务,或在需要时随时执行。" class="hint">按计划自动运行任务,或在需要时随时执行。</p>
|
|
519
|
+
<div id="auto-filter" class="seg" role="group" aria-label="任务筛选" data-i18n-aria="任务筛选">
|
|
520
|
+
<button data-i18n="全部" class="seg-btn active" data-f="all">全部</button>
|
|
521
|
+
<button data-i18n="进行中" class="seg-btn" data-f="on">进行中</button>
|
|
522
|
+
<button data-i18n="已停用" class="seg-btn" data-f="off">已停用</button>
|
|
523
|
+
</div>
|
|
524
|
+
<div id="auto-list" class="cards"></div>
|
|
525
|
+
<h3 data-i18n="定时任务模板" class="sec-title">定时任务模板</h3>
|
|
526
|
+
<div id="auto-tpl" class="cards auto-tpl-grid"></div>
|
|
527
|
+
</div>
|
|
528
|
+
</div>
|
|
529
|
+
|
|
530
|
+
<!-- 禅道:Bug 自动扫描修复 -->
|
|
531
|
+
<div id="sub-zentao" class="subpage hidden">
|
|
532
|
+
<div class="panel wide">
|
|
533
|
+
<div class="panel-head">
|
|
534
|
+
<h2 data-i18n="禅道 Bug 自动修复">禅道 Bug 自动修复</h2>
|
|
535
|
+
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
536
|
+
<div class="actions">
|
|
537
|
+
<button id="btn-zentao-test" class="ghost small" title="用当前表单里的连接信息试连禅道" data-i18n-title="用当前表单里的连接信息试连禅道"><span data-i18n="测试连接">测试连接</span></button>
|
|
538
|
+
<button id="btn-zentao-scan" class="primary small" title="立刻扫一遍激活 Bug 并对账回写" data-i18n-title="立刻扫一遍激活 Bug 并对账回写"><span data-i18n="立即扫描">立即扫描</span></button>
|
|
539
|
+
</div>
|
|
540
|
+
</div>
|
|
541
|
+
<p data-i18n="定时扫描禅道多个产品的激活 Bug:先按模块路由/AI 排查定责(前端/后端/双端/非我方),我方端自动创建代码修复任务(实现→验证→评审→修复),修完自动合并并 resolve 或转派对应负责人;测试指错人也按排查结论改派。" class="hint">定时扫描禅道多个产品的激活 Bug:先按模块路由/AI 排查定责(前端/后端/双端/非我方),我方端自动创建代码修复任务(实现→验证→评审→修复),修完自动合并并 resolve 或转派对应负责人;测试指错人也按排查结论改派。</p>
|
|
542
|
+
<div id="zentao-status" class="hint zt-status"></div>
|
|
543
|
+
<h3 data-i18n="禅道连接" class="sec-title">禅道连接</h3>
|
|
544
|
+
<div class="zt-grid">
|
|
545
|
+
<label data-i18n="禅道地址">禅道地址</label><input id="zt-base-url" type="text" placeholder="https://zentao.example.com(子目录部署带子目录)" data-i18n-ph="https://zentao.example.com(子目录部署带子目录)">
|
|
546
|
+
<label data-i18n="账号">账号</label><input id="zt-account" type="text" placeholder="建议建专用账号(如 codebee)收 Bug" data-i18n-ph="建议建专用账号(如 codebee)收 Bug">
|
|
547
|
+
<label data-i18n="密码">密码</label><input id="zt-password" type="password" placeholder="" autocomplete="new-password">
|
|
548
|
+
</div>
|
|
549
|
+
<h3 data-i18n="自动化" class="sec-title">自动化</h3>
|
|
550
|
+
<div class="zt-grid zt-grid-toggles">
|
|
551
|
+
<label class="toggle" title="模块路由没命中时,用 AI 读 Bug 描述判端(前端/后端/双端/非我方);关掉则未命中模块的 Bug 留人工" data-i18n-title="模块路由没命中时,用 AI 读 Bug 描述判端(前端/后端/双端/非我方);关掉则未命中模块的 Bug 留人工"><input id="zt-triageai" type="checkbox"><span data-i18n="AI 排查兜底">AI 排查兜底</span></label>
|
|
552
|
+
<label class="toggle" title="修复任务评审通过后,自动到禅道 resolve(fixed)并回评论" data-i18n-title="修复任务评审通过后,自动到禅道 resolve(fixed)并回评论"><input id="zt-autoresolve" type="checkbox"><span data-i18n="自动 resolve Bug">自动 resolve Bug</span></label>
|
|
553
|
+
<label class="toggle" title="把任务分支自动合并回基线分支(需配置基线分支;合并失败不 resolve 不转派,留人工)" data-i18n-title="把任务分支自动合并回基线分支(需配置基线分支;合并失败不 resolve 不转派,留人工)"><input id="zt-automerge" type="checkbox"><span data-i18n="自动合并代码">自动合并代码</span></label>
|
|
554
|
+
<label class="toggle" title="按下面的间隔定时扫描;关掉后仍可手动「立即扫描」" data-i18n-title="按下面的间隔定时扫描;关掉后仍可手动「立即扫描」"><input id="zt-poll" type="checkbox"><span data-i18n="定时扫描">定时扫描</span></label>
|
|
555
|
+
<label data-i18n="扫描间隔(小时)">扫描间隔(小时)</label><input id="zt-interval" type="number" min="1" max="168" step="1">
|
|
556
|
+
</div>
|
|
557
|
+
<div class="ops"><button id="btn-zentao-save" class="primary small"><span data-i18n="保存配置">保存配置</span></button></div>
|
|
558
|
+
<h3 data-i18n="产品档案" class="sec-title">产品档案</h3>
|
|
559
|
+
<p data-i18n="每个产品一份档案:我方端(自动修)、两端仓库与负责人、模块路由(模块 → 端/人,排查优先级最高)。" class="hint">每个产品一份档案:我方端(自动修)、两端仓库与负责人、模块路由(模块 → 端/人,排查优先级最高)。</p>
|
|
560
|
+
<div id="zt-profiles" class="cards"></div>
|
|
561
|
+
<div class="ops">
|
|
562
|
+
<button id="btn-zentao-fetchcat" class="ghost small" title="从禅道拉产品与账号清单:产品 ID、负责人变下拉选择(需连接可用)" data-i18n-title="从禅道拉产品与账号清单:产品 ID、负责人变下拉选择(需连接可用)"><span data-i18n="拉取清单">拉取清单</span></button>
|
|
563
|
+
<button id="btn-zentao-addprofile" class="ghost small"><span data-i18n="+ 添加产品">+ 添加产品</span></button>
|
|
564
|
+
</div>
|
|
565
|
+
<datalist id="zt-users"></datalist>
|
|
566
|
+
<h3 data-i18n="修复记录" class="sec-title">修复记录</h3>
|
|
567
|
+
<div id="zentao-claims"></div>
|
|
568
|
+
</div>
|
|
569
|
+
</div>
|
|
570
|
+
|
|
571
|
+
<!-- 使用统计 -->
|
|
572
|
+
<div id="sub-usage" class="subpage hidden">
|
|
573
|
+
<div class="panel wide">
|
|
574
|
+
<div class="panel-head">
|
|
575
|
+
<h2 data-i18n="使用统计">使用统计<span class="badge2" data-i18n="应用用量">应用用量</span></h2>
|
|
576
|
+
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
577
|
+
<div class="actions" id="usage-ranges">
|
|
578
|
+
<div class="seg" role="group" aria-label="时间范围" data-i18n-aria="时间范围">
|
|
579
|
+
<button data-i18n="今天" class="seg-btn active" data-days="1">今天</button>
|
|
580
|
+
<button data-i18n="近 7 天" class="seg-btn" data-days="7">近 7 天</button>
|
|
581
|
+
<button data-i18n="近 30 天" class="seg-btn" data-days="30">近 30 天</button>
|
|
582
|
+
<button data-i18n="全部" class="seg-btn" data-days="0">全部</button>
|
|
583
|
+
</div>
|
|
584
|
+
<button id="btn-usage-refresh" class="icon-btn" title="重新拉取" aria-label="重新拉取" data-i18n-aria="重新拉取" data-i18n-title="重新拉取">
|
|
585
|
+
<svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg>
|
|
586
|
+
</button>
|
|
587
|
+
</div>
|
|
588
|
+
</div>
|
|
589
|
+
<p data-i18n="统计所有真实 LLM 调用:编排各角色步骤(规划/实现/评审/修订…)、编排者直连 API、连通性冒烟与 AI 修复;mock 智能体与本地验证不计入。" class="hint">统计所有真实 LLM 调用:编排各角色步骤(规划/实现/评审/修订…)、编排者直连 API、连通性冒烟与 AI 修复;mock 智能体与本地验证不计入。</p>
|
|
590
|
+
<div id="usage-kpis" class="usage-kpis"><p data-i18n="加载中…" class="hint">加载中…</p></div>
|
|
591
|
+
<div id="usage-note"></div>
|
|
592
|
+
<h3 data-i18n="Token 活动" class="sec-title">Token 活动</h3>
|
|
593
|
+
<div class="usage-heat-head">
|
|
594
|
+
<div class="usage-heat-scale" aria-hidden="true"><span data-i18n="少">少</span><i class="hs0"></i><i class="hs1"></i><i class="hs2"></i><i class="hs3"></i><i class="hs4"></i><span data-i18n="多">多</span></div>
|
|
595
|
+
<div class="seg" id="usage-heat-modes" role="group" aria-label="热力图粒度" data-i18n-aria="热力图粒度">
|
|
596
|
+
<button data-i18n="每日" class="seg-btn active" data-heat="day">每日</button>
|
|
597
|
+
<button data-i18n="每周" class="seg-btn" data-heat="week">每周</button>
|
|
598
|
+
<button data-i18n="累计" class="seg-btn" data-heat="total">累计</button>
|
|
599
|
+
</div>
|
|
600
|
+
</div>
|
|
601
|
+
<div id="usage-heat"></div>
|
|
602
|
+
<h3 data-i18n="每日 Token 趋势图" class="sec-title">每日 Token 趋势图</h3>
|
|
603
|
+
<div id="usage-trend"></div>
|
|
604
|
+
<h3 data-i18n="模型用量" class="sec-title">模型用量</h3>
|
|
605
|
+
<div id="usage-models"></div>
|
|
606
|
+
<div id="usage-dims"></div>
|
|
607
|
+
<h3 data-i18n="最近调用" class="sec-title">最近调用</h3>
|
|
608
|
+
<div id="usage-recent" class="list"></div>
|
|
609
|
+
</div>
|
|
610
|
+
</div>
|
|
611
|
+
|
|
612
|
+
<!-- 智能体管理 -->
|
|
613
|
+
<div id="sub-agents" class="subpage hidden">
|
|
614
|
+
<div class="panel wide">
|
|
615
|
+
<div class="panel-head">
|
|
616
|
+
<h2 data-i18n="智能体目录">智能体目录</h2>
|
|
617
|
+
<button class="hhelp" data-help-topic="models" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
618
|
+
<div class="actions">
|
|
619
619
|
<button data-i18n="写入推荐默认模型(可选)" id="btn-catalog-autobind" class="ghost">写入推荐默认模型(可选)</button>
|
|
620
|
-
<button data-i18n="重新加载 catalog" id="btn-reload-catalog" class="ghost">重新加载 catalog</button>
|
|
621
|
-
<button data-i18n="恢复默认 catalog" id="btn-reset-catalog" class="ghost">恢复默认 catalog</button>
|
|
622
|
-
</div>
|
|
623
|
-
</div>
|
|
620
|
+
<button data-i18n="重新加载 catalog" id="btn-reload-catalog" class="ghost">重新加载 catalog</button>
|
|
621
|
+
<button data-i18n="恢复默认 catalog" id="btn-reset-catalog" class="ghost">恢复默认 catalog</button>
|
|
622
|
+
</div>
|
|
623
|
+
</div>
|
|
624
624
|
<p class="hint"><span data-i18n="这里管理本机 CLI 的安装、版本、启停、冒烟测试和 CLI 自己的默认模型。CodeBee 运行任务时默认自动推荐厂商与模型,无需绑定;只有需要固定厂商、模型或降级顺序时,才到「模型调度(可选)」页指定。安装命令不明的条目可直接编辑">这里管理本机 CLI 的安装、版本、启停、冒烟测试和 CLI 自己的默认模型。CodeBee 运行任务时默认自动推荐厂商与模型,无需绑定;只有需要固定厂商、模型或降级顺序时,才到「模型调度(可选)」页指定。安装命令不明的条目可直接编辑</span> <code>data/catalog.json</code> <span data-i18n="后点重新加载。">后点重新加载。</span></p>
|
|
625
|
-
<h3 data-i18n="已安装" class="sec-title">已安装</h3>
|
|
626
|
-
<div id="ag-installed" class="cards"></div>
|
|
627
|
-
<h3 data-i18n="可安装" class="sec-title">可安装</h3>
|
|
628
|
-
<div id="ag-installable" class="cards"></div>
|
|
629
|
-
</div>
|
|
630
|
-
</div>
|
|
631
|
-
|
|
632
|
-
<!-- 模型接入 -->
|
|
633
|
-
<div id="sub-models" class="subpage hidden">
|
|
634
|
-
<div class="panel wide">
|
|
635
|
-
<div class="prov-layout">
|
|
636
|
-
<aside class="prov-side">
|
|
637
|
-
<div class="prov-side-head">
|
|
638
|
-
<span data-i18n="供应商">供应商</span>
|
|
639
|
-
<button class="hhelp" data-help-topic="models" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
640
|
-
<span class="prov-side-ops">
|
|
641
|
-
<button id="btn-refresh-models" class="icon-btn" title="全部重新拉取模型列表" aria-label="全部重新拉取模型列表" data-i18n-aria="全部重新拉取模型列表" data-i18n-title="全部重新拉取模型列表"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg></button>
|
|
642
|
-
<button data-i18n="导入" id="btn-import" class="ghost small" title="从本机各 AI 工具导入供应商" data-i18n-title="从本机各 AI 工具导入供应商">导入</button>
|
|
643
|
-
<button data-i18n="+" id="btn-add-provider" class="ghost small" title="手动添加供应商" data-i18n-title="手动添加供应商">+</button>
|
|
644
|
-
</span>
|
|
645
|
-
</div>
|
|
646
|
-
<input id="prov-search" class="side-search" type="search" placeholder="搜索供应商…" autocomplete="off" data-i18n-ph="搜索供应商…">
|
|
647
|
-
<div id="prov-list"></div>
|
|
648
|
-
</aside>
|
|
649
|
-
<div class="prov-detail" id="prov-detail"></div>
|
|
650
|
-
</div>
|
|
651
|
-
</div>
|
|
652
|
-
</div>
|
|
653
|
-
|
|
625
|
+
<h3 data-i18n="已安装" class="sec-title">已安装</h3>
|
|
626
|
+
<div id="ag-installed" class="cards"></div>
|
|
627
|
+
<h3 data-i18n="可安装" class="sec-title">可安装</h3>
|
|
628
|
+
<div id="ag-installable" class="cards"></div>
|
|
629
|
+
</div>
|
|
630
|
+
</div>
|
|
631
|
+
|
|
632
|
+
<!-- 模型接入 -->
|
|
633
|
+
<div id="sub-models" class="subpage hidden">
|
|
634
|
+
<div class="panel wide">
|
|
635
|
+
<div class="prov-layout">
|
|
636
|
+
<aside class="prov-side">
|
|
637
|
+
<div class="prov-side-head">
|
|
638
|
+
<span data-i18n="供应商">供应商</span>
|
|
639
|
+
<button class="hhelp" data-help-topic="models" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
640
|
+
<span class="prov-side-ops">
|
|
641
|
+
<button id="btn-refresh-models" class="icon-btn" title="全部重新拉取模型列表" aria-label="全部重新拉取模型列表" data-i18n-aria="全部重新拉取模型列表" data-i18n-title="全部重新拉取模型列表"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg></button>
|
|
642
|
+
<button data-i18n="导入" id="btn-import" class="ghost small" title="从本机各 AI 工具导入供应商" data-i18n-title="从本机各 AI 工具导入供应商">导入</button>
|
|
643
|
+
<button data-i18n="+" id="btn-add-provider" class="ghost small" title="手动添加供应商" data-i18n-title="手动添加供应商">+</button>
|
|
644
|
+
</span>
|
|
645
|
+
</div>
|
|
646
|
+
<input id="prov-search" class="side-search" type="search" placeholder="搜索供应商…" autocomplete="off" data-i18n-ph="搜索供应商…">
|
|
647
|
+
<div id="prov-list"></div>
|
|
648
|
+
</aside>
|
|
649
|
+
<div class="prov-detail" id="prov-detail"></div>
|
|
650
|
+
</div>
|
|
651
|
+
</div>
|
|
652
|
+
</div>
|
|
653
|
+
|
|
654
654
|
<!-- 模型调度(可选) -->
|
|
655
|
-
<div id="sub-bindings" class="subpage hidden">
|
|
656
|
-
<div class="panel wide">
|
|
655
|
+
<div id="sub-bindings" class="subpage hidden">
|
|
656
|
+
<div class="panel wide">
|
|
657
657
|
<div class="panel-head"><h2 data-i18n="模型调度(可选)">模型调度(可选)</h2>
|
|
658
|
-
<button class="hhelp" data-help-topic="models" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
658
|
+
<button class="hhelp" data-help-topic="models" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
659
659
|
<button id="btn-autobind" class="ghost small" onclick="autoBindAll()" data-i18n="生成推荐指定方案">生成推荐指定方案</button>
|
|
660
|
-
<button id="btn-saveall-bind" class="ghost small hidden" onclick="saveAllBindings()" data-i18n="全部保存">全部保存</button>
|
|
661
|
-
</div>
|
|
660
|
+
<button id="btn-saveall-bind" class="ghost small hidden" onclick="saveAllBindings()" data-i18n="全部保存">全部保存</button>
|
|
661
|
+
</div>
|
|
662
662
|
<p data-i18n="默认无需绑定:CodeBee 会按任务类型、步骤角色、难度、成本、协议兼容性和健康状态动态推荐厂商与模型,并在无可用供应商时回落 CLI 自身配置。只有需要固定厂商、模型或跨厂商降级顺序时才在这里指定;显式指定会覆盖自动推荐,但不改写 CLI 全局配置。" class="hint">默认无需绑定:CodeBee 会按任务类型、步骤角色、难度、成本、协议兼容性和健康状态动态推荐厂商与模型,并在无可用供应商时回落 CLI 自身配置。只有需要固定厂商、模型或跨厂商降级顺序时才在这里指定;显式指定会覆盖自动推荐,但不改写 CLI 全局配置。</p>
|
|
663
|
-
<div id="binding-list" class="cards"></div>
|
|
664
|
-
</div>
|
|
665
|
-
</div>
|
|
666
|
-
|
|
667
|
-
<!-- 经验库 -->
|
|
668
|
-
<div id="sub-skills" class="subpage hidden">
|
|
669
|
-
<div class="panel wide">
|
|
670
|
-
<div class="panel-head"><h2 data-i18n="经验库">经验库</h2>
|
|
671
|
-
<button class="hhelp" data-help-topic="features" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button></div>
|
|
672
|
-
<p class="hint"><span data-i18n="系统自己的经验沉淀:">系统自己的经验沉淀:</span><b data-i18n="内置规范包">内置规范包</b><span data-i18n="(如七猫签约标准,自动注入小说类任务的规划与评审提示词) 与">(如七猫签约标准,自动注入小说类任务的规划与评审提示词)
|
|
673
|
-
与</span><b data-i18n="运行中自动学到的教训">运行中自动学到的教训</b><span data-i18n="(每次任务结束由编排者复盘本次评审暴露的问题,去重沉淀,下次同类任务自动带上)——越跑越好,无需人工维护。">(每次任务结束由编排者复盘本次评审暴露的问题,去重沉淀,下次同类任务自动带上)——越跑越好,无需人工维护。</span></p>
|
|
674
|
-
<h3 data-i18n="内置规范包" class="sec-title">内置规范包</h3>
|
|
675
|
-
<div id="skill-packs" class="cards"></div>
|
|
676
|
-
<h3 class="sec-title"><span data-i18n="自动沉淀的教训">自动沉淀的教训</span> <span class="tag" id="skill-count"></span></h3>
|
|
677
|
-
<div class="cat-chips" id="skill-cat-chips"></div>
|
|
678
|
-
<div id="skill-lessons" class="cards"></div>
|
|
679
|
-
</div>
|
|
680
|
-
</div>
|
|
681
|
-
|
|
682
|
-
<!-- 知识库:运行产出自动整理的知识条目 + 个人知识管理 -->
|
|
683
|
-
<div id="sub-knowledge" class="subpage hidden">
|
|
684
|
-
<div class="panel wide">
|
|
685
|
-
<div class="panel-head"><h2 data-i18n="知识库">知识库</h2>
|
|
686
|
-
<button class="ghost small" onclick="kbFormOpen(null)"><svg class="ico" aria-hidden="true"><use href="#i-plus"></use></svg><span data-i18n="新建条目">新建条目</span></button></div>
|
|
687
|
-
<p class="hint"><span data-i18n="运行产出自动整理成的可复用知识:">运行产出自动整理成的可复用知识:</span><span data-i18n="任务结束由编排者从产出材料自动提炼,默认直接转正参与注入;也可以手动新建——同时是你自己的知识管理库。条目按任务类型与相关性自动注入同类任务的规划与评审提示词。">任务结束由编排者从产出材料自动提炼,默认直接转正参与注入;也可以手动新建——同时是你自己的知识管理库。条目按任务类型与相关性自动注入同类任务的规划与评审提示词。</span></p>
|
|
688
|
-
<div class="kb-toolbar">
|
|
689
|
-
<input id="kb-search" data-i18n-ph="搜索标题 / 正文 / 标签" placeholder="搜索标题 / 正文 / 标签" oninput="kbSearch(this.value)">
|
|
690
|
-
<div class="cat-chips" id="kb-status-chips"></div>
|
|
691
|
-
</div>
|
|
692
|
-
<div class="cat-chips" id="kb-tag-chips"></div>
|
|
693
|
-
<h3 class="sec-title"><span data-i18n="知识条目">知识条目</span> <span class="tag" id="kb-count"></span></h3>
|
|
694
|
-
<div id="kb-cards" class="cards"></div>
|
|
695
|
-
</div>
|
|
696
|
-
</div>
|
|
697
|
-
|
|
698
|
-
<!-- 插件市场:经验包一键安装 + 外部生态目录 -->
|
|
699
|
-
<div id="sub-market" class="subpage hidden">
|
|
700
|
-
<div class="panel wide">
|
|
701
|
-
<div class="panel-head">
|
|
702
|
-
<h2 data-i18n="插件市场">插件市场</h2>
|
|
703
|
-
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
704
|
-
<span id="mk-count" class="pm-count"></span>
|
|
705
|
-
</div>
|
|
706
|
-
<p data-i18n="用经验包为 CodeBee 扩展写作与工程守则,一键装进经验库。安装即生效,无需手动调用:运行任务时,经验库按插件标注的「适用」自动把内容注入该类任务的提示词;可随时到「经验库」页启用、停用或卸载。" class="hint">用经验包为 CodeBee 扩展写作与工程守则,一键装进经验库。安装即生效,无需手动调用:运行任务时,经验库按插件标注的「适用」自动把内容注入该类任务的提示词;可随时到「经验库」页启用、停用或卸载。</p>
|
|
707
|
-
<div id="mk-view" class="seg mk-view" role="group" aria-label="市场视图" data-i18n-aria="市场视图">
|
|
708
|
-
<button data-i18n="经验包" class="seg-btn active" data-v="local">经验包</button>
|
|
709
|
-
<button data-i18n="外部目录" class="seg-btn" data-v="remote">外部目录</button>
|
|
710
|
-
</div>
|
|
711
|
-
<div id="mk-local">
|
|
712
|
-
<div class="pm-tools mk-tools">
|
|
713
|
-
<input id="mk-search" type="search" placeholder="搜索插件…" data-i18n-ph="搜索插件…" autocomplete="off">
|
|
714
|
-
<select id="mk-cat" aria-label="分类" data-i18n-aria="分类"></select>
|
|
715
|
-
<div id="mk-state" class="seg" role="group" aria-label="安装状态" data-i18n-aria="安装状态">
|
|
716
|
-
<button data-i18n="全部" class="seg-btn active" data-s="all">全部</button>
|
|
717
|
-
<button data-i18n="已安装" class="seg-btn" data-s="installed">已安装</button>
|
|
718
|
-
<button data-i18n="未安装" class="seg-btn" data-s="not">未安装</button>
|
|
719
|
-
</div>
|
|
720
|
-
</div>
|
|
721
|
-
<div id="mk-grid" class="cards mk-grid"></div>
|
|
722
|
-
</div>
|
|
723
|
-
<div id="mk-remote" class="hidden">
|
|
724
|
-
<p data-i18n="外部目录聚合公开生态:ZCode、Anthropic、Anthropic 官方技能、社区多端技能库(Codex / Gemini 兼容)与 ClawHub。本平台只注入纯技能内容(文档型);插件包里的脚本、钩子或 MCP 组件会在安装时自动剥离并告知,绝不会被写入或执行。装好的技能不会单独「运行」,而是作为经验内容自动注入相关任务的提示词。" class="hint">外部目录聚合公开生态:ZCode、Anthropic、Anthropic 官方技能、社区多端技能库(Codex / Gemini 兼容)与 ClawHub。本平台只注入纯技能内容(文档型);插件包里的脚本、钩子或 MCP 组件会在安装时自动剥离并告知,绝不会被写入或执行。装好的技能不会单独「运行」,而是作为经验内容自动注入相关任务的提示词。</p>
|
|
725
|
-
<div class="pm-tools mk-tools">
|
|
726
|
-
<input id="mkr-search" type="search" placeholder="搜索外部插件…" data-i18n-ph="搜索外部插件…" autocomplete="off">
|
|
727
|
-
<button id="mkr-search-btn" class="ghost small" title="搜索" data-i18n-title="搜索" aria-label="搜索" data-i18n-aria="搜索"><svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg><span data-i18n="搜索">搜索</span></button>
|
|
728
|
-
<select id="mkr-source" aria-label="来源" data-i18n-aria="来源"></select>
|
|
729
|
-
<button id="mkr-refresh" class="ghost small" data-i18n="拉取更新">拉取更新</button>
|
|
730
|
-
</div>
|
|
731
|
-
<div id="mkr-meta" class="hint mkr-meta"></div>
|
|
732
|
-
<div id="mkr-grid" class="cards mk-grid"></div>
|
|
733
|
-
<div id="mkr-more" class="mkr-more hidden">
|
|
734
|
-
<span id="mkr-more-txt" class="hint"></span>
|
|
735
|
-
<button id="mkr-more-btn" class="ghost small" data-i18n="加载更多">加载更多</button>
|
|
736
|
-
</div>
|
|
737
|
-
<div id="mkr-sentinel" class="mkr-sentinel"></div>
|
|
738
|
-
</div>
|
|
739
|
-
</div>
|
|
740
|
-
</div>
|
|
741
|
-
|
|
742
|
-
<!-- 编排设置 -->
|
|
743
|
-
<div id="sub-orch" class="subpage hidden">
|
|
744
|
-
<div class="panel wide">
|
|
745
|
-
<div class="panel-head"><h2 data-i18n="编排设置">编排设置</h2></div>
|
|
746
|
-
<p data-i18n="「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。" class="hint">「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。</p>
|
|
747
|
-
<div id="orch-config"></div>
|
|
748
|
-
<h3 data-i18n="运行设置" class="sec-title">运行设置</h3>
|
|
663
|
+
<div id="binding-list" class="cards"></div>
|
|
664
|
+
</div>
|
|
665
|
+
</div>
|
|
666
|
+
|
|
667
|
+
<!-- 经验库 -->
|
|
668
|
+
<div id="sub-skills" class="subpage hidden">
|
|
669
|
+
<div class="panel wide">
|
|
670
|
+
<div class="panel-head"><h2 data-i18n="经验库">经验库</h2>
|
|
671
|
+
<button class="hhelp" data-help-topic="features" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button></div>
|
|
672
|
+
<p class="hint"><span data-i18n="系统自己的经验沉淀:">系统自己的经验沉淀:</span><b data-i18n="内置规范包">内置规范包</b><span data-i18n="(如七猫签约标准,自动注入小说类任务的规划与评审提示词) 与">(如七猫签约标准,自动注入小说类任务的规划与评审提示词)
|
|
673
|
+
与</span><b data-i18n="运行中自动学到的教训">运行中自动学到的教训</b><span data-i18n="(每次任务结束由编排者复盘本次评审暴露的问题,去重沉淀,下次同类任务自动带上)——越跑越好,无需人工维护。">(每次任务结束由编排者复盘本次评审暴露的问题,去重沉淀,下次同类任务自动带上)——越跑越好,无需人工维护。</span></p>
|
|
674
|
+
<h3 data-i18n="内置规范包" class="sec-title">内置规范包</h3>
|
|
675
|
+
<div id="skill-packs" class="cards"></div>
|
|
676
|
+
<h3 class="sec-title"><span data-i18n="自动沉淀的教训">自动沉淀的教训</span> <span class="tag" id="skill-count"></span></h3>
|
|
677
|
+
<div class="cat-chips" id="skill-cat-chips"></div>
|
|
678
|
+
<div id="skill-lessons" class="cards"></div>
|
|
679
|
+
</div>
|
|
680
|
+
</div>
|
|
681
|
+
|
|
682
|
+
<!-- 知识库:运行产出自动整理的知识条目 + 个人知识管理 -->
|
|
683
|
+
<div id="sub-knowledge" class="subpage hidden">
|
|
684
|
+
<div class="panel wide">
|
|
685
|
+
<div class="panel-head"><h2 data-i18n="知识库">知识库</h2>
|
|
686
|
+
<button class="ghost small" onclick="kbFormOpen(null)"><svg class="ico" aria-hidden="true"><use href="#i-plus"></use></svg><span data-i18n="新建条目">新建条目</span></button></div>
|
|
687
|
+
<p class="hint"><span data-i18n="运行产出自动整理成的可复用知识:">运行产出自动整理成的可复用知识:</span><span data-i18n="任务结束由编排者从产出材料自动提炼,默认直接转正参与注入;也可以手动新建——同时是你自己的知识管理库。条目按任务类型与相关性自动注入同类任务的规划与评审提示词。">任务结束由编排者从产出材料自动提炼,默认直接转正参与注入;也可以手动新建——同时是你自己的知识管理库。条目按任务类型与相关性自动注入同类任务的规划与评审提示词。</span></p>
|
|
688
|
+
<div class="kb-toolbar">
|
|
689
|
+
<input id="kb-search" data-i18n-ph="搜索标题 / 正文 / 标签" placeholder="搜索标题 / 正文 / 标签" oninput="kbSearch(this.value)">
|
|
690
|
+
<div class="cat-chips" id="kb-status-chips"></div>
|
|
691
|
+
</div>
|
|
692
|
+
<div class="cat-chips" id="kb-tag-chips"></div>
|
|
693
|
+
<h3 class="sec-title"><span data-i18n="知识条目">知识条目</span> <span class="tag" id="kb-count"></span></h3>
|
|
694
|
+
<div id="kb-cards" class="cards"></div>
|
|
695
|
+
</div>
|
|
696
|
+
</div>
|
|
697
|
+
|
|
698
|
+
<!-- 插件市场:经验包一键安装 + 外部生态目录 -->
|
|
699
|
+
<div id="sub-market" class="subpage hidden">
|
|
700
|
+
<div class="panel wide">
|
|
701
|
+
<div class="panel-head">
|
|
702
|
+
<h2 data-i18n="插件市场">插件市场</h2>
|
|
703
|
+
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
704
|
+
<span id="mk-count" class="pm-count"></span>
|
|
705
|
+
</div>
|
|
706
|
+
<p data-i18n="用经验包为 CodeBee 扩展写作与工程守则,一键装进经验库。安装即生效,无需手动调用:运行任务时,经验库按插件标注的「适用」自动把内容注入该类任务的提示词;可随时到「经验库」页启用、停用或卸载。" class="hint">用经验包为 CodeBee 扩展写作与工程守则,一键装进经验库。安装即生效,无需手动调用:运行任务时,经验库按插件标注的「适用」自动把内容注入该类任务的提示词;可随时到「经验库」页启用、停用或卸载。</p>
|
|
707
|
+
<div id="mk-view" class="seg mk-view" role="group" aria-label="市场视图" data-i18n-aria="市场视图">
|
|
708
|
+
<button data-i18n="经验包" class="seg-btn active" data-v="local">经验包</button>
|
|
709
|
+
<button data-i18n="外部目录" class="seg-btn" data-v="remote">外部目录</button>
|
|
710
|
+
</div>
|
|
711
|
+
<div id="mk-local">
|
|
712
|
+
<div class="pm-tools mk-tools">
|
|
713
|
+
<input id="mk-search" type="search" placeholder="搜索插件…" data-i18n-ph="搜索插件…" autocomplete="off">
|
|
714
|
+
<select id="mk-cat" aria-label="分类" data-i18n-aria="分类"></select>
|
|
715
|
+
<div id="mk-state" class="seg" role="group" aria-label="安装状态" data-i18n-aria="安装状态">
|
|
716
|
+
<button data-i18n="全部" class="seg-btn active" data-s="all">全部</button>
|
|
717
|
+
<button data-i18n="已安装" class="seg-btn" data-s="installed">已安装</button>
|
|
718
|
+
<button data-i18n="未安装" class="seg-btn" data-s="not">未安装</button>
|
|
719
|
+
</div>
|
|
720
|
+
</div>
|
|
721
|
+
<div id="mk-grid" class="cards mk-grid"></div>
|
|
722
|
+
</div>
|
|
723
|
+
<div id="mk-remote" class="hidden">
|
|
724
|
+
<p data-i18n="外部目录聚合公开生态:ZCode、Anthropic、Anthropic 官方技能、社区多端技能库(Codex / Gemini 兼容)与 ClawHub。本平台只注入纯技能内容(文档型);插件包里的脚本、钩子或 MCP 组件会在安装时自动剥离并告知,绝不会被写入或执行。装好的技能不会单独「运行」,而是作为经验内容自动注入相关任务的提示词。" class="hint">外部目录聚合公开生态:ZCode、Anthropic、Anthropic 官方技能、社区多端技能库(Codex / Gemini 兼容)与 ClawHub。本平台只注入纯技能内容(文档型);插件包里的脚本、钩子或 MCP 组件会在安装时自动剥离并告知,绝不会被写入或执行。装好的技能不会单独「运行」,而是作为经验内容自动注入相关任务的提示词。</p>
|
|
725
|
+
<div class="pm-tools mk-tools">
|
|
726
|
+
<input id="mkr-search" type="search" placeholder="搜索外部插件…" data-i18n-ph="搜索外部插件…" autocomplete="off">
|
|
727
|
+
<button id="mkr-search-btn" class="ghost small" title="搜索" data-i18n-title="搜索" aria-label="搜索" data-i18n-aria="搜索"><svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg><span data-i18n="搜索">搜索</span></button>
|
|
728
|
+
<select id="mkr-source" aria-label="来源" data-i18n-aria="来源"></select>
|
|
729
|
+
<button id="mkr-refresh" class="ghost small" data-i18n="拉取更新">拉取更新</button>
|
|
730
|
+
</div>
|
|
731
|
+
<div id="mkr-meta" class="hint mkr-meta"></div>
|
|
732
|
+
<div id="mkr-grid" class="cards mk-grid"></div>
|
|
733
|
+
<div id="mkr-more" class="mkr-more hidden">
|
|
734
|
+
<span id="mkr-more-txt" class="hint"></span>
|
|
735
|
+
<button id="mkr-more-btn" class="ghost small" data-i18n="加载更多">加载更多</button>
|
|
736
|
+
</div>
|
|
737
|
+
<div id="mkr-sentinel" class="mkr-sentinel"></div>
|
|
738
|
+
</div>
|
|
739
|
+
</div>
|
|
740
|
+
</div>
|
|
741
|
+
|
|
742
|
+
<!-- 编排设置 -->
|
|
743
|
+
<div id="sub-orch" class="subpage hidden">
|
|
744
|
+
<div class="panel wide">
|
|
745
|
+
<div class="panel-head"><h2 data-i18n="编排设置">编排设置</h2></div>
|
|
746
|
+
<p data-i18n="「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。" class="hint">「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。</p>
|
|
747
|
+
<div id="orch-config"></div>
|
|
748
|
+
<h3 data-i18n="运行设置" class="sec-title">运行设置</h3>
|
|
749
749
|
<div class="field"><label data-i18n="并发保护上限(默认立即运行)">并发保护上限(默认立即运行)</label>
|
|
750
|
-
<div class="input-row">
|
|
750
|
+
<div class="input-row">
|
|
751
751
|
<input id="set-workers" type="number" min="1" max="12" value="12">
|
|
752
|
-
<button data-i18n="保存" class="ghost small" onclick="saveSettings()">保存</button>
|
|
753
|
-
</div>
|
|
752
|
+
<button data-i18n="保存" class="ghost small" onclick="saveSettings()">保存</button>
|
|
753
|
+
</div>
|
|
754
754
|
<p data-i18n="任务默认立即运行,不进入等待队列;达到上限时会明确提示稍后重试。同一任务仍单飞,自动续跑的退避等待不占执行位。" class="hint">任务默认立即运行,不进入等待队列;达到上限时会明确提示稍后重试。同一任务仍单飞,自动续跑的退避等待不占执行位。</p>
|
|
755
|
-
</div>
|
|
756
|
-
<div class="field"><label data-i18n="默认保存路径(新建任务未指定工作目录时使用;支持 ~)">默认保存路径(新建任务未指定工作目录时使用;支持 ~)</label>
|
|
757
|
-
<div class="input-row">
|
|
758
|
-
<input id="set-workdir" type="text" placeholder="例 E:\GoOut\workspace" data-i18n-ph="例 E:\GoOut\workspace">
|
|
759
|
-
<button data-i18n="选择…" class="ghost small" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('set-workdir')">选择…</button>
|
|
760
|
-
<button data-i18n="保存" class="ghost small" onclick="saveDefaultWorkdir()">保存</button>
|
|
761
|
-
</div>
|
|
762
|
-
<label class="toggle" style="margin-top:6px"><input id="set-workdir-migrate" type="checkbox"> <span data-i18n="保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)">保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)</span></label>
|
|
763
|
-
<p class="hint" id="set-workdir-hint"></p>
|
|
764
|
-
</div>
|
|
765
|
-
<div id="set-v2-card" class="field"></div>
|
|
766
|
-
<div id="settings-msg" class="msg"></div>
|
|
767
|
-
</div>
|
|
768
|
-
</div>
|
|
769
|
-
|
|
770
|
-
<!-- 数据与备份(导出/导入/每日清理) -->
|
|
771
|
-
<div id="sub-data" class="subpage hidden">
|
|
772
|
-
<div class="panel wide">
|
|
773
|
-
<div class="panel-head">
|
|
774
|
-
<h2 data-i18n="备份与搬家">备份与搬家</h2>
|
|
775
|
-
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
776
|
-
</div>
|
|
777
|
-
<p class="hint" data-i18n="换电脑或换路径安装时,把全部数据打包带走:模型/密钥/绑定等全部配置、任务与运行记录、经验库、知识库、发布台账,以及各任务工作目录里的手稿与成品文件。导入时自动把旧机器的路径改写成新机器的路径。">换电脑或换路径安装时,把全部数据打包带走:模型/密钥/绑定等全部配置、任务与运行记录、经验库、知识库、发布台账,以及各任务工作目录里的手稿与成品文件。导入时自动把旧机器的路径改写成新机器的路径。</p>
|
|
778
|
-
<p class="hint" data-i18n="注意:备份包含 API 密钥,请妥善保管;发布平台的浏览器登录态不在备份里(体积 GB 级),导入后发布时需重新扫码。不在默认保存路径下的外部目录(如单独指定的代码仓库)不会打包,导入后会在预览里点名提醒。">注意:备份包含 API 密钥,请妥善保管;发布平台的浏览器登录态不在备份里(体积 GB 级),导入后发布时需重新扫码。不在默认保存路径下的外部目录(如单独指定的代码仓库)不会打包,导入后会在预览里点名提醒。</p>
|
|
779
|
-
<div class="field">
|
|
780
|
-
<label data-i18n="导出位置(默认「下载」文件夹)">导出位置(默认「下载」文件夹)</label>
|
|
781
|
-
<div class="input-row">
|
|
782
|
-
<input id="bk-target" type="text" placeholder="默认保存到「下载」文件夹" data-i18n-ph="默认保存到「下载」文件夹">
|
|
783
|
-
<button class="ghost small" type="button" onclick="pickFolder('bk-target')" data-i18n="选择…">选择…</button>
|
|
784
|
-
<button id="bk-go" class="ghost small" type="button" onclick="exportBackup()"><svg class="ico" aria-hidden="true"><use href="#i-library"></use></svg><span data-i18n="导出全部数据">导出全部数据</span></button>
|
|
785
|
-
</div>
|
|
786
|
-
<label class="toggle" style="margin-top:6px"><input id="bk-logs" type="checkbox" checked> <span data-i18n="包含运行过程日志(备份更大,但历史日志可完整回看)">包含运行过程日志(备份更大,但历史日志可完整回看)</span></label>
|
|
787
|
-
<div id="bk-result" class="msg"></div>
|
|
788
|
-
</div>
|
|
789
|
-
</div>
|
|
790
|
-
<div class="panel wide">
|
|
791
|
-
<div class="panel-head"><h2 data-i18n="恢复(导入备份包)">恢复(导入备份包)</h2></div>
|
|
792
|
-
<p class="hint" data-i18n="选择之前导出的备份包,先预览确认再导入。导入会覆盖同名任务与配置;当前数据会先自动备份一份到数据目录 imports/ 下,导入后需重启服务生效。">选择之前导出的备份包,先预览确认再导入。导入会覆盖同名任务与配置;当前数据会先自动备份一份到数据目录 imports/ 下,导入后需重启服务生效。</p>
|
|
793
|
-
<div class="field">
|
|
794
|
-
<div class="input-row">
|
|
795
|
-
<input id="bi-path" type="text" placeholder="备份包 zip 路径" data-i18n-ph="备份包 zip 路径">
|
|
796
|
-
<button class="ghost small" type="button" onclick="pickBackupFile()" data-i18n="选择备份包…">选择备份包…</button>
|
|
797
|
-
<button id="bi-inspect" class="ghost small" type="button" onclick="inspectBackup()"><span data-i18n="预览">预览</span></button>
|
|
798
|
-
</div>
|
|
799
|
-
<div id="bi-mode" class="seg" style="margin-top:8px" role="group" aria-label="导入方式" data-i18n-aria="导入方式">
|
|
800
|
-
<button class="seg-btn active" data-bimode="merge" data-i18n="合并导入">合并导入</button>
|
|
801
|
-
<button class="seg-btn" data-bimode="replace" data-i18n="替换导入">替换导入</button>
|
|
802
|
-
</div>
|
|
803
|
-
<p class="hint" data-i18n="合并导入:保留本机现有数据,备份包里的同名条目覆盖进来。替换导入:先清空本机数据目录再整体落入(宠物锁与历史导入备份除外)——只在想把新机器变成备份包原样时使用。">合并导入:保留本机现有数据,备份包里的同名条目覆盖进来。替换导入:先清空本机数据目录再整体落入(宠物锁与历史导入备份除外)——只在想把新机器变成备份包原样时使用。</p>
|
|
804
|
-
<label class="toggle"><input id="bi-remap" type="checkbox" checked> <span data-i18n="路径重映射(换电脑/换路径时把旧路径改写为新路径,推荐开启)">路径重映射(换电脑/换路径时把旧路径改写为新路径,推荐开启)</span></label>
|
|
805
|
-
<div id="bi-preview" class="msg"></div>
|
|
806
|
-
<div class="input-row" style="margin-top:8px">
|
|
807
|
-
<button id="bi-apply" class="ghost small hidden" type="button" onclick="applyBackupImport()"><span data-i18n="确认导入">确认导入</span></button>
|
|
808
|
-
<button id="bi-restart" class="ghost small hidden" type="button" onclick="suRestart()"><span data-i18n="重启服务生效">重启服务生效</span></button>
|
|
809
|
-
</div>
|
|
810
|
-
</div>
|
|
811
|
-
</div>
|
|
812
|
-
<div class="panel wide">
|
|
813
|
-
<div class="panel-head"><h2 data-i18n="每日清理">每日清理</h2></div>
|
|
814
|
-
<p class="hint" data-i18n="每天自动清理运行过程日志、发布截图、配置备份残留等可再生数据(保留运行记录与结果报告),防止磁盘越积越满。手稿、任务记录、经验库等用户数据永不清理。">每天自动清理运行过程日志、发布截图、配置备份残留等可再生数据(保留运行记录与结果报告),防止磁盘越积越满。手稿、任务记录、经验库等用户数据永不清理。</p>
|
|
815
|
-
<label class="toggle"><input id="set-cleanup" type="checkbox"> <span data-i18n="启用每日自动清理">启用每日自动清理</span></label>
|
|
816
|
-
<div class="input-row" style="margin-top:6px">
|
|
817
|
-
<label data-i18n="保留天数">保留天数</label>
|
|
818
|
-
<input id="set-cleanup-days" type="number" min="1" max="365" style="width:80px">
|
|
819
|
-
<button class="ghost small" type="button" onclick="saveCleanupSettings()" data-i18n="保存">保存</button>
|
|
820
|
-
<button id="cl-run" class="ghost small" type="button" onclick="runCleanup(false)"><span data-i18n="立即清理">立即清理</span></button>
|
|
821
|
-
</div>
|
|
822
|
-
<div id="cl-state" class="hint"></div>
|
|
823
|
-
<div id="cl-plan"></div>
|
|
824
|
-
<div class="input-row" style="margin-top:8px">
|
|
825
|
-
<button class="ghost small" type="button" onclick="runCleanup(true)"><span data-i18n="清理发布浏览器缓存(需重新扫码登录)">清理发布浏览器缓存(需重新扫码登录)</span></button>
|
|
826
|
-
</div>
|
|
827
|
-
</div>
|
|
828
|
-
</div>
|
|
829
|
-
|
|
830
|
-
<!-- 关于与更新(selfupdate) -->
|
|
831
|
-
<div id="sub-about" class="subpage hidden">
|
|
832
|
-
<div class="panel wide">
|
|
833
|
-
<div class="panel-head"><h2 data-i18n="关于与更新">关于与更新</h2></div>
|
|
834
|
-
<div id="su-info" class="empty" data-i18n="加载中…">加载中…</div>
|
|
835
|
-
<div class="input-row" style="margin-top:10px">
|
|
836
|
-
<button id="btn-welcome-replay" class="ghost small" onclick="welcomeOpen()"><svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg><span data-i18n="帮助中心">帮助中心</span></button>
|
|
837
|
-
<button id="su-check" class="ghost small" onclick="suCheck()"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span data-i18n="检查更新">检查更新</span></button>
|
|
838
|
-
<button id="su-apply" class="ghost small hidden" onclick="suApply()"><span data-i18n="升级到新版">升级到新版</span></button>
|
|
839
|
-
<button id="su-restart" class="ghost small hidden" onclick="suRestart()"><span data-i18n="重启服务生效">重启服务生效</span></button>
|
|
840
|
-
</div>
|
|
841
|
-
<p id="su-note" class="hint"></p>
|
|
842
|
-
<p id="su-progress" class="hint"></p>
|
|
843
|
-
<p class="hint" data-i18n="升级会通过 npm 拉取最新版并自动执行(日志可在运行记录里实时查看);完成后点「重启服务生效」,页面会自动重连。开发仓库(git clone)模式不提供自动升级,请用 git pull。">升级会通过 npm 拉取最新版并自动执行(日志可在运行记录里实时查看);完成后点「重启服务生效」,页面会自动重连。开发仓库(git clone)模式不提供自动升级,请用 git pull。</p>
|
|
844
|
-
<h3 data-i18n="帮助改进 CodeBee" class="sec-title">帮助改进 CodeBee</h3>
|
|
845
|
-
<label class="toggle"><input id="set-telemetry" type="checkbox" onchange="saveTelemetry(this.checked)"> <span data-i18n="发送匿名错误报告(帮助我们发现和修复问题)">发送匿名错误报告(帮助我们发现和修复问题)</span></label>
|
|
846
|
-
<p data-i18n="只上报失败原因码、供应商/模型名与脱敏后的错误摘录——绝不上传任务内容、章节正文、API 密钥和本机路径;关闭后立即停止一切上报。" class="hint">只上报失败原因码、供应商/模型名与脱敏后的错误摘录——绝不上传任务内容、章节正文、API 密钥和本机路径;关闭后立即停止一切上报。</p>
|
|
847
|
-
<div class="input-row" style="margin-top:8px">
|
|
848
|
-
<button id="diag-export" class="ghost small" onclick="exportDiagBundle()"><svg class="ico" aria-hidden="true"><use href="#i-file-search"></use></svg><span data-i18n="导出诊断包">导出诊断包</span></button>
|
|
849
|
-
<button id="issue-report" class="ghost small" onclick="reportIssue()"><svg class="ico" aria-hidden="true"><use href="#i-mail"></use></svg><span data-i18n="一键反馈 Issue">一键反馈 Issue</span></button>
|
|
850
|
-
</div>
|
|
851
|
-
<p data-i18n="生成一个 zip(近 30 天错误记录 + 用量统计 + 版本环境信息,已剥离敏感数据),反馈问题时可附在 Issue 里。" class="hint">生成一个 zip(近 30 天错误记录 + 用量统计 + 版本环境信息,已剥离敏感数据),反馈问题时可附在 Issue 里。</p>
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
<
|
|
866
|
-
<
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
<h3 data-i18n="
|
|
872
|
-
<div id="
|
|
873
|
-
|
|
874
|
-
<button
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
<
|
|
878
|
-
<
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
<
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
<p class="hint" data-i18n="
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
</div>
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
<
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
<!--
|
|
981
|
-
<section class="insp-pane
|
|
982
|
-
<div class="insp-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
<
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
</div>
|
|
1019
|
-
|
|
1020
|
-
<
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
<
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
<div
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
<
|
|
1063
|
-
<button
|
|
1064
|
-
</div>
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
<
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
<
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
<div id="bee-
|
|
1103
|
-
<
|
|
1104
|
-
<svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg>
|
|
1105
|
-
<
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
<
|
|
1114
|
-
<
|
|
1115
|
-
<
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
<
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
<
|
|
1145
|
-
<
|
|
1146
|
-
<
|
|
1147
|
-
</
|
|
1148
|
-
</
|
|
755
|
+
</div>
|
|
756
|
+
<div class="field"><label data-i18n="默认保存路径(新建任务未指定工作目录时使用;支持 ~)">默认保存路径(新建任务未指定工作目录时使用;支持 ~)</label>
|
|
757
|
+
<div class="input-row">
|
|
758
|
+
<input id="set-workdir" type="text" placeholder="例 E:\GoOut\workspace" data-i18n-ph="例 E:\GoOut\workspace">
|
|
759
|
+
<button data-i18n="选择…" class="ghost small" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('set-workdir')">选择…</button>
|
|
760
|
+
<button data-i18n="保存" class="ghost small" onclick="saveDefaultWorkdir()">保存</button>
|
|
761
|
+
</div>
|
|
762
|
+
<label class="toggle" style="margin-top:6px"><input id="set-workdir-migrate" type="checkbox"> <span data-i18n="保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)">保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)</span></label>
|
|
763
|
+
<p class="hint" id="set-workdir-hint"></p>
|
|
764
|
+
</div>
|
|
765
|
+
<div id="set-v2-card" class="field"></div>
|
|
766
|
+
<div id="settings-msg" class="msg"></div>
|
|
767
|
+
</div>
|
|
768
|
+
</div>
|
|
769
|
+
|
|
770
|
+
<!-- 数据与备份(导出/导入/每日清理) -->
|
|
771
|
+
<div id="sub-data" class="subpage hidden">
|
|
772
|
+
<div class="panel wide">
|
|
773
|
+
<div class="panel-head">
|
|
774
|
+
<h2 data-i18n="备份与搬家">备份与搬家</h2>
|
|
775
|
+
<button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
776
|
+
</div>
|
|
777
|
+
<p class="hint" data-i18n="换电脑或换路径安装时,把全部数据打包带走:模型/密钥/绑定等全部配置、任务与运行记录、经验库、知识库、发布台账,以及各任务工作目录里的手稿与成品文件。导入时自动把旧机器的路径改写成新机器的路径。">换电脑或换路径安装时,把全部数据打包带走:模型/密钥/绑定等全部配置、任务与运行记录、经验库、知识库、发布台账,以及各任务工作目录里的手稿与成品文件。导入时自动把旧机器的路径改写成新机器的路径。</p>
|
|
778
|
+
<p class="hint" data-i18n="注意:备份包含 API 密钥,请妥善保管;发布平台的浏览器登录态不在备份里(体积 GB 级),导入后发布时需重新扫码。不在默认保存路径下的外部目录(如单独指定的代码仓库)不会打包,导入后会在预览里点名提醒。">注意:备份包含 API 密钥,请妥善保管;发布平台的浏览器登录态不在备份里(体积 GB 级),导入后发布时需重新扫码。不在默认保存路径下的外部目录(如单独指定的代码仓库)不会打包,导入后会在预览里点名提醒。</p>
|
|
779
|
+
<div class="field">
|
|
780
|
+
<label data-i18n="导出位置(默认「下载」文件夹)">导出位置(默认「下载」文件夹)</label>
|
|
781
|
+
<div class="input-row">
|
|
782
|
+
<input id="bk-target" type="text" placeholder="默认保存到「下载」文件夹" data-i18n-ph="默认保存到「下载」文件夹">
|
|
783
|
+
<button class="ghost small" type="button" onclick="pickFolder('bk-target')" data-i18n="选择…">选择…</button>
|
|
784
|
+
<button id="bk-go" class="ghost small" type="button" onclick="exportBackup()"><svg class="ico" aria-hidden="true"><use href="#i-library"></use></svg><span data-i18n="导出全部数据">导出全部数据</span></button>
|
|
785
|
+
</div>
|
|
786
|
+
<label class="toggle" style="margin-top:6px"><input id="bk-logs" type="checkbox" checked> <span data-i18n="包含运行过程日志(备份更大,但历史日志可完整回看)">包含运行过程日志(备份更大,但历史日志可完整回看)</span></label>
|
|
787
|
+
<div id="bk-result" class="msg"></div>
|
|
788
|
+
</div>
|
|
789
|
+
</div>
|
|
790
|
+
<div class="panel wide">
|
|
791
|
+
<div class="panel-head"><h2 data-i18n="恢复(导入备份包)">恢复(导入备份包)</h2></div>
|
|
792
|
+
<p class="hint" data-i18n="选择之前导出的备份包,先预览确认再导入。导入会覆盖同名任务与配置;当前数据会先自动备份一份到数据目录 imports/ 下,导入后需重启服务生效。">选择之前导出的备份包,先预览确认再导入。导入会覆盖同名任务与配置;当前数据会先自动备份一份到数据目录 imports/ 下,导入后需重启服务生效。</p>
|
|
793
|
+
<div class="field">
|
|
794
|
+
<div class="input-row">
|
|
795
|
+
<input id="bi-path" type="text" placeholder="备份包 zip 路径" data-i18n-ph="备份包 zip 路径">
|
|
796
|
+
<button class="ghost small" type="button" onclick="pickBackupFile()" data-i18n="选择备份包…">选择备份包…</button>
|
|
797
|
+
<button id="bi-inspect" class="ghost small" type="button" onclick="inspectBackup()"><span data-i18n="预览">预览</span></button>
|
|
798
|
+
</div>
|
|
799
|
+
<div id="bi-mode" class="seg" style="margin-top:8px" role="group" aria-label="导入方式" data-i18n-aria="导入方式">
|
|
800
|
+
<button class="seg-btn active" data-bimode="merge" data-i18n="合并导入">合并导入</button>
|
|
801
|
+
<button class="seg-btn" data-bimode="replace" data-i18n="替换导入">替换导入</button>
|
|
802
|
+
</div>
|
|
803
|
+
<p class="hint" data-i18n="合并导入:保留本机现有数据,备份包里的同名条目覆盖进来。替换导入:先清空本机数据目录再整体落入(宠物锁与历史导入备份除外)——只在想把新机器变成备份包原样时使用。">合并导入:保留本机现有数据,备份包里的同名条目覆盖进来。替换导入:先清空本机数据目录再整体落入(宠物锁与历史导入备份除外)——只在想把新机器变成备份包原样时使用。</p>
|
|
804
|
+
<label class="toggle"><input id="bi-remap" type="checkbox" checked> <span data-i18n="路径重映射(换电脑/换路径时把旧路径改写为新路径,推荐开启)">路径重映射(换电脑/换路径时把旧路径改写为新路径,推荐开启)</span></label>
|
|
805
|
+
<div id="bi-preview" class="msg"></div>
|
|
806
|
+
<div class="input-row" style="margin-top:8px">
|
|
807
|
+
<button id="bi-apply" class="ghost small hidden" type="button" onclick="applyBackupImport()"><span data-i18n="确认导入">确认导入</span></button>
|
|
808
|
+
<button id="bi-restart" class="ghost small hidden" type="button" onclick="suRestart()"><span data-i18n="重启服务生效">重启服务生效</span></button>
|
|
809
|
+
</div>
|
|
810
|
+
</div>
|
|
811
|
+
</div>
|
|
812
|
+
<div class="panel wide">
|
|
813
|
+
<div class="panel-head"><h2 data-i18n="每日清理">每日清理</h2></div>
|
|
814
|
+
<p class="hint" data-i18n="每天自动清理运行过程日志、发布截图、配置备份残留等可再生数据(保留运行记录与结果报告),防止磁盘越积越满。手稿、任务记录、经验库等用户数据永不清理。">每天自动清理运行过程日志、发布截图、配置备份残留等可再生数据(保留运行记录与结果报告),防止磁盘越积越满。手稿、任务记录、经验库等用户数据永不清理。</p>
|
|
815
|
+
<label class="toggle"><input id="set-cleanup" type="checkbox"> <span data-i18n="启用每日自动清理">启用每日自动清理</span></label>
|
|
816
|
+
<div class="input-row" style="margin-top:6px">
|
|
817
|
+
<label data-i18n="保留天数">保留天数</label>
|
|
818
|
+
<input id="set-cleanup-days" type="number" min="1" max="365" style="width:80px">
|
|
819
|
+
<button class="ghost small" type="button" onclick="saveCleanupSettings()" data-i18n="保存">保存</button>
|
|
820
|
+
<button id="cl-run" class="ghost small" type="button" onclick="runCleanup(false)"><span data-i18n="立即清理">立即清理</span></button>
|
|
821
|
+
</div>
|
|
822
|
+
<div id="cl-state" class="hint"></div>
|
|
823
|
+
<div id="cl-plan"></div>
|
|
824
|
+
<div class="input-row" style="margin-top:8px">
|
|
825
|
+
<button class="ghost small" type="button" onclick="runCleanup(true)"><span data-i18n="清理发布浏览器缓存(需重新扫码登录)">清理发布浏览器缓存(需重新扫码登录)</span></button>
|
|
826
|
+
</div>
|
|
827
|
+
</div>
|
|
828
|
+
</div>
|
|
829
|
+
|
|
830
|
+
<!-- 关于与更新(selfupdate) -->
|
|
831
|
+
<div id="sub-about" class="subpage hidden">
|
|
832
|
+
<div class="panel wide">
|
|
833
|
+
<div class="panel-head"><h2 data-i18n="关于与更新">关于与更新</h2></div>
|
|
834
|
+
<div id="su-info" class="empty" data-i18n="加载中…">加载中…</div>
|
|
835
|
+
<div class="input-row" style="margin-top:10px">
|
|
836
|
+
<button id="btn-welcome-replay" class="ghost small" onclick="welcomeOpen()"><svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg><span data-i18n="帮助中心">帮助中心</span></button>
|
|
837
|
+
<button id="su-check" class="ghost small" onclick="suCheck()"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span data-i18n="检查更新">检查更新</span></button>
|
|
838
|
+
<button id="su-apply" class="ghost small hidden" onclick="suApply()"><span data-i18n="升级到新版">升级到新版</span></button>
|
|
839
|
+
<button id="su-restart" class="ghost small hidden" onclick="suRestart()"><span data-i18n="重启服务生效">重启服务生效</span></button>
|
|
840
|
+
</div>
|
|
841
|
+
<p id="su-note" class="hint"></p>
|
|
842
|
+
<p id="su-progress" class="hint"></p>
|
|
843
|
+
<p class="hint" data-i18n="升级会通过 npm 拉取最新版并自动执行(日志可在运行记录里实时查看);完成后点「重启服务生效」,页面会自动重连。开发仓库(git clone)模式不提供自动升级,请用 git pull。">升级会通过 npm 拉取最新版并自动执行(日志可在运行记录里实时查看);完成后点「重启服务生效」,页面会自动重连。开发仓库(git clone)模式不提供自动升级,请用 git pull。</p>
|
|
844
|
+
<h3 data-i18n="帮助改进 CodeBee" class="sec-title">帮助改进 CodeBee</h3>
|
|
845
|
+
<label class="toggle"><input id="set-telemetry" type="checkbox" onchange="saveTelemetry(this.checked)"> <span data-i18n="发送匿名错误报告(帮助我们发现和修复问题)">发送匿名错误报告(帮助我们发现和修复问题)</span></label>
|
|
846
|
+
<p data-i18n="只上报失败原因码、供应商/模型名与脱敏后的错误摘录——绝不上传任务内容、章节正文、API 密钥和本机路径;关闭后立即停止一切上报。" class="hint">只上报失败原因码、供应商/模型名与脱敏后的错误摘录——绝不上传任务内容、章节正文、API 密钥和本机路径;关闭后立即停止一切上报。</p>
|
|
847
|
+
<div class="input-row" style="margin-top:8px">
|
|
848
|
+
<button id="diag-export" class="ghost small" onclick="exportDiagBundle()"><svg class="ico" aria-hidden="true"><use href="#i-file-search"></use></svg><span data-i18n="导出诊断包">导出诊断包</span></button>
|
|
849
|
+
<button id="issue-report" class="ghost small" onclick="reportIssue()"><svg class="ico" aria-hidden="true"><use href="#i-mail"></use></svg><span data-i18n="一键反馈 Issue">一键反馈 Issue</span></button>
|
|
850
|
+
</div>
|
|
851
|
+
<p data-i18n="生成一个 zip(近 30 天错误记录 + 用量统计 + 版本环境信息,已剥离敏感数据),反馈问题时可附在 Issue 里。" class="hint">生成一个 zip(近 30 天错误记录 + 用量统计 + 版本环境信息,已剥离敏感数据),反馈问题时可附在 Issue 里。</p>
|
|
852
|
+
<h3 data-i18n="端口占用" class="sec-title">端口占用</h3>
|
|
853
|
+
<div class="input-row" style="margin-top:8px">
|
|
854
|
+
<button id="ports-scan" class="ghost small" onclick="scanPorts()"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span data-i18n="扫描本机端口">扫描本机端口</span></button>
|
|
855
|
+
</div>
|
|
856
|
+
<p data-i18n="谁占着端口、属于哪个项目一目了然;「仅本机」的端口外网不可达。关闭只发温和信号,系统进程与本服务自身拒绝关闭。" class="hint">谁占着端口、属于哪个项目一目了然;「仅本机」的端口外网不可达。关闭只发温和信号,系统进程与本服务自身拒绝关闭。</p>
|
|
857
|
+
<div id="ports-list" style="margin-top:6px"></div>
|
|
858
|
+
</div>
|
|
859
|
+
</div>
|
|
860
|
+
|
|
861
|
+
<!-- 外观 / 皮肤 -->
|
|
862
|
+
<div id="sub-appearance" class="subpage hidden">
|
|
863
|
+
<!-- 页内锚点:皮肤页变长后两胶囊直达,滚动时高亮跟随 -->
|
|
864
|
+
<div id="cs-anchor" class="seg cs-anchor" role="group" aria-label="本页分区" data-i18n-aria="本页分区">
|
|
865
|
+
<button class="seg-btn active" data-apn="apn-skin" data-i18n="外观">外观</button>
|
|
866
|
+
<button class="seg-btn" data-apn="apn-code" data-i18n="代码">代码</button>
|
|
867
|
+
</div>
|
|
868
|
+
<div class="panel wide" id="apn-skin">
|
|
869
|
+
<div class="panel-head"><h2 data-i18n="皮肤">皮肤</h2></div>
|
|
870
|
+
<p class="hint"><span data-i18n="每套皮肤都是一份完整配色,并且各带「日间 / 夜间」两版,明暗切换不会丢皮肤。选中的皮肤立即生效并记在这台设备上(手机与电脑各自独立)。">每套皮肤都是一份完整配色,并且各带「日间 / 夜间」两版,明暗切换不会丢皮肤。选中的皮肤立即生效并记在这台设备上(手机与电脑各自独立)。</span><b data-i18n="经典">经典</b><span data-i18n="是默认皮肤,即原本的界面。">是默认皮肤,即原本的界面。</span></p>
|
|
871
|
+
<h3 class="sec-title" data-i18n="语言 / Language">语言 / Language</h3>
|
|
872
|
+
<div id="lang-mode" class="seg" role="group" aria-label="Language">
|
|
873
|
+
<!-- 语言名一律用本语言书写,不翻译 -->
|
|
874
|
+
<button class="seg-btn" data-lang="zh"><span>中文</span></button>
|
|
875
|
+
<button class="seg-btn" data-lang="en">English</button>
|
|
876
|
+
</div>
|
|
877
|
+
<h3 data-i18n="明暗" class="sec-title">明暗</h3>
|
|
878
|
+
<div id="skin-mode" class="seg" role="group" aria-label="明暗模式" data-i18n-aria="明暗模式">
|
|
879
|
+
<button data-i18n="夜间" class="seg-btn" data-mode="dark">夜间</button>
|
|
880
|
+
<button data-i18n="日间" class="seg-btn" data-mode="light">日间</button>
|
|
881
|
+
</div>
|
|
882
|
+
<h3 class="sec-title"><span data-i18n="皮肤">皮肤</span> <span class="tag" id="skin-cur"></span></h3>
|
|
883
|
+
<div id="skin-grid" class="skin-grid"></div>
|
|
884
|
+
<h3 class="sec-title" data-i18n="桌面蜜蜂">桌面蜜蜂</h3>
|
|
885
|
+
<label class="toggle"><input id="set-pet" type="checkbox" onchange="savePet(this.checked)"> <span data-i18n="在桌面角落养一只蜜蜂,实时汇报蜂群动态">在桌面角落养一只蜜蜂,实时汇报蜂群动态</span></label>
|
|
886
|
+
<div id="pet-mode" class="seg" role="group" aria-label="显示模式" data-i18n-aria="显示模式">
|
|
887
|
+
<button class="seg-btn" data-pmode="always" data-i18n="常驻显示">常驻显示</button>
|
|
888
|
+
<button class="seg-btn" data-pmode="tasks_only" data-i18n="仅任务运行时出现">仅任务运行时出现</button>
|
|
889
|
+
</div>
|
|
890
|
+
<div id="pet-skin" class="seg" role="group" aria-label="蜜蜂形象" data-i18n-aria="蜜蜂形象">
|
|
891
|
+
<button class="seg-btn" data-pskin="plush" data-i18n="毛绒蜜蜂">毛绒蜜蜂</button>
|
|
892
|
+
<button class="seg-btn" data-pskin="robot" data-i18n="机械蜜蜂">机械蜜蜂</button>
|
|
893
|
+
</div>
|
|
894
|
+
<p class="hint" data-i18n="左键点蜜蜂打开 CodeBee,右键有菜单(可换形象),按住可拖动;蜜蜂跑在独立小进程里,关掉服务它会自己回巢。">左键点蜜蜂打开 CodeBee,右键有菜单(可换形象),按住可拖动;蜜蜂跑在独立小进程里,关掉服务它会自己回巢。</p>
|
|
895
|
+
</div>
|
|
896
|
+
|
|
897
|
+
<!-- 代码设置:主题/行号/换行/字号只管代码内容,存本设备(与皮肤同一套语汇) -->
|
|
898
|
+
<div class="panel wide" id="apn-code">
|
|
899
|
+
<div class="panel-head"><h2 data-i18n="代码设置">代码设置</h2></div>
|
|
900
|
+
<p class="hint" data-i18n="设置代码内容的主题、字号和显示方式,不受界面字号影响。">设置代码内容的主题、字号和显示方式,不受界面字号影响。</p>
|
|
901
|
+
<div class="code-set-rows">
|
|
902
|
+
<div class="cs-row">
|
|
903
|
+
<div class="cs-lab"><b data-i18n="浅色代码主题">浅色代码主题</b><span class="hint" data-i18n="浅色界面下代码内容使用的高亮主题。">浅色界面下代码内容使用的高亮主题。</span></div>
|
|
904
|
+
<select id="cs-theme-light" aria-label="浅色代码主题" data-i18n-aria="浅色代码主题"></select>
|
|
905
|
+
</div>
|
|
906
|
+
<div class="cs-row">
|
|
907
|
+
<div class="cs-lab"><b data-i18n="深色代码主题">深色代码主题</b><span class="hint" data-i18n="深色界面下代码内容使用的高亮主题。">深色界面下代码内容使用的高亮主题。</span></div>
|
|
908
|
+
<select id="cs-theme-dark" aria-label="深色代码主题" data-i18n-aria="深色代码主题"></select>
|
|
909
|
+
</div>
|
|
910
|
+
<div class="cs-row">
|
|
911
|
+
<div class="cs-lab"><b data-i18n="显示行号">显示行号</b><span class="hint" data-i18n="在代码内容和差异视图中显示行号。">在代码内容和差异视图中显示行号。</span></div>
|
|
912
|
+
<label class="cs-switch"><input type="checkbox" id="cs-linenum"><span class="cs-track" aria-hidden="true"></span></label>
|
|
913
|
+
</div>
|
|
914
|
+
<div class="cs-row">
|
|
915
|
+
<div class="cs-lab"><b data-i18n="长行自动换行">长行自动换行</b><span class="hint" data-i18n="代码内容过长时自动换行。">代码内容过长时自动换行。</span></div>
|
|
916
|
+
<label class="cs-switch"><input type="checkbox" id="cs-wrap"><span class="cs-track" aria-hidden="true"></span></label>
|
|
917
|
+
</div>
|
|
918
|
+
<div class="cs-row">
|
|
919
|
+
<div class="cs-lab"><b data-i18n="代码字号">代码字号</b><span class="hint" data-i18n="调整代码块、文件预览和差异视图的默认字号。">调整代码块、文件预览和差异视图的默认字号。</span></div>
|
|
920
|
+
<span class="cs-size"><input type="number" id="cs-size" min="10" max="22" step="1" aria-label="代码字号" data-i18n-aria="代码字号"> <span class="hint">px</span></span>
|
|
921
|
+
</div>
|
|
922
|
+
</div>
|
|
923
|
+
</div>
|
|
924
|
+
|
|
925
|
+
<!-- 代码预览:浅/深两卡同屏,当前界面用的那套标记「当前生效」 -->
|
|
926
|
+
<div class="panel wide">
|
|
927
|
+
<div class="panel-head"><h2 data-i18n="代码预览">代码预览</h2></div>
|
|
928
|
+
<p class="hint" data-i18n="同时预览浅色与深色代码主题,当前界面使用的主题会标记为「当前生效」。">同时预览浅色与深色代码主题,当前界面使用的主题会标记为「当前生效」。</p>
|
|
929
|
+
<div class="cs-previews">
|
|
930
|
+
<div class="cs-preview" id="cs-preview-light">
|
|
931
|
+
<div class="cs-pv-head"><span class="cs-pv-tt"><b data-i18n="浅色预览">浅色预览</b><span class="cs-pv-theme"></span></span><span class="tag cs-pv-badge"></span></div>
|
|
932
|
+
<div class="cs-pv-code" data-ctheme-mode="light"></div>
|
|
933
|
+
</div>
|
|
934
|
+
<div class="cs-preview" id="cs-preview-dark">
|
|
935
|
+
<div class="cs-pv-head"><span class="cs-pv-tt"><b data-i18n="深色预览">深色预览</b><span class="cs-pv-theme"></span></span><span class="tag cs-pv-badge"></span></div>
|
|
936
|
+
<div class="cs-pv-code" data-ctheme-mode="dark"></div>
|
|
937
|
+
</div>
|
|
938
|
+
</div>
|
|
939
|
+
</div>
|
|
940
|
+
</div>
|
|
941
|
+
|
|
942
|
+
<!-- 文件夹浏览(侧栏文件夹右键「查看文件」):左侧目录树,右侧文件 chips -->
|
|
943
|
+
<div id="sub-files" class="subpage hidden">
|
|
944
|
+
<div class="panel wide">
|
|
945
|
+
<div class="panel-head">
|
|
946
|
+
<h2 data-i18n="查看文件">查看文件</h2>
|
|
947
|
+
<div class="files-crumb" id="files-crumb"></div>
|
|
948
|
+
</div>
|
|
949
|
+
<div class="files-page">
|
|
950
|
+
<aside class="files-tree" id="files-tree"></aside>
|
|
951
|
+
<div class="files-main">
|
|
952
|
+
<div id="files-list" class="files-list"></div>
|
|
953
|
+
</div>
|
|
954
|
+
</div>
|
|
955
|
+
</div>
|
|
956
|
+
</div>
|
|
957
|
+
</section>
|
|
958
|
+
</main>
|
|
959
|
+
</div>
|
|
960
|
+
|
|
961
|
+
<!-- ================= 任务检查器(右缘停靠列,参考桌面端 Git 工具 + 进程面板) ================= -->
|
|
962
|
+
<aside id="inspector" class="hidden" aria-label="任务检查器" data-i18n-aria="任务检查器">
|
|
963
|
+
<div class="insp-head">
|
|
964
|
+
<svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>
|
|
965
|
+
<span id="insp-title" class="t" title=""></span>
|
|
966
|
+
<button id="insp-full" class="ghost small" data-i18n="完整详情" data-i18n-title="在主栏打开任务完整详情(全部步骤/日志/报告)" title="在主栏打开任务完整详情(全部步骤/日志/报告)">完整详情</button>
|
|
967
|
+
<button id="insp-close" class="icon-btn" data-i18n-title="收起检查器" title="收起检查器" aria-label="收起检查器" data-i18n-aria="收起检查器"><svg class="ico" aria-hidden="true"><use href="#i-x"></use></svg></button>
|
|
968
|
+
</div>
|
|
969
|
+
<!-- 常驻统计条:运行/步骤/成本/tokens 一行看完,不占分区 -->
|
|
970
|
+
<div id="insp-stats" class="insp-strip"></div>
|
|
971
|
+
<!-- 分区 TAB:一次只展示一个分区;任务状态变化时自动选中(运行中→进度,待裁决→Git)。
|
|
972
|
+
检查器定位=任务树上的快捷预览列:主栏进运行/任务详情后整列让位(syncInspectorVis),
|
|
973
|
+
这里的 Git/进度/成品只在「没开详情」的浏览态出现,与详情页五分区不同屏 -->
|
|
974
|
+
<nav id="insp-tabs" class="insp-tabs" role="tablist" aria-label="检查器分区" data-i18n-aria="检查器分区">
|
|
975
|
+
<button class="insp-tab" data-tab="git" role="tab"><svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg><span data-i18n="Git 工具">Git 工具</span><span id="insp-badge-git" class="insp-badge hidden"></span></button>
|
|
976
|
+
<button class="insp-tab" data-tab="progress" role="tab"><svg class="ico" aria-hidden="true"><use href="#i-check"></use></svg><span data-i18n="进度">进度</span><span id="insp-badge-progress" class="insp-badge hidden"></span></button>
|
|
977
|
+
<button class="insp-tab" data-tab="files" role="tab"><svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg><span data-i18n="成品文件">成品文件</span><span id="insp-badge-files" class="insp-badge hidden"></span></button>
|
|
978
|
+
</nav>
|
|
979
|
+
<div class="insp-body">
|
|
980
|
+
<!-- Git 分区:分支 + 行级统计 + 变更清单 + 合并/丢弃裁决 + 单文件 diff -->
|
|
981
|
+
<section class="insp-pane" id="insp-pane-git">
|
|
982
|
+
<div class="insp-pane-head"><span id="insp-git-chip" class="chip hidden"></span></div>
|
|
983
|
+
<div id="insp-git-main" class="insp-git-main"></div>
|
|
984
|
+
<pre id="insp-diff" class="insp-diff hidden"></pre>
|
|
985
|
+
</section>
|
|
986
|
+
<!-- 进度分区:环形进度(养成感动画)+ 步骤清单,点步骤跳主栏详情 -->
|
|
987
|
+
<section class="insp-pane hidden" id="insp-pane-progress">
|
|
988
|
+
<div class="insp-ring-wrap">
|
|
989
|
+
<svg class="insp-ring" viewBox="0 0 84 84" aria-hidden="true">
|
|
990
|
+
<circle class="tr" cx="42" cy="42" r="36"></circle>
|
|
991
|
+
<circle class="pr" id="insp-ring" cx="42" cy="42" r="36"></circle>
|
|
992
|
+
</svg>
|
|
993
|
+
<div class="insp-ring-num"><b id="insp-progress-n">0/0</b><span data-i18n="步">步</span></div>
|
|
994
|
+
</div>
|
|
995
|
+
<div id="insp-steps" class="insp-steps"></div>
|
|
996
|
+
</section>
|
|
997
|
+
<!-- 成品文件分区:点开即看,不进详情页 -->
|
|
998
|
+
<section class="insp-pane hidden" id="insp-pane-files">
|
|
999
|
+
<div id="insp-artifacts" class="insp-artifacts"></div>
|
|
1000
|
+
</section>
|
|
1001
|
+
</div>
|
|
1002
|
+
<!-- 迷你指挥坞:运行中常驻底部,任何分区下都能直接下达指令(不带附件,附件在详情页) -->
|
|
1003
|
+
<section class="insp-direct hidden" id="insp-card-direct">
|
|
1004
|
+
<div class="insp-direct-head"><svg class="ico" aria-hidden="true"><use href="#i-baton"></use></svg><span data-i18n="运行中指挥">运行中指挥</span></div>
|
|
1005
|
+
<textarea id="insp-msg-input" rows="2" data-i18n-ph="补充说明或纠偏,将随下一条智能体步骤下达" placeholder="补充说明或纠偏,将随下一条智能体步骤下达"></textarea>
|
|
1006
|
+
<div class="insp-direct-bar">
|
|
1007
|
+
<span id="insp-direct-hint" class="insp-hint"></span>
|
|
1008
|
+
<button id="insp-send-btn" class="primary small" data-i18n="下达指令">下达指令</button>
|
|
1009
|
+
</div>
|
|
1010
|
+
</section>
|
|
1011
|
+
</aside>
|
|
1012
|
+
<div id="insp-mask" aria-hidden="true"></div>
|
|
1013
|
+
</div>
|
|
1014
|
+
|
|
1015
|
+
<!-- 访问令牌门:仅远程(非本机)访问且令牌缺失/错误时显示 -->
|
|
1016
|
+
<div id="token-gate" class="token-gate hidden">
|
|
1017
|
+
<div class="gate-card">
|
|
1018
|
+
<div class="gate-brand"><span class="brand-name">CodeBee</span></div>
|
|
1019
|
+
<p class="gate-hint"><span data-i18n="这台设备第一次连接,请输入访问令牌">这台设备第一次连接,请输入访问令牌</span><br><span data-i18n="(电脑上启动 CodeBee 时控制台会显示,形如 http://192.168.x.x:8765/?token=xxxxxxxx)">(电脑上启动 CodeBee 时控制台会显示,形如 http://192.168.x.x:8765/?token=xxxxxxxx)</span></p>
|
|
1020
|
+
<input id="gate-token" type="password" placeholder="访问令牌" autocomplete="off" data-i18n-ph="访问令牌">
|
|
1021
|
+
<button data-i18n="进入" id="gate-go" class="primary" onclick="submitToken()">进入</button>
|
|
1022
|
+
<p id="gate-err" class="msg"></p>
|
|
1023
|
+
</div>
|
|
1024
|
+
</div>
|
|
1025
|
+
|
|
1026
|
+
<div id="ctx-menu" class="ctx-menu hidden"></div>
|
|
1027
|
+
|
|
1028
|
+
<!-- 命令面板(Ctrl+K):搜索任务直达 + 快捷命令 -->
|
|
1029
|
+
<div id="cmdk-mask" class="cmdk-mask hidden">
|
|
1030
|
+
<div class="cmdk" role="dialog" aria-label="命令面板" data-i18n-aria="命令面板" onclick="event.stopPropagation()">
|
|
1031
|
+
<div class="cmdk-input">
|
|
1032
|
+
<svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>
|
|
1033
|
+
<input id="cmdk-q" type="text" placeholder="搜索操作、任务或文件" data-i18n-ph="搜索操作、任务或文件" autocomplete="off" spellcheck="false">
|
|
1034
|
+
</div>
|
|
1035
|
+
<div class="cmdk-tabs" id="cmdk-tabs">
|
|
1036
|
+
<button class="on" data-t="all" data-i18n="全部">全部</button>
|
|
1037
|
+
<button data-t="ops" data-i18n="操作">操作</button>
|
|
1038
|
+
<button data-t="tasks" data-i18n="任务">任务</button>
|
|
1039
|
+
</div>
|
|
1040
|
+
<div class="cmdk-list" id="cmdk-list"></div>
|
|
1041
|
+
</div>
|
|
1042
|
+
</div>
|
|
1043
|
+
|
|
1044
|
+
<!-- 通用弹框(导入供应商 / 添加供应商) -->
|
|
1045
|
+
<div id="modal" class="modal-wrap hidden">
|
|
1046
|
+
<div class="modal-mask" onclick="closeModal()"></div>
|
|
1047
|
+
<div class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
|
|
1048
|
+
<div class="modal-head">
|
|
1049
|
+
<span id="modal-title"></span>
|
|
1050
|
+
<button class="icon-btn" onclick="closeModal()" title="关闭" data-i18n-title="关闭">✕</button>
|
|
1051
|
+
</div>
|
|
1052
|
+
<div class="modal-body" id="modal-body"></div>
|
|
1053
|
+
<div class="modal-foot" id="modal-foot"></div>
|
|
1054
|
+
</div>
|
|
1055
|
+
</div>
|
|
1056
|
+
|
|
1057
|
+
<!-- 应用内确认 / 输入弹框(替代浏览器原生 confirm/prompt;可叠在 #modal 之上) -->
|
|
1058
|
+
<div id="ask" class="modal-wrap ask-wrap hidden">
|
|
1059
|
+
<div class="modal-mask" id="ask-mask"></div>
|
|
1060
|
+
<div class="modal ask-modal" role="dialog" aria-modal="true" aria-labelledby="ask-title">
|
|
1061
|
+
<div class="modal-head">
|
|
1062
|
+
<span data-i18n="确认" id="ask-title">确认</span>
|
|
1063
|
+
<button class="icon-btn" id="ask-x" title="关闭" aria-label="关闭" data-i18n-aria="关闭" data-i18n-title="关闭">✕</button>
|
|
1064
|
+
</div>
|
|
1065
|
+
<div class="modal-body" id="ask-body"></div>
|
|
1066
|
+
<div class="modal-foot">
|
|
1067
|
+
<span class="spacer"></span>
|
|
1068
|
+
<button data-i18n="取消" class="ghost" id="ask-no">取消</button>
|
|
1069
|
+
<button data-i18n="确定" class="primary" id="ask-yes">确定</button>
|
|
1070
|
+
</div>
|
|
1071
|
+
</div>
|
|
1072
|
+
</div>
|
|
1073
|
+
|
|
1074
|
+
<!-- 帮助中心(首启欢迎引导升级版):左目录右内容;首启自动弹落在「快速上手」章。
|
|
1075
|
+
localStorage orch.welcomed 记账,只自动弹一次;令牌门在场时让位(见 maybeWelcome)。
|
|
1076
|
+
章节清单在 app.js HELP_CHAPTERS——加新章只需追加一条 + helpChapterBody 加分支。 -->
|
|
1077
|
+
<div id="welcome" class="welcome-wrap hidden">
|
|
1078
|
+
<div class="welcome-mask" onclick="welcomeClose()"></div>
|
|
1079
|
+
<div class="welcome-card" role="dialog" aria-modal="true" aria-labelledby="welcome-title">
|
|
1080
|
+
<button class="welcome-x icon-btn" title="关闭" aria-label="关闭" data-i18n-title="关闭" data-i18n-aria="关闭" onclick="welcomeClose()">✕</button>
|
|
1081
|
+
<div class="help-rail">
|
|
1082
|
+
<span class="welcome-badge" id="welcome-badge">首次启动</span>
|
|
1083
|
+
<div class="welcome-brand">
|
|
1084
|
+
<svg class="ico welcome-bee" aria-hidden="true"><use href="#i-bee"></use></svg>
|
|
1085
|
+
<span class="brand-name">CodeBee</span>
|
|
1086
|
+
</div>
|
|
1087
|
+
<nav class="help-toc" id="help-toc" aria-label="帮助目录" data-i18n-aria="帮助目录"></nav>
|
|
1088
|
+
<p class="welcome-foot" data-i18n="可随时按 F1,或在「设置 → 关于与更新」重新打开本帮助中心。">可随时按 F1,或在「设置 → 关于与更新」重新打开本帮助中心。</p>
|
|
1089
|
+
</div>
|
|
1090
|
+
<div class="help-main">
|
|
1091
|
+
<h1 id="welcome-title" data-i18n="欢迎使用 CodeBee">欢迎使用 CodeBee</h1>
|
|
1092
|
+
<p class="welcome-sub" data-i18n="一群 AI 智能体自动分工:规划、实现、评审、打磨,直到交付成果。">一群 AI 智能体自动分工:规划、实现、评审、打磨,直到交付成果。</p>
|
|
1093
|
+
<div class="help-body" id="help-body"></div>
|
|
1094
|
+
</div>
|
|
1095
|
+
</div>
|
|
1096
|
+
</div>
|
|
1097
|
+
|
|
1098
|
+
<!-- 群摘要蜜蜂坞(右下角悬浮蜜蜂):桌面蜜蜂 pet.py 的网页侧搭档。
|
|
1099
|
+
未读摘要时徽章+气泡提醒,点开面板看各群摘要/配置监控文件夹;
|
|
1100
|
+
未启用且无数据时整坞隐藏(不占视线)。后端 core/wxdigest.py。 -->
|
|
1101
|
+
<div id="bee-dock" class="hidden">
|
|
1102
|
+
<div id="bee-bubble" class="hidden"></div>
|
|
1103
|
+
<button id="bee-fab" aria-label="群摘要" data-i18n-aria="群摘要" data-i18n-title="群摘要" title="群摘要">
|
|
1104
|
+
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-bee"></use></svg>
|
|
1105
|
+
<span id="bee-badge" class="hidden"></span>
|
|
1106
|
+
</button>
|
|
1107
|
+
</div>
|
|
1108
|
+
<div id="bee-panel" class="hidden" role="dialog" aria-label="群摘要" data-i18n-aria="群摘要">
|
|
1109
|
+
<div class="bee-head">
|
|
1110
|
+
<svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg>
|
|
1111
|
+
<b data-i18n="群摘要">群摘要</b>
|
|
1112
|
+
<span class="spacer"></span>
|
|
1113
|
+
<button id="bee-cfg-btn" class="icon-btn" aria-label="设置" data-i18n-aria="设置" data-i18n-title="设置" title="设置"><svg class="ico" aria-hidden="true"><use href="#i-gear"></use></svg></button>
|
|
1114
|
+
<button id="bee-scan-btn" class="icon-btn" aria-label="立即扫描" data-i18n-aria="立即扫描" data-i18n-title="立即扫描" title="立即扫描"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg></button>
|
|
1115
|
+
<button id="bee-x" class="icon-btn" aria-label="关闭" data-i18n-aria="关闭" data-i18n-title="关闭" title="关闭">✕</button>
|
|
1116
|
+
</div>
|
|
1117
|
+
<div id="bee-list" class="bee-list"></div>
|
|
1118
|
+
<div id="bee-cfg" class="bee-cfg hidden">
|
|
1119
|
+
<label class="toggle"><input id="bee-enabled" type="checkbox"> <span data-i18n="启用定时扫描">启用定时扫描</span></label>
|
|
1120
|
+
<label class="toggle"><input id="bee-reader" type="checkbox"> <span data-i18n="从本机微信自动拉取(微信直连)">从本机微信自动拉取(微信直连)</span></label>
|
|
1121
|
+
<div id="bee-reader-box" class="hidden">
|
|
1122
|
+
<span class="bee-lab" data-i18n="64 位 Python 路径(需装 wechatauto-replica)">64 位 Python 路径(需装 wechatauto-replica)</span>
|
|
1123
|
+
<input id="bee-reader-py" type="text" spellcheck="false" data-i18n-ph="例如 C:\Users\HP\anaconda3\envs\wxprobe\python.exe" placeholder="例如 C:\Users\HP\anaconda3\envs\wxprobe\python.exe">
|
|
1124
|
+
<div class="bee-dir-row">
|
|
1125
|
+
<button id="bee-groups-btn" class="ghost small" data-i18n="选择要监听的群(0)">选择要监听的群(0)</button>
|
|
1126
|
+
</div>
|
|
1127
|
+
<div id="bee-groups-box" class="hidden">
|
|
1128
|
+
<div class="bee-groups-head">
|
|
1129
|
+
<input id="bee-groups-search" type="text" spellcheck="false" data-i18n-ph="搜索群名" placeholder="搜索群名">
|
|
1130
|
+
<button id="bee-groups-refresh" class="ghost small" data-i18n="刷新群列表">刷新群列表</button>
|
|
1131
|
+
</div>
|
|
1132
|
+
<div id="bee-groups-list" class="bee-groups-list"></div>
|
|
1133
|
+
</div>
|
|
1134
|
+
</div>
|
|
1135
|
+
<span class="bee-lab" data-i18n="监控文件夹">监控文件夹</span>
|
|
1136
|
+
<div class="bee-dir-row">
|
|
1137
|
+
<input id="bee-dir" type="text" spellcheck="false" placeholder="D:\wx-exports">
|
|
1138
|
+
<button id="bee-dir-pick" class="ghost small" data-i18n-title="浏览…" title="浏览…">…</button>
|
|
1139
|
+
</div>
|
|
1140
|
+
<div class="bee-row2">
|
|
1141
|
+
<label><span data-i18n="间隔(分钟)">间隔(分钟)</span><input id="bee-interval" type="number" min="5" max="1440"></label>
|
|
1142
|
+
<label><span data-i18n="窗口字数">窗口字数</span><input id="bee-maxchars" type="number" min="4000" max="60000" step="1000"></label>
|
|
1143
|
+
</div>
|
|
1144
|
+
<div id="bee-status" class="bee-status"></div>
|
|
1145
|
+
<button id="bee-save" class="primary small" data-i18n="保存设置">保存设置</button>
|
|
1146
|
+
<p class="bee-note" data-i18n="导出 txt 丢进监控文件夹,或开启微信直连由蜜蜂自动拉取;按间隔增量生成每群摘要。记录只存本地;摘要请求会发给当前绑定的模型,桌面小蜜蜂会提醒新摘要。">导出 txt 丢进监控文件夹,或开启微信直连由蜜蜂自动拉取;按间隔增量生成每群摘要。记录只存本地;摘要请求会发给当前绑定的模型,桌面小蜜蜂会提醒新摘要。</p>
|
|
1147
|
+
</div>
|
|
1148
|
+
</div>
|
|
1149
|
+
|
|
1150
|
+
<script src="qrcode.js"></script>
|
|
1151
|
+
<script src="i18n.js"></script>
|
|
1152
|
+
<script src="app.js"></script>
|
|
1153
|
+
</body>
|
|
1154
|
+
</html>
|