codebee 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +392 -0
- package/app/__init__.py +0 -0
- package/app/core/__init__.py +0 -0
- package/app/core/attachments.py +322 -0
- package/app/core/automation.py +585 -0
- package/app/core/bookmeta.py +296 -0
- package/app/core/capability.py +130 -0
- package/app/core/catalog.py +319 -0
- package/app/core/compaction.py +186 -0
- package/app/core/diagnostics.py +115 -0
- package/app/core/env_scrub.py +84 -0
- package/app/core/error_codes.py +65 -0
- package/app/core/flows.py +328 -0
- package/app/core/gitmod.py +949 -0
- package/app/core/goal_service.py +159 -0
- package/app/core/health.py +294 -0
- package/app/core/history.py +32 -0
- package/app/core/jobs.py +424 -0
- package/app/core/manager.py +1415 -0
- package/app/core/market.py +299 -0
- package/app/core/market_remote.py +896 -0
- package/app/core/mocks.py +64 -0
- package/app/core/modelhub.py +2750 -0
- package/app/core/paths.py +60 -0
- package/app/core/pipeline.py +2161 -0
- package/app/core/planner.py +493 -0
- package/app/core/registry.py +105 -0
- package/app/core/remote.py +303 -0
- package/app/core/repeat_guard.py +124 -0
- package/app/core/router.py +120 -0
- package/app/core/runner.py +856 -0
- package/app/core/selfupdate.py +170 -0
- package/app/core/session_log.py +162 -0
- package/app/core/sessions.py +312 -0
- package/app/core/settings.py +85 -0
- package/app/core/settings_schema.py +250 -0
- package/app/core/skillpacks/fanqie-novel.md +80 -0
- package/app/core/skillpacks/market/character-bible.md +66 -0
- package/app/core/skillpacks/market/code-risk-checklist.md +58 -0
- package/app/core/skillpacks/market/git-workflow.md +57 -0
- package/app/core/skillpacks/market/release-notes.md +72 -0
- package/app/core/skillpacks/market/weekly-report.md +71 -0
- package/app/core/skillpacks/market/worldview-consistency.md +70 -0
- package/app/core/skillpacks/qimao-signing.md +105 -0
- package/app/core/skills.py +649 -0
- package/app/core/step_runner.py +61 -0
- package/app/core/store.py +1321 -0
- package/app/core/token_meter.py +130 -0
- package/app/core/usage.py +450 -0
- package/app/main.py +1448 -0
- package/app/ui/app.js +8021 -0
- package/app/ui/i18n.js +1709 -0
- package/app/ui/icons/brand-horizontal.png +0 -0
- package/app/ui/icons/brand-square.png +0 -0
- package/app/ui/icons/icon-192.png +0 -0
- package/app/ui/icons/icon-512.png +0 -0
- package/app/ui/icons/logo-horizontal.png +0 -0
- package/app/ui/icons/logo-mark.png +0 -0
- package/app/ui/index.html +864 -0
- package/app/ui/manifest.json +16 -0
- package/app/ui/qrcode.js +2297 -0
- package/app/ui/style.css +2733 -0
- package/bin/tutti.js +121 -0
- package/package.json +39 -0
|
@@ -0,0 +1,864 @@
|
|
|
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
|
+
<script>
|
|
19
|
+
(function () {
|
|
20
|
+
try {
|
|
21
|
+
document.documentElement.dataset.skin = localStorage.getItem("orch.skin") || "ocean";
|
|
22
|
+
document.documentElement.dataset.theme = localStorage.getItem("orch.theme") === "dark" ? "dark" : "light";
|
|
23
|
+
document.documentElement.dataset.lang = localStorage.getItem("orch.lang") === "en" ? "en" : "zh";
|
|
24
|
+
document.documentElement.lang = document.documentElement.dataset.lang === "en" ? "en" : "zh-CN";
|
|
25
|
+
} catch (e) {
|
|
26
|
+
document.documentElement.dataset.skin = "ocean";
|
|
27
|
+
document.documentElement.dataset.theme = "light";
|
|
28
|
+
document.documentElement.dataset.lang = "zh";
|
|
29
|
+
}
|
|
30
|
+
})();
|
|
31
|
+
</script>
|
|
32
|
+
</head>
|
|
33
|
+
<body>
|
|
34
|
+
<!-- ================= 图标精灵:统一线性图标(stroke=currentColor,随主题与 hover 自动变色) ================= -->
|
|
35
|
+
<svg id="icon-sprite" aria-hidden="true" focusable="false">
|
|
36
|
+
<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>
|
|
37
|
+
<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>
|
|
38
|
+
<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>
|
|
39
|
+
<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>
|
|
40
|
+
<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>
|
|
41
|
+
<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>
|
|
42
|
+
<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>
|
|
43
|
+
<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>
|
|
44
|
+
<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>
|
|
45
|
+
<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>
|
|
46
|
+
<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>
|
|
47
|
+
<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>
|
|
48
|
+
<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>
|
|
49
|
+
<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>
|
|
50
|
+
<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>
|
|
51
|
+
<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>
|
|
52
|
+
<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>
|
|
53
|
+
<symbol id="i-arrow-left" viewBox="0 0 24 24"><path d="M19 12H5"/><path d="m12 19-7-7 7-7"/></symbol>
|
|
54
|
+
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 6h16"/><path d="M4 12h16"/><path d="M4 18h16"/></symbol>
|
|
55
|
+
<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>
|
|
56
|
+
<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>
|
|
57
|
+
<symbol id="i-check" viewBox="0 0 24 24"><path d="m4.5 12.5 5 5 10-11"/></symbol>
|
|
58
|
+
<symbol id="i-chevron-r" viewBox="0 0 24 24"><path d="m9 5 7 7-7 7"/></symbol>
|
|
59
|
+
<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>
|
|
60
|
+
<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>
|
|
61
|
+
<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>
|
|
62
|
+
<symbol id="i-x" viewBox="0 0 24 24"><path d="M6 6l12 12"/><path d="M18 6 6 18"/></symbol>
|
|
63
|
+
<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>
|
|
64
|
+
<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>
|
|
65
|
+
<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>
|
|
66
|
+
<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>
|
|
67
|
+
<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>
|
|
68
|
+
<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>
|
|
69
|
+
<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>
|
|
70
|
+
<symbol id="i-grip" viewBox="0 0 24 24"><path d="M4 7h16"/><path d="M4 12h16"/><path d="M4 17h16"/></symbol>
|
|
71
|
+
<symbol id="i-arrow-up" viewBox="0 0 24 24"><path d="M12 19V5"/><path d="m5 12 7-7 7 7"/></symbol>
|
|
72
|
+
<symbol id="i-baton" viewBox="0 0 24 24">
|
|
73
|
+
<path d="M6.8 17.2 13.6 8.2" stroke-width="2.4"/>
|
|
74
|
+
<circle cx="5.2" cy="18.8" r="2.6" fill="currentColor" stroke="none"/>
|
|
75
|
+
<circle cx="16" cy="5.9" r="1.6" fill="currentColor" stroke="none"/>
|
|
76
|
+
<circle cx="19.9" cy="4.3" r="2" fill="currentColor" stroke="none"/>
|
|
77
|
+
<circle cx="21.6" cy="8.9" r="2.3" fill="currentColor" stroke="none"/>
|
|
78
|
+
</symbol>
|
|
79
|
+
<!-- 任务类型图标(flows.py 预置流程 icon 字段引用;stroke=currentColor 黑白随主题) -->
|
|
80
|
+
<symbol id="i-code" viewBox="0 0 24 24"><path d="m4 17 6-5-6-5"/><path d="M12 19h8"/></symbol>
|
|
81
|
+
<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>
|
|
82
|
+
<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>
|
|
83
|
+
<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>
|
|
84
|
+
<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>
|
|
85
|
+
<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>
|
|
86
|
+
<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>
|
|
87
|
+
<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>
|
|
88
|
+
<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>
|
|
89
|
+
<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>
|
|
90
|
+
<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>
|
|
91
|
+
<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>
|
|
92
|
+
<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>
|
|
93
|
+
<!-- 任务详情面板开合(#btn-insp):箭头方向由 CSS 变量穿透 use 影子树切换,开着=‹ 收起,关着=› 展开 -->
|
|
94
|
+
<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>
|
|
95
|
+
</svg>
|
|
96
|
+
<div id="drawer-mask" aria-hidden="true"></div>
|
|
97
|
+
<div id="app">
|
|
98
|
+
|
|
99
|
+
<!-- ================= 侧栏 ================= -->
|
|
100
|
+
<aside id="sidebar">
|
|
101
|
+
<!-- 常规视图:任务树 -->
|
|
102
|
+
<div class="side-main">
|
|
103
|
+
<div class="brand" title="CodeBee · 多智能体编排台" data-i18n-title="CodeBee · 多智能体编排台">
|
|
104
|
+
<span class="brand-name">CodeBee</span>
|
|
105
|
+
</div>
|
|
106
|
+
<button id="btn-new-task" class="new-task"><span class="nt-label" data-i18n="+ 新任务">+ 新任务</span><span class="kbd" aria-hidden="true">N</span></button>
|
|
107
|
+
<button class="side-search" id="btn-cmdk" title="搜索" data-i18n-title="搜索">
|
|
108
|
+
<svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>
|
|
109
|
+
<span class="ss-label" data-i18n="搜索">搜索</span>
|
|
110
|
+
<span class="kbd" aria-hidden="true">Ctrl K</span>
|
|
111
|
+
</button>
|
|
112
|
+
<div class="side-quick">
|
|
113
|
+
<button class="qitem" id="btn-q-automation" title="自动化" data-i18n-title="自动化">
|
|
114
|
+
<svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg>
|
|
115
|
+
<span data-i18n="自动化">自动化</span>
|
|
116
|
+
</button>
|
|
117
|
+
<button class="qitem" id="btn-q-market" title="插件市场" data-i18n-title="插件市场">
|
|
118
|
+
<svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>
|
|
119
|
+
<span data-i18n="插件市场">插件市场</span>
|
|
120
|
+
</button>
|
|
121
|
+
</div>
|
|
122
|
+
<div class="side-section tasks">
|
|
123
|
+
<div class="side-label-row">
|
|
124
|
+
<div data-i18n="任务" class="side-label">任务</div>
|
|
125
|
+
<button id="btn-side-expand" class="foot-btn notify-toggle" title="展开全部" aria-label="展开全部"
|
|
126
|
+
data-i18n-title="展开全部" data-i18n-aria="展开全部">
|
|
127
|
+
<svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg>
|
|
128
|
+
</button>
|
|
129
|
+
<button id="btn-side-arch" class="foot-btn notify-toggle arch-toggle" title="显示已归档" aria-label="显示已归档"
|
|
130
|
+
data-i18n-title="显示已归档" data-i18n-aria="显示已归档">
|
|
131
|
+
<svg class="ico" aria-hidden="true"><use href="#i-history"></use></svg>
|
|
132
|
+
</button>
|
|
133
|
+
<button id="btn-notify-toggle" class="foot-btn notify-toggle" title="完成/待裁决提示音" aria-label="完成/待裁决提示音"
|
|
134
|
+
data-i18n-title="完成/待裁决提示音" data-i18n-aria="完成/待裁决提示音">
|
|
135
|
+
<svg class="ico" aria-hidden="true"><use href="#i-bell"></use></svg>
|
|
136
|
+
</button>
|
|
137
|
+
</div>
|
|
138
|
+
<div id="side-tasks" class="side-tasks"></div>
|
|
139
|
+
</div>
|
|
140
|
+
<div class="side-foot">
|
|
141
|
+
<button id="btn-settings" class="foot-btn" title="设置" aria-label="设置" data-i18n-aria="设置" data-i18n-title="设置">
|
|
142
|
+
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-gear"></use></svg>
|
|
143
|
+
</button>
|
|
144
|
+
<!-- 中间:CodeBee 自己的智能体(编排者)当前用的厂商;点击到设置里的「编排设置」更换 -->
|
|
145
|
+
<button id="btn-prov-side" class="foot-prov">
|
|
146
|
+
<span id="prov-side-dot" class="pdot"></span>
|
|
147
|
+
<span data-i18n="未选厂商" id="prov-side-text" class="nm">未选厂商</span>
|
|
148
|
+
<span id="prov-side-badge" class="pbadge hidden"></span>
|
|
149
|
+
</button>
|
|
150
|
+
<button id="btn-phone-side" class="foot-btn" title="手机连接(扫码用手机打开 CodeBee)" aria-label="手机连接" data-i18n-aria="手机连接" data-i18n-title="手机连接(扫码用手机打开 CodeBee)">
|
|
151
|
+
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-phone"></use></svg>
|
|
152
|
+
</button>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
<!-- 文件浏览视图:右键文件夹「查看文件」进入,左栏整体换成该目录的文件树 -->
|
|
156
|
+
<div class="side-files">
|
|
157
|
+
<button id="btn-files-back" class="set-back" data-i18n="返回任务列表">
|
|
158
|
+
<svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回任务列表
|
|
159
|
+
</button>
|
|
160
|
+
<div class="sf-head" id="sf-dir-row" title="">
|
|
161
|
+
<svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg>
|
|
162
|
+
<span id="sf-dir" class="sf-title"></span>
|
|
163
|
+
<span id="sf-count" class="sf-count"></span>
|
|
164
|
+
</div>
|
|
165
|
+
<div id="sf-body" class="sf-body"></div>
|
|
166
|
+
</div>
|
|
167
|
+
<!-- 设置视图:左栏整体变成设置导航 -->
|
|
168
|
+
<div class="side-settings">
|
|
169
|
+
<button id="btn-set-back" class="set-back" data-i18n="返回 CodeBee">
|
|
170
|
+
<svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回 CodeBee
|
|
171
|
+
</button>
|
|
172
|
+
<div data-i18n="编排" class="set-group">编排</div>
|
|
173
|
+
<button class="set-item active" data-sub="tasks" data-i18n="任务"><svg class="ico" aria-hidden="true"><use href="#i-tasks"></use></svg>任务</button>
|
|
174
|
+
<button class="set-item" data-sub="runs" data-i18n="运行记录"><svg class="ico" aria-hidden="true"><use href="#i-history"></use></svg>运行记录</button>
|
|
175
|
+
<button class="set-item" data-sub="automation" data-i18n="自动化"><svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg>自动化</button>
|
|
176
|
+
<button class="set-item" data-sub="usage" data-i18n="用量统计"><svg class="ico" aria-hidden="true"><use href="#i-chart"></use></svg>用量统计</button>
|
|
177
|
+
<div data-i18n="配置" class="set-group">配置</div>
|
|
178
|
+
<button class="set-item" data-sub="agents" data-i18n="智能体管理"><svg class="ico" aria-hidden="true"><use href="#i-cpu"></use></svg>智能体管理</button>
|
|
179
|
+
<button class="set-item" data-sub="models" data-i18n="模型接入"><svg class="ico" aria-hidden="true"><use href="#i-layers"></use></svg>模型接入</button>
|
|
180
|
+
<button class="set-item" data-sub="bindings" data-i18n="CLI 绑定"><svg class="ico" aria-hidden="true"><use href="#i-link"></use></svg>CLI 绑定</button>
|
|
181
|
+
<button class="set-item" data-sub="skills" data-i18n="经验库"><svg class="ico" aria-hidden="true"><use href="#i-book"></use></svg>经验库</button>
|
|
182
|
+
<button class="set-item" data-sub="market" data-i18n="插件市场"><svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>插件市场</button>
|
|
183
|
+
<button class="set-item" data-sub="orch" data-i18n="编排设置"><svg class="ico" aria-hidden="true"><use href="#i-workflow"></use></svg>编排设置</button>
|
|
184
|
+
<div data-i18n="外观" class="set-group">外观</div>
|
|
185
|
+
<button class="set-item" data-sub="appearance" data-i18n="皮肤"><svg class="ico" aria-hidden="true"><use href="#i-palette"></use></svg>皮肤</button>
|
|
186
|
+
<div data-i18n="软件" class="set-group">软件</div>
|
|
187
|
+
<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>
|
|
188
|
+
<div data-i18n="远程" class="set-group">远程</div>
|
|
189
|
+
<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>
|
|
190
|
+
</div>
|
|
191
|
+
</aside>
|
|
192
|
+
|
|
193
|
+
<!-- ================= 主栏 ================= -->
|
|
194
|
+
<div id="mainwrap">
|
|
195
|
+
<header class="topbar">
|
|
196
|
+
<button id="btn-menu" class="icon-btn" title="收起 / 展开侧栏" aria-label="收起 / 展开侧栏" data-i18n-aria="收起 / 展开侧栏" data-i18n-title="收起 / 展开侧栏">
|
|
197
|
+
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-menu"></use></svg>
|
|
198
|
+
</button>
|
|
199
|
+
<button id="upd-pill" class="pill upd-pill hidden" onclick="switchTab('about')" title="发现新版本,点击前往更新" aria-label="发现新版本" data-i18n-title="发现新版本,点击前往更新" data-i18n-aria="发现新版本">
|
|
200
|
+
<svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span id="upd-pill-txt"></span>
|
|
201
|
+
<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>
|
|
202
|
+
</button>
|
|
203
|
+
<div data-i18n="任务" id="page-title" class="page-title">任务</div>
|
|
204
|
+
<div id="health-banner" class="health-banner hidden" onclick="healthBannerClick()" title="供应商健康告警" aria-label="供应商健康告警" data-i18n-title="供应商健康告警" data-i18n-aria="供应商健康告警"></div>
|
|
205
|
+
<div class="top-actions">
|
|
206
|
+
<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>
|
|
207
|
+
<!-- 语言快捷切换:语言名用母语写死(中文/English),刻意不做 i18n——任何母语的人都要能读懂并选中 -->
|
|
208
|
+
<div class="lang-wrap">
|
|
209
|
+
<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>
|
|
210
|
+
<div id="lang-menu" class="lang-menu hidden" role="listbox" aria-label="语言 / Language" data-i18n-aria="语言 / Language">
|
|
211
|
+
<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>
|
|
212
|
+
<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>
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
<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>
|
|
216
|
+
<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>
|
|
217
|
+
<!-- 详情面板开关:贴动作组最右 = 紧挨面板弹出的那一侧,空间映射一致 -->
|
|
218
|
+
<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>
|
|
219
|
+
<div data-i18n="连接中…" id="conn" class="conn">连接中…</div>
|
|
220
|
+
</div>
|
|
221
|
+
</header>
|
|
222
|
+
|
|
223
|
+
<main>
|
|
224
|
+
<!-- ================= 设置页(导航在左栏,内容为居中窄栏) ================= -->
|
|
225
|
+
<section id="page-settings" class="page">
|
|
226
|
+
<div id="sub-tasks" class="subpage">
|
|
227
|
+
<div class="panel wide composer">
|
|
228
|
+
<div class="hero-row">
|
|
229
|
+
<h2 class="hero" id="cmp-greet">上午好呀,有什么想让我帮忙的吗</h2>
|
|
230
|
+
<button type="button" id="btn-wizard" class="ghost small" data-i18n="✨ 向导创建" data-i18n-title="三问一确认:目标 → 类型 → 目录,预填进表单" title="三问一确认:目标 → 类型 → 目录,预填进表单" onclick="openTaskWizard()">✨ 向导创建</button>
|
|
231
|
+
</div>
|
|
232
|
+
<p data-i18n="一句话目标即可 —— CodeBee 自动拆解、智能路由、执行、验证并跨厂商评审。" class="hint hero-sub">一句话目标即可 —— CodeBee 自动拆解、智能路由、执行、验证并跨厂商评审。</p>
|
|
233
|
+
<div class="form">
|
|
234
|
+
<!-- 胶囊行(ZCode 式):类型 / 工作目录一眼可见、点胶囊就地改。
|
|
235
|
+
值真源仍是 #f-type / #f-workdir(既有 ID,联动与测试锚点全兼容)。 -->
|
|
236
|
+
<div class="cmp-pills">
|
|
237
|
+
<div class="type-wrap">
|
|
238
|
+
<select id="f-type" class="hidden" tabindex="-1" aria-hidden="true"></select>
|
|
239
|
+
<button type="button" id="f-type-btn" class="type-pick" onclick="toggleTypeMenu()" aria-haspopup="listbox" aria-controls="type-menu">
|
|
240
|
+
<span class="tp-ico" id="f-type-ico" aria-hidden="true"></span>
|
|
241
|
+
<span class="tp-name" id="f-type-name"></span>
|
|
242
|
+
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
243
|
+
</button>
|
|
244
|
+
<div id="type-menu" class="type-menu hidden" role="listbox" aria-label="任务类型" data-i18n-aria="任务类型"></div>
|
|
245
|
+
</div>
|
|
246
|
+
<button type="button" class="ghost small" id="btn-flows-mgr" data-i18n="管理" data-i18n-title="管理任务类型:新增/编辑自定义流程" title="管理任务类型:新增/编辑自定义流程" onclick="openFlowsManager()">管理</button>
|
|
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="留空则保存到默认路径;或填绝对路径,例 E:\GoOut\my-project" data-i18n-ph="留空则保存到默认路径;或填绝对路径,例 E:\GoOut\my-project">
|
|
251
|
+
<button data-i18n="选择…" class="ghost small" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('f-workdir')">选择…</button>
|
|
252
|
+
</div>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
<p class="hint cmp-hint" id="f-workdir-hint"></p>
|
|
256
|
+
<!-- 工作目录指向 git 仓库时出现(probeGit 显隐):运行时检出任务分支 -->
|
|
257
|
+
<div class="field hidden" id="row-git">
|
|
258
|
+
<label data-i18n="代码版本"><svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>代码版本</label>
|
|
259
|
+
<select id="f-git-rev"></select>
|
|
260
|
+
<p class="hint" id="git-hint"></p>
|
|
261
|
+
</div>
|
|
262
|
+
<!-- Composer 大输入框:附件在左下、发送在右下;Enter 发送,Shift+Enter 换行 -->
|
|
263
|
+
<div class="cmp-box">
|
|
264
|
+
<textarea id="f-goal" rows="3" placeholder="要完成什么,一句话即可" required data-i18n-ph="要完成什么,一句话即可"></textarea>
|
|
265
|
+
<div class="cmp-bar">
|
|
266
|
+
<div class="att-strip">
|
|
267
|
+
<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>
|
|
268
|
+
<span class="att-hint" data-i18n="也可直接粘贴截图">也可直接粘贴截图</span>
|
|
269
|
+
<div id="att-chips" class="att-chips"></div>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="cmp-send">
|
|
272
|
+
<span id="create-msg" class="msg"></span>
|
|
273
|
+
<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>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
<input type="file" id="f-attach-file" class="hidden" multiple>
|
|
277
|
+
</div>
|
|
278
|
+
<!-- 快捷类型:点一个即选定并聚焦目标框(renderQuickChips 渲染) -->
|
|
279
|
+
<div id="cmp-quick" class="cmp-quick" role="group" aria-label="常用类型" data-i18n-aria="常用类型"></div>
|
|
280
|
+
<div class="field hidden" id="row-resume-session">
|
|
281
|
+
<label data-i18n="选择会话">选择会话</label>
|
|
282
|
+
<select id="f-resume-session"><option data-i18n="(加载中…)">(加载中…)</option></select>
|
|
283
|
+
<p class="hint" id="resume-session-hint"></p>
|
|
284
|
+
</div>
|
|
285
|
+
|
|
286
|
+
<details id="f-advanced">
|
|
287
|
+
<summary data-i18n="高级选项(默认全智能,无需改动)">高级选项(默认全智能,无需改动)</summary>
|
|
288
|
+
<div class="adv-body">
|
|
289
|
+
<div class="grid-2">
|
|
290
|
+
<div class="field">
|
|
291
|
+
<label data-i18n="继续会话">继续会话</label>
|
|
292
|
+
<select id="f-resume-agent">
|
|
293
|
+
<option data-i18n="不沿用(全新开始)" value="">不沿用(全新开始)</option>
|
|
294
|
+
</select>
|
|
295
|
+
</div>
|
|
296
|
+
<div class="field"><label data-i18n="任务标题">任务标题</label><input id="f-title" placeholder="可空,自动取目标首行" data-i18n-ph="可空,自动取目标首行"></div>
|
|
297
|
+
</div>
|
|
298
|
+
<div class="field"><label data-i18n="上下文">上下文</label><textarea id="f-context" rows="2" placeholder="背景信息、约束、相关文件(可空)" data-i18n-ph="背景信息、约束、相关文件(可空)"></textarea></div>
|
|
299
|
+
<div class="field">
|
|
300
|
+
<label data-i18n="编排模式">编排模式</label>
|
|
301
|
+
<select id="f-mode">
|
|
302
|
+
<option data-i18n="智能(推荐):自动拆解 + 智能路由 + 失败自动修复/换将" value="auto">智能(推荐):自动拆解 + 智能路由 + 失败自动修复/换将</option>
|
|
303
|
+
<option data-i18n="手动:自行指定实现者与评审组" value="manual">手动:自行指定实现者与评审组</option>
|
|
304
|
+
</select>
|
|
305
|
+
</div>
|
|
306
|
+
|
|
307
|
+
<div id="f-code-only">
|
|
308
|
+
<div class="field"><label data-i18n="验证命令">验证命令</label><input id="f-verify" placeholder="例:python -m pytest -q(可空=只评审)" data-i18n-ph="例:python -m pytest -q(可空=只评审)"></div>
|
|
309
|
+
</div>
|
|
310
|
+
<div id="f-review-only" class="hidden">
|
|
311
|
+
<div class="grid-3">
|
|
312
|
+
<div class="field"><label data-i18n="稿件文件(合并稿)">稿件文件(合并稿)</label><input id="f-manuscript" value="manuscript.md" placeholder="工作目录内的文件名" data-i18n-ph="工作目录内的文件名"></div>
|
|
313
|
+
<div class="field"><label data-i18n="评审轮数">评审轮数</label><input id="f-rounds" type="number" value="2" min="1" max="5"></div>
|
|
314
|
+
<div class="field"><label data-i18n="发布阈值(全书)">发布阈值(全书)</label><input id="f-threshold" type="number" value="7.0" min="1" max="10" step="0.5"></div>
|
|
315
|
+
</div>
|
|
316
|
+
<div class="field"><label data-i18n="评审维度(逗号分隔,可自定义)">评审维度(逗号分隔,可自定义)</label><input id="f-rubric" placeholder="例:情节, 人物, 文笔" data-i18n-ph="例:情节, 人物, 文笔"></div>
|
|
317
|
+
<div class="grid-2">
|
|
318
|
+
<div class="field"><label data-i18n="连载模式:章节数(空 = 单稿件一次成文)">连载模式:章节数(空 = 单稿件一次成文)</label><input id="f-chapters" type="number" min="2" max="20" placeholder="例:8(逐章起草+评审+修订)" data-i18n-ph="例:8(逐章起草+评审+修订)"></div>
|
|
319
|
+
<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>
|
|
320
|
+
<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>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
|
|
324
|
+
<div id="f-manual-only" class="hidden">
|
|
325
|
+
<div class="grid-2">
|
|
326
|
+
<div class="field"><label data-i18n="实现者">实现者</label><select id="f-impl"></select></div>
|
|
327
|
+
<div class="field" id="critic-box"><label data-i18n="评审组">评审组</label><div id="f-critics" class="chips"></div></div>
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
</div>
|
|
331
|
+
</details>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
|
|
336
|
+
<!-- 运行记录 -->
|
|
337
|
+
<div id="sub-runs" class="subpage hidden">
|
|
338
|
+
<div class="panel wide">
|
|
339
|
+
<div class="panel-head">
|
|
340
|
+
<h2 data-i18n="运行记录">运行记录</h2>
|
|
341
|
+
<div class="actions">
|
|
342
|
+
<button data-i18n="全部清除" id="btn-clear-runs" class="danger small" onclick="clearRuns()" title="删除全部已结束的运行记录(运行中的会保留)" data-i18n-title="删除全部已结束的运行记录(运行中的会保留)">全部清除</button>
|
|
343
|
+
</div>
|
|
344
|
+
</div>
|
|
345
|
+
<div id="run-list" class="list"></div>
|
|
346
|
+
</div>
|
|
347
|
+
<!-- 运行详情:头部(标题/状态/操作/统计)+ 标签分区 + 贴底日志抽屉。
|
|
348
|
+
分区内容的 hidden 语义不变(没数据整块收起);标签页只切外层 pane。 -->
|
|
349
|
+
<div id="run-detail" class="panel wide hidden">
|
|
350
|
+
<div class="detail-head">
|
|
351
|
+
<button id="btn-back" class="ghost" data-i18n="返回"><svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回</button>
|
|
352
|
+
<h2 id="rd-title"></h2>
|
|
353
|
+
<span id="rd-status" class="chip"></span>
|
|
354
|
+
<div class="rd-actions">
|
|
355
|
+
<button id="btn-pause" class="ghost hidden" data-i18n="暂停">暂停</button>
|
|
356
|
+
<button data-i18n="取消运行" id="btn-cancel" class="danger hidden">取消运行</button>
|
|
357
|
+
<button data-i18n="↻ 重试任务" id="btn-retry" class="primary hidden">↻ 重试任务</button>
|
|
358
|
+
<button data-i18n="✎ 编辑重试" id="btn-editretry" class="ghost hidden" data-i18n-title="取回原任务的目标/目录/评审设置,修改后提交即重新开跑" title="取回原任务的目标/目录/评审设置,修改后提交即重新开跑">✎ 编辑重试</button>
|
|
359
|
+
<button data-i18n="继续连载" id="btn-continue" class="ghost hidden">继续连载</button>
|
|
360
|
+
<button data-i18n="基于此任务新建" id="btn-newfrom" class="ghost hidden">基于此任务新建</button>
|
|
361
|
+
<button data-i18n="删除记录" id="btn-delete" class="danger hidden">删除记录</button>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
<div id="rd-meta" class="stats rd-meta-strip"></div>
|
|
365
|
+
<div id="rd-tabs" class="rd-tabs" role="tablist" data-i18n-aria="详情分区">
|
|
366
|
+
<button class="rd-tab" data-tab="chat" data-i18n="对话">对话<span class="rd-badge hidden"></span></button>
|
|
367
|
+
<button class="rd-tab" data-tab="hive" data-i18n="蜂巢">蜂巢<span class="rd-badge hidden"></span></button>
|
|
368
|
+
<button class="rd-tab" data-tab="steps" data-i18n="步骤">步骤<span class="rd-badge hidden"></span></button>
|
|
369
|
+
<button class="rd-tab" data-tab="result" data-i18n="成果">成果<span class="rd-badge hidden"></span></button>
|
|
370
|
+
<button class="rd-tab" data-tab="git" data-i18n="Git">Git<span class="rd-badge hidden"></span></button>
|
|
371
|
+
<button class="rd-tab" data-tab="bible" data-i18n="圣经">圣经<span class="rd-badge hidden"></span></button>
|
|
372
|
+
<button class="rd-tab" data-tab="bookmeta" data-i18n="作品信息">作品信息<span class="rd-badge hidden"></span></button>
|
|
373
|
+
</div>
|
|
374
|
+
<div class="rd-main">
|
|
375
|
+
<!-- 对话分区(直连任务默认):用户消息与 CLI 输出混排的时间线 + 贴底追话框。
|
|
376
|
+
运行中发出去走信箱(下一步送达);已结束发出去走 /chat 自动续跑新一轮。 -->
|
|
377
|
+
<div class="rd-pane" data-pane="chat">
|
|
378
|
+
<div id="rd-chat" class="rd-chat hidden">
|
|
379
|
+
<div id="rd-chat-flow" class="rd-chat-flow"></div>
|
|
380
|
+
<div class="rd-chat-bar">
|
|
381
|
+
<textarea id="rd-chat-input" rows="2" data-i18n-ph="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)" placeholder="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)"></textarea>
|
|
382
|
+
<div class="rd-chat-tools">
|
|
383
|
+
<button id="rd-chat-attach" class="ghost small" data-i18n="附件">附件</button>
|
|
384
|
+
<span id="rd-chat-att-list" class="rd-att-list"></span>
|
|
385
|
+
<span id="rd-chat-hint" class="rd-hint"></span>
|
|
386
|
+
<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>
|
|
387
|
+
</div>
|
|
388
|
+
<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" />
|
|
389
|
+
</div>
|
|
390
|
+
</div>
|
|
391
|
+
</div>
|
|
392
|
+
<div class="rd-pane" data-pane="hive">
|
|
393
|
+
<div id="rd-hive" class="rd-hive hidden">
|
|
394
|
+
<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></div>
|
|
395
|
+
<div id="rd-hive-cells" class="hive-cells"></div>
|
|
396
|
+
</div>
|
|
397
|
+
<!-- 运行中指挥信箱:renderDirector 只认活跃 run,渲染时摘掉 hidden;
|
|
398
|
+
与检查器的迷你指挥坞不同屏(详情上下文检查器让位),这里是带附件的完整版 -->
|
|
399
|
+
<div id="rd-direct" class="rd-direct hidden">
|
|
400
|
+
<div class="sec-title"><svg class="ico" aria-hidden="true"><use href="#i-baton"></use></svg><span data-i18n="运行中指挥">运行中指挥</span></div>
|
|
401
|
+
<div id="rd-msgs" class="rd-msgs"></div>
|
|
402
|
+
<div class="rd-composer">
|
|
403
|
+
<textarea id="rd-msg-input" rows="2" data-i18n-ph="补充说明或纠偏,将随下一条智能体步骤下达;可直接粘贴截图" placeholder="补充说明或纠偏,将随下一条智能体步骤下达;可直接粘贴截图"></textarea>
|
|
404
|
+
<div class="rd-composer-bar">
|
|
405
|
+
<button id="rd-attach-btn" class="ghost" data-i18n="附件">附件</button>
|
|
406
|
+
<span id="rd-attach-list" class="rd-att-list"></span>
|
|
407
|
+
<span id="rd-direct-hint" class="rd-hint"></span>
|
|
408
|
+
<button id="rd-send-btn" class="primary" data-i18n="下达指令">下达指令</button>
|
|
409
|
+
</div>
|
|
410
|
+
<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" />
|
|
411
|
+
</div>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
<div class="rd-pane" data-pane="steps">
|
|
415
|
+
<div id="rd-plan" class="hidden"></div>
|
|
416
|
+
<div id="rd-steps" class="steps"></div>
|
|
417
|
+
</div>
|
|
418
|
+
<div class="rd-pane" data-pane="result">
|
|
419
|
+
<h3 data-i18n="报告" class="sec-title">报告</h3>
|
|
420
|
+
<div id="rd-report" class="report"></div>
|
|
421
|
+
<div id="rd-arts" class="rd-arts hidden"></div>
|
|
422
|
+
</div>
|
|
423
|
+
<div class="rd-pane" data-pane="git">
|
|
424
|
+
<div id="rd-git" class="rd-git hidden"></div>
|
|
425
|
+
</div>
|
|
426
|
+
<div class="rd-pane" data-pane="bible">
|
|
427
|
+
<div id="rd-bible" class="rd-bible hidden"></div>
|
|
428
|
+
</div>
|
|
429
|
+
<div class="rd-pane" data-pane="bookmeta">
|
|
430
|
+
<div id="rd-bookmeta" class="rd-bookmeta hidden"></div>
|
|
431
|
+
</div>
|
|
432
|
+
<div id="rd-log" class="logbox rd-logdrawer hidden">
|
|
433
|
+
<div class="log-live-bar">
|
|
434
|
+
<svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>
|
|
435
|
+
<span id="rd-log-step" class="rd-log-step" data-i18n-title="当前日志所属的步骤" title="当前日志所属的步骤"></span>
|
|
436
|
+
<span id="rd-log-live" class="log-live"></span>
|
|
437
|
+
<span id="rd-log-at" class="log-at"></span>
|
|
438
|
+
<span class="spacer"></span>
|
|
439
|
+
<span class="hint" data-i18n="停在底部自动跟随新输出;上翻回看时不动">停在底部自动跟随新输出;上翻回看时不动</span>
|
|
440
|
+
<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>
|
|
441
|
+
</div>
|
|
442
|
+
<pre id="rd-log-text"></pre>
|
|
443
|
+
</div>
|
|
444
|
+
</div>
|
|
445
|
+
</div>
|
|
446
|
+
</div>
|
|
447
|
+
|
|
448
|
+
<!-- 自动化:定时任务 + 模板 -->
|
|
449
|
+
<div id="sub-automation" class="subpage hidden">
|
|
450
|
+
<div class="panel wide">
|
|
451
|
+
<div class="panel-head">
|
|
452
|
+
<h2 data-i18n="自动化">自动化</h2>
|
|
453
|
+
<div class="actions">
|
|
454
|
+
<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>
|
|
455
|
+
<button id="btn-auto-new" class="primary small" title="创建一个按计划自动运行的任务" data-i18n-title="创建一个按计划自动运行的任务"><span data-i18n="新建定时任务">新建定时任务</span></button>
|
|
456
|
+
</div>
|
|
457
|
+
</div>
|
|
458
|
+
<p data-i18n="按计划自动运行任务,或在需要时随时执行。" class="hint">按计划自动运行任务,或在需要时随时执行。</p>
|
|
459
|
+
<div id="auto-filter" class="seg" role="group" aria-label="任务筛选" data-i18n-aria="任务筛选">
|
|
460
|
+
<button data-i18n="全部" class="seg-btn active" data-f="all">全部</button>
|
|
461
|
+
<button data-i18n="进行中" class="seg-btn" data-f="on">进行中</button>
|
|
462
|
+
<button data-i18n="已停用" class="seg-btn" data-f="off">已停用</button>
|
|
463
|
+
</div>
|
|
464
|
+
<div id="auto-list" class="cards"></div>
|
|
465
|
+
<h3 data-i18n="定时任务模板" class="sec-title">定时任务模板</h3>
|
|
466
|
+
<div id="auto-tpl" class="cards auto-tpl-grid"></div>
|
|
467
|
+
</div>
|
|
468
|
+
</div>
|
|
469
|
+
|
|
470
|
+
<!-- 使用统计 -->
|
|
471
|
+
<div id="sub-usage" class="subpage hidden">
|
|
472
|
+
<div class="panel wide">
|
|
473
|
+
<div class="panel-head">
|
|
474
|
+
<h2 data-i18n="使用统计">使用统计<span class="badge2" data-i18n="应用用量">应用用量</span></h2>
|
|
475
|
+
<div class="actions" id="usage-ranges">
|
|
476
|
+
<div class="seg" role="group" aria-label="时间范围" data-i18n-aria="时间范围">
|
|
477
|
+
<button data-i18n="今天" class="seg-btn active" data-days="1">今天</button>
|
|
478
|
+
<button data-i18n="近 7 天" class="seg-btn" data-days="7">近 7 天</button>
|
|
479
|
+
<button data-i18n="近 30 天" class="seg-btn" data-days="30">近 30 天</button>
|
|
480
|
+
<button data-i18n="全部" class="seg-btn" data-days="0">全部</button>
|
|
481
|
+
</div>
|
|
482
|
+
<button id="btn-usage-refresh" class="icon-btn" title="重新拉取" aria-label="重新拉取" data-i18n-aria="重新拉取" data-i18n-title="重新拉取">
|
|
483
|
+
<svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg>
|
|
484
|
+
</button>
|
|
485
|
+
</div>
|
|
486
|
+
</div>
|
|
487
|
+
<p data-i18n="统计所有真实 LLM 调用:编排各角色步骤(规划/实现/评审/修订…)、编排者直连 API、连通性冒烟与 AI 修复;mock 智能体与本地验证不计入。" class="hint">统计所有真实 LLM 调用:编排各角色步骤(规划/实现/评审/修订…)、编排者直连 API、连通性冒烟与 AI 修复;mock 智能体与本地验证不计入。</p>
|
|
488
|
+
<div id="usage-kpis" class="usage-kpis"><p data-i18n="加载中…" class="hint">加载中…</p></div>
|
|
489
|
+
<div id="usage-note"></div>
|
|
490
|
+
<h3 data-i18n="Token 活动" class="sec-title">Token 活动</h3>
|
|
491
|
+
<div class="usage-heat-head">
|
|
492
|
+
<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>
|
|
493
|
+
<div class="seg" id="usage-heat-modes" role="group" aria-label="热力图粒度" data-i18n-aria="热力图粒度">
|
|
494
|
+
<button data-i18n="每日" class="seg-btn active" data-heat="day">每日</button>
|
|
495
|
+
<button data-i18n="每周" class="seg-btn" data-heat="week">每周</button>
|
|
496
|
+
<button data-i18n="累计" class="seg-btn" data-heat="total">累计</button>
|
|
497
|
+
</div>
|
|
498
|
+
</div>
|
|
499
|
+
<div id="usage-heat"></div>
|
|
500
|
+
<h3 data-i18n="每日 Token 趋势图" class="sec-title">每日 Token 趋势图</h3>
|
|
501
|
+
<div id="usage-trend"></div>
|
|
502
|
+
<h3 data-i18n="模型用量" class="sec-title">模型用量</h3>
|
|
503
|
+
<div id="usage-models"></div>
|
|
504
|
+
<div id="usage-dims"></div>
|
|
505
|
+
<h3 data-i18n="最近调用" class="sec-title">最近调用</h3>
|
|
506
|
+
<div id="usage-recent" class="list"></div>
|
|
507
|
+
</div>
|
|
508
|
+
</div>
|
|
509
|
+
|
|
510
|
+
<!-- 智能体管理 -->
|
|
511
|
+
<div id="sub-agents" class="subpage hidden">
|
|
512
|
+
<div class="panel wide">
|
|
513
|
+
<div class="panel-head">
|
|
514
|
+
<h2 data-i18n="智能体目录">智能体目录</h2>
|
|
515
|
+
<div class="actions">
|
|
516
|
+
<button data-i18n="重新加载 catalog" id="btn-reload-catalog" class="ghost">重新加载 catalog</button>
|
|
517
|
+
<button data-i18n="恢复默认 catalog" id="btn-reset-catalog" class="ghost">恢复默认 catalog</button>
|
|
518
|
+
</div>
|
|
519
|
+
</div>
|
|
520
|
+
<p class="hint"><span data-i18n="启用「参与编排」后,该智能体会出现在任务表单与评审组中。进入本页会自动检查各 CLI 是否有新版本;「默认模型」写入 CLI 自己的配置文件(CodeBee 之外也生效),CodeBee 编排运行时用哪个供应商 / 模型请到「CLI 绑定」页配置。安装命令不明的条目可直接编辑">启用「参与编排」后,该智能体会出现在任务表单与评审组中。进入本页会自动检查各 CLI 是否有新版本;「默认模型」写入 CLI 自己的配置文件(CodeBee 之外也生效),CodeBee 编排运行时用哪个供应商 / 模型请到「CLI 绑定」页配置。安装命令不明的条目可直接编辑</span> <code>data/catalog.json</code> <span data-i18n="后点重新加载。">后点重新加载。</span></p>
|
|
521
|
+
<h3 data-i18n="已安装" class="sec-title">已安装</h3>
|
|
522
|
+
<div id="ag-installed" class="cards"></div>
|
|
523
|
+
<h3 data-i18n="可安装" class="sec-title">可安装</h3>
|
|
524
|
+
<div id="ag-installable" class="cards"></div>
|
|
525
|
+
</div>
|
|
526
|
+
</div>
|
|
527
|
+
|
|
528
|
+
<!-- 模型接入 -->
|
|
529
|
+
<div id="sub-models" class="subpage hidden">
|
|
530
|
+
<div class="panel wide">
|
|
531
|
+
<div class="prov-layout">
|
|
532
|
+
<aside class="prov-side">
|
|
533
|
+
<div class="prov-side-head">
|
|
534
|
+
<span data-i18n="供应商">供应商</span>
|
|
535
|
+
<span class="prov-side-ops">
|
|
536
|
+
<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>
|
|
537
|
+
<button data-i18n="导入" id="btn-import" class="ghost small" title="从本机各 AI 工具导入供应商" data-i18n-title="从本机各 AI 工具导入供应商">导入</button>
|
|
538
|
+
<button data-i18n="+" id="btn-add-provider" class="ghost small" title="手动添加供应商" data-i18n-title="手动添加供应商">+</button>
|
|
539
|
+
</span>
|
|
540
|
+
</div>
|
|
541
|
+
<input id="prov-search" class="side-search" type="search" placeholder="搜索供应商…" autocomplete="off" data-i18n-ph="搜索供应商…">
|
|
542
|
+
<div id="prov-list"></div>
|
|
543
|
+
</aside>
|
|
544
|
+
<div class="prov-detail" id="prov-detail"></div>
|
|
545
|
+
</div>
|
|
546
|
+
</div>
|
|
547
|
+
</div>
|
|
548
|
+
|
|
549
|
+
<!-- CLI 绑定 -->
|
|
550
|
+
<div id="sub-bindings" class="subpage hidden">
|
|
551
|
+
<div class="panel wide">
|
|
552
|
+
<div class="panel-head"><h2 data-i18n="CLI 绑定">CLI 绑定</h2></div>
|
|
553
|
+
<p data-i18n="CodeBee 编排运行时的模型都在这里配:模型链可跨厂商混搭——每条自带供应商注入(API key + 地址),第 1 条是主模型、其余按顺序降级,瞬态错误自动切到下一条(可能是另一家厂商)。链空则按供应商默认 / 难度自动选。只影响 CodeBee 发起的调用,不改写 CLI 全局配置(要改默认模型请到「智能体管理」页)。" class="hint">CodeBee 编排运行时的模型都在这里配:模型链可跨厂商混搭——每条自带供应商注入(API key + 地址),第 1 条是主模型、其余按顺序降级,瞬态错误自动切到下一条(可能是另一家厂商)。链空则按供应商默认 / 难度自动选。只影响 CodeBee 发起的调用,不改写 CLI 全局配置(要改默认模型请到「智能体管理」页)。</p>
|
|
554
|
+
<div id="binding-list" class="cards"></div>
|
|
555
|
+
</div>
|
|
556
|
+
</div>
|
|
557
|
+
|
|
558
|
+
<!-- 经验库 -->
|
|
559
|
+
<div id="sub-skills" class="subpage hidden">
|
|
560
|
+
<div class="panel wide">
|
|
561
|
+
<div class="panel-head"><h2 data-i18n="经验库">经验库</h2></div>
|
|
562
|
+
<p class="hint"><span data-i18n="系统自己的经验沉淀:">系统自己的经验沉淀:</span><b data-i18n="内置规范包">内置规范包</b><span data-i18n="(如七猫签约标准,自动注入小说类任务的规划与评审提示词) 与">(如七猫签约标准,自动注入小说类任务的规划与评审提示词)
|
|
563
|
+
与</span><b data-i18n="运行中自动学到的教训">运行中自动学到的教训</b><span data-i18n="(每次任务结束由编排者复盘本次评审暴露的问题,去重沉淀,下次同类任务自动带上)——越跑越好,无需人工维护。">(每次任务结束由编排者复盘本次评审暴露的问题,去重沉淀,下次同类任务自动带上)——越跑越好,无需人工维护。</span></p>
|
|
564
|
+
<h3 data-i18n="内置规范包" class="sec-title">内置规范包</h3>
|
|
565
|
+
<div id="skill-packs" class="cards"></div>
|
|
566
|
+
<h3 class="sec-title"><span data-i18n="自动沉淀的教训">自动沉淀的教训</span> <span class="tag" id="skill-count"></span></h3>
|
|
567
|
+
<div class="cat-chips" id="skill-cat-chips"></div>
|
|
568
|
+
<div id="skill-lessons" class="cards"></div>
|
|
569
|
+
</div>
|
|
570
|
+
</div>
|
|
571
|
+
|
|
572
|
+
<!-- 插件市场:经验包一键安装 + 外部生态目录 -->
|
|
573
|
+
<div id="sub-market" class="subpage hidden">
|
|
574
|
+
<div class="panel wide">
|
|
575
|
+
<div class="panel-head">
|
|
576
|
+
<h2 data-i18n="插件市场">插件市场</h2>
|
|
577
|
+
<span id="mk-count" class="pm-count"></span>
|
|
578
|
+
</div>
|
|
579
|
+
<p data-i18n="用经验包为 CodeBee 扩展写作与工程守则,一键装进经验库。安装即生效,无需手动调用:运行任务时,经验库按插件标注的「适用」自动把内容注入该类任务的提示词;可随时到「经验库」页启用、停用或卸载。" class="hint">用经验包为 CodeBee 扩展写作与工程守则,一键装进经验库。安装即生效,无需手动调用:运行任务时,经验库按插件标注的「适用」自动把内容注入该类任务的提示词;可随时到「经验库」页启用、停用或卸载。</p>
|
|
580
|
+
<div id="mk-view" class="seg mk-view" role="group" aria-label="市场视图" data-i18n-aria="市场视图">
|
|
581
|
+
<button data-i18n="经验包" class="seg-btn active" data-v="local">经验包</button>
|
|
582
|
+
<button data-i18n="外部目录" class="seg-btn" data-v="remote">外部目录</button>
|
|
583
|
+
</div>
|
|
584
|
+
<div id="mk-local">
|
|
585
|
+
<div class="pm-tools mk-tools">
|
|
586
|
+
<input id="mk-search" type="search" placeholder="搜索插件…" data-i18n-ph="搜索插件…" autocomplete="off">
|
|
587
|
+
<select id="mk-cat" aria-label="分类" data-i18n-aria="分类"></select>
|
|
588
|
+
<div id="mk-state" class="seg" role="group" aria-label="安装状态" data-i18n-aria="安装状态">
|
|
589
|
+
<button data-i18n="全部" class="seg-btn active" data-s="all">全部</button>
|
|
590
|
+
<button data-i18n="已安装" class="seg-btn" data-s="installed">已安装</button>
|
|
591
|
+
<button data-i18n="未安装" class="seg-btn" data-s="not">未安装</button>
|
|
592
|
+
</div>
|
|
593
|
+
</div>
|
|
594
|
+
<div id="mk-grid" class="cards mk-grid"></div>
|
|
595
|
+
</div>
|
|
596
|
+
<div id="mk-remote" class="hidden">
|
|
597
|
+
<p data-i18n="外部目录聚合公开生态:ZCode、Anthropic、Anthropic 官方技能、社区多端技能库(Codex / Gemini 兼容)与 ClawHub。本平台只注入纯技能内容(文档型);插件包里的脚本、钩子或 MCP 组件会在安装时自动剥离并告知,绝不会被写入或执行。装好的技能不会单独「运行」,而是作为经验内容自动注入相关任务的提示词。" class="hint">外部目录聚合公开生态:ZCode、Anthropic、Anthropic 官方技能、社区多端技能库(Codex / Gemini 兼容)与 ClawHub。本平台只注入纯技能内容(文档型);插件包里的脚本、钩子或 MCP 组件会在安装时自动剥离并告知,绝不会被写入或执行。装好的技能不会单独「运行」,而是作为经验内容自动注入相关任务的提示词。</p>
|
|
598
|
+
<div class="pm-tools mk-tools">
|
|
599
|
+
<input id="mkr-search" type="search" placeholder="搜索外部插件…" data-i18n-ph="搜索外部插件…" autocomplete="off">
|
|
600
|
+
<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>
|
|
601
|
+
<select id="mkr-source" aria-label="来源" data-i18n-aria="来源"></select>
|
|
602
|
+
<button id="mkr-refresh" class="ghost small" data-i18n="拉取更新">拉取更新</button>
|
|
603
|
+
</div>
|
|
604
|
+
<div id="mkr-meta" class="hint mkr-meta"></div>
|
|
605
|
+
<div id="mkr-grid" class="cards mk-grid"></div>
|
|
606
|
+
<div id="mkr-more" class="mkr-more hidden">
|
|
607
|
+
<span id="mkr-more-txt" class="hint"></span>
|
|
608
|
+
<button id="mkr-more-btn" class="ghost small" data-i18n="加载更多">加载更多</button>
|
|
609
|
+
</div>
|
|
610
|
+
<div id="mkr-sentinel" class="mkr-sentinel"></div>
|
|
611
|
+
</div>
|
|
612
|
+
</div>
|
|
613
|
+
</div>
|
|
614
|
+
|
|
615
|
+
<!-- 编排设置 -->
|
|
616
|
+
<div id="sub-orch" class="subpage hidden">
|
|
617
|
+
<div class="panel wide">
|
|
618
|
+
<div class="panel-head"><h2 data-i18n="编排设置">编排设置</h2></div>
|
|
619
|
+
<p data-i18n="「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。" class="hint">「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。</p>
|
|
620
|
+
<div id="orch-config"></div>
|
|
621
|
+
<h3 data-i18n="运行设置" class="sec-title">运行设置</h3>
|
|
622
|
+
<div class="field"><label data-i18n="最大并发任务数(多任务同时跑、互不打扰)">最大并发任务数(多任务同时跑、互不打扰)</label>
|
|
623
|
+
<div class="input-row">
|
|
624
|
+
<input id="set-workers" type="number" min="1" max="6" value="3">
|
|
625
|
+
<button data-i18n="保存" class="ghost small" onclick="saveSettings()">保存</button>
|
|
626
|
+
</div>
|
|
627
|
+
<p data-i18n="1 = 串行排队;建议 2-4。每个任务在独立线程执行,运行数据按任务隔离。" class="hint">1 = 串行排队;建议 2-4。每个任务在独立线程执行,运行数据按任务隔离。</p>
|
|
628
|
+
</div>
|
|
629
|
+
<div class="field"><label data-i18n="默认保存路径(新建任务未指定工作目录时使用;支持 ~)">默认保存路径(新建任务未指定工作目录时使用;支持 ~)</label>
|
|
630
|
+
<div class="input-row">
|
|
631
|
+
<input id="set-workdir" type="text" placeholder="例 E:\GoOut\workspace" data-i18n-ph="例 E:\GoOut\workspace">
|
|
632
|
+
<button data-i18n="选择…" class="ghost small" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('set-workdir')">选择…</button>
|
|
633
|
+
<button data-i18n="保存" class="ghost small" onclick="saveDefaultWorkdir()">保存</button>
|
|
634
|
+
</div>
|
|
635
|
+
<label class="toggle" style="margin-top:6px"><input id="set-workdir-migrate" type="checkbox"> <span data-i18n="保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)">保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)</span></label>
|
|
636
|
+
<p class="hint" id="set-workdir-hint"></p>
|
|
637
|
+
</div>
|
|
638
|
+
<div id="settings-msg" class="msg"></div>
|
|
639
|
+
</div>
|
|
640
|
+
</div>
|
|
641
|
+
|
|
642
|
+
<!-- 关于与更新(selfupdate) -->
|
|
643
|
+
<div id="sub-about" class="subpage hidden">
|
|
644
|
+
<div class="panel wide">
|
|
645
|
+
<div class="panel-head"><h2 data-i18n="关于与更新">关于与更新</h2></div>
|
|
646
|
+
<div id="su-info" class="empty" data-i18n="加载中…">加载中…</div>
|
|
647
|
+
<div class="input-row" style="margin-top:10px">
|
|
648
|
+
<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>
|
|
649
|
+
<button id="su-apply" class="ghost small hidden" onclick="suApply()"><span data-i18n="升级到新版">升级到新版</span></button>
|
|
650
|
+
<button id="su-restart" class="ghost small hidden" onclick="suRestart()"><span data-i18n="重启服务生效">重启服务生效</span></button>
|
|
651
|
+
</div>
|
|
652
|
+
<p id="su-note" class="hint"></p>
|
|
653
|
+
<p id="su-progress" class="hint"></p>
|
|
654
|
+
<p class="hint" data-i18n="升级会通过 npm 拉取最新版并自动执行(日志可在运行记录里实时查看);完成后点「重启服务生效」,页面会自动重连。开发仓库(git clone)模式不提供自动升级,请用 git pull。">升级会通过 npm 拉取最新版并自动执行(日志可在运行记录里实时查看);完成后点「重启服务生效」,页面会自动重连。开发仓库(git clone)模式不提供自动升级,请用 git pull。</p>
|
|
655
|
+
</div>
|
|
656
|
+
</div>
|
|
657
|
+
|
|
658
|
+
<!-- 外观 / 皮肤 -->
|
|
659
|
+
<div id="sub-appearance" class="subpage hidden">
|
|
660
|
+
<!-- 页内锚点:皮肤页变长后两胶囊直达,滚动时高亮跟随 -->
|
|
661
|
+
<div id="cs-anchor" class="seg cs-anchor" role="group" aria-label="本页分区" data-i18n-aria="本页分区">
|
|
662
|
+
<button class="seg-btn active" data-apn="apn-skin" data-i18n="外观">外观</button>
|
|
663
|
+
<button class="seg-btn" data-apn="apn-code" data-i18n="代码">代码</button>
|
|
664
|
+
</div>
|
|
665
|
+
<div class="panel wide" id="apn-skin">
|
|
666
|
+
<div class="panel-head"><h2 data-i18n="皮肤">皮肤</h2></div>
|
|
667
|
+
<p class="hint"><span data-i18n="每套皮肤都是一份完整配色,并且各带「日间 / 夜间」两版,明暗切换不会丢皮肤。选中的皮肤立即生效并记在这台设备上(手机与电脑各自独立)。">每套皮肤都是一份完整配色,并且各带「日间 / 夜间」两版,明暗切换不会丢皮肤。选中的皮肤立即生效并记在这台设备上(手机与电脑各自独立)。</span><b data-i18n="经典">经典</b><span data-i18n="是默认皮肤,即原本的界面。">是默认皮肤,即原本的界面。</span></p>
|
|
668
|
+
<h3 class="sec-title" data-i18n="语言 / Language">语言 / Language</h3>
|
|
669
|
+
<div id="lang-mode" class="seg" role="group" aria-label="Language">
|
|
670
|
+
<!-- 语言名一律用本语言书写,不翻译 -->
|
|
671
|
+
<button class="seg-btn" data-lang="zh"><span>中文</span></button>
|
|
672
|
+
<button class="seg-btn" data-lang="en">English</button>
|
|
673
|
+
</div>
|
|
674
|
+
<h3 data-i18n="明暗" class="sec-title">明暗</h3>
|
|
675
|
+
<div id="skin-mode" class="seg" role="group" aria-label="明暗模式" data-i18n-aria="明暗模式">
|
|
676
|
+
<button data-i18n="夜间" class="seg-btn" data-mode="dark">夜间</button>
|
|
677
|
+
<button data-i18n="日间" class="seg-btn" data-mode="light">日间</button>
|
|
678
|
+
</div>
|
|
679
|
+
<h3 class="sec-title"><span data-i18n="皮肤">皮肤</span> <span class="tag" id="skin-cur"></span></h3>
|
|
680
|
+
<div id="skin-grid" class="skin-grid"></div>
|
|
681
|
+
</div>
|
|
682
|
+
|
|
683
|
+
<!-- 代码设置:主题/行号/换行/字号只管代码内容,存本设备(与皮肤同一套语汇) -->
|
|
684
|
+
<div class="panel wide" id="apn-code">
|
|
685
|
+
<div class="panel-head"><h2 data-i18n="代码设置">代码设置</h2></div>
|
|
686
|
+
<p class="hint" data-i18n="设置代码内容的主题、字号和显示方式,不受界面字号影响。">设置代码内容的主题、字号和显示方式,不受界面字号影响。</p>
|
|
687
|
+
<div class="code-set-rows">
|
|
688
|
+
<div class="cs-row">
|
|
689
|
+
<div class="cs-lab"><b data-i18n="浅色代码主题">浅色代码主题</b><span class="hint" data-i18n="浅色界面下代码内容使用的高亮主题。">浅色界面下代码内容使用的高亮主题。</span></div>
|
|
690
|
+
<select id="cs-theme-light" aria-label="浅色代码主题" data-i18n-aria="浅色代码主题"></select>
|
|
691
|
+
</div>
|
|
692
|
+
<div class="cs-row">
|
|
693
|
+
<div class="cs-lab"><b data-i18n="深色代码主题">深色代码主题</b><span class="hint" data-i18n="深色界面下代码内容使用的高亮主题。">深色界面下代码内容使用的高亮主题。</span></div>
|
|
694
|
+
<select id="cs-theme-dark" aria-label="深色代码主题" data-i18n-aria="深色代码主题"></select>
|
|
695
|
+
</div>
|
|
696
|
+
<div class="cs-row">
|
|
697
|
+
<div class="cs-lab"><b data-i18n="显示行号">显示行号</b><span class="hint" data-i18n="在代码内容和差异视图中显示行号。">在代码内容和差异视图中显示行号。</span></div>
|
|
698
|
+
<label class="cs-switch"><input type="checkbox" id="cs-linenum"><span class="cs-track" aria-hidden="true"></span></label>
|
|
699
|
+
</div>
|
|
700
|
+
<div class="cs-row">
|
|
701
|
+
<div class="cs-lab"><b data-i18n="长行自动换行">长行自动换行</b><span class="hint" data-i18n="代码内容过长时自动换行。">代码内容过长时自动换行。</span></div>
|
|
702
|
+
<label class="cs-switch"><input type="checkbox" id="cs-wrap"><span class="cs-track" aria-hidden="true"></span></label>
|
|
703
|
+
</div>
|
|
704
|
+
<div class="cs-row">
|
|
705
|
+
<div class="cs-lab"><b data-i18n="代码字号">代码字号</b><span class="hint" data-i18n="调整代码块、文件预览和差异视图的默认字号。">调整代码块、文件预览和差异视图的默认字号。</span></div>
|
|
706
|
+
<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>
|
|
707
|
+
</div>
|
|
708
|
+
</div>
|
|
709
|
+
</div>
|
|
710
|
+
|
|
711
|
+
<!-- 代码预览:浅/深两卡同屏,当前界面用的那套标记「当前生效」 -->
|
|
712
|
+
<div class="panel wide">
|
|
713
|
+
<div class="panel-head"><h2 data-i18n="代码预览">代码预览</h2></div>
|
|
714
|
+
<p class="hint" data-i18n="同时预览浅色与深色代码主题,当前界面使用的主题会标记为「当前生效」。">同时预览浅色与深色代码主题,当前界面使用的主题会标记为「当前生效」。</p>
|
|
715
|
+
<div class="cs-previews">
|
|
716
|
+
<div class="cs-preview" id="cs-preview-light">
|
|
717
|
+
<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>
|
|
718
|
+
<div class="cs-pv-code" data-ctheme-mode="light"></div>
|
|
719
|
+
</div>
|
|
720
|
+
<div class="cs-preview" id="cs-preview-dark">
|
|
721
|
+
<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>
|
|
722
|
+
<div class="cs-pv-code" data-ctheme-mode="dark"></div>
|
|
723
|
+
</div>
|
|
724
|
+
</div>
|
|
725
|
+
</div>
|
|
726
|
+
</div>
|
|
727
|
+
|
|
728
|
+
<!-- 文件夹浏览(侧栏文件夹右键「查看文件」):左侧目录树,右侧文件 chips -->
|
|
729
|
+
<div id="sub-files" class="subpage hidden">
|
|
730
|
+
<div class="panel wide">
|
|
731
|
+
<div class="panel-head">
|
|
732
|
+
<h2 data-i18n="查看文件">查看文件</h2>
|
|
733
|
+
<div class="files-crumb" id="files-crumb"></div>
|
|
734
|
+
</div>
|
|
735
|
+
<div class="files-page">
|
|
736
|
+
<aside class="files-tree" id="files-tree"></aside>
|
|
737
|
+
<div class="files-main">
|
|
738
|
+
<div id="files-list" class="files-list"></div>
|
|
739
|
+
</div>
|
|
740
|
+
</div>
|
|
741
|
+
</div>
|
|
742
|
+
</div>
|
|
743
|
+
</section>
|
|
744
|
+
</main>
|
|
745
|
+
</div>
|
|
746
|
+
|
|
747
|
+
<!-- ================= 任务检查器(右缘停靠列,参考桌面端 Git 工具 + 进程面板) ================= -->
|
|
748
|
+
<aside id="inspector" class="hidden" aria-label="任务检查器" data-i18n-aria="任务检查器">
|
|
749
|
+
<div class="insp-head">
|
|
750
|
+
<svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>
|
|
751
|
+
<span id="insp-title" class="t" title=""></span>
|
|
752
|
+
<button id="insp-full" class="ghost small" data-i18n="完整详情" data-i18n-title="在主栏打开任务完整详情(全部步骤/日志/报告)" title="在主栏打开任务完整详情(全部步骤/日志/报告)">完整详情</button>
|
|
753
|
+
<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>
|
|
754
|
+
</div>
|
|
755
|
+
<!-- 常驻统计条:运行/步骤/成本/tokens 一行看完,不占分区 -->
|
|
756
|
+
<div id="insp-stats" class="insp-strip"></div>
|
|
757
|
+
<!-- 分区 TAB:一次只展示一个分区;任务状态变化时自动选中(运行中→进度,待裁决→Git)。
|
|
758
|
+
检查器定位=任务树上的快捷预览列:主栏进运行/任务详情后整列让位(syncInspectorVis),
|
|
759
|
+
这里的 Git/进度/成品只在「没开详情」的浏览态出现,与详情页五分区不同屏 -->
|
|
760
|
+
<nav id="insp-tabs" class="insp-tabs" role="tablist" aria-label="检查器分区" data-i18n-aria="检查器分区">
|
|
761
|
+
<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>
|
|
762
|
+
<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>
|
|
763
|
+
<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>
|
|
764
|
+
</nav>
|
|
765
|
+
<div class="insp-body">
|
|
766
|
+
<!-- Git 分区:分支 + 行级统计 + 变更清单 + 合并/丢弃裁决 + 单文件 diff -->
|
|
767
|
+
<section class="insp-pane" id="insp-pane-git">
|
|
768
|
+
<div class="insp-pane-head"><span id="insp-git-chip" class="chip hidden"></span></div>
|
|
769
|
+
<div id="insp-git-main" class="insp-git-main"></div>
|
|
770
|
+
<pre id="insp-diff" class="insp-diff hidden"></pre>
|
|
771
|
+
</section>
|
|
772
|
+
<!-- 进度分区:环形进度(养成感动画)+ 步骤清单,点步骤跳主栏详情 -->
|
|
773
|
+
<section class="insp-pane hidden" id="insp-pane-progress">
|
|
774
|
+
<div class="insp-ring-wrap">
|
|
775
|
+
<svg class="insp-ring" viewBox="0 0 84 84" aria-hidden="true">
|
|
776
|
+
<circle class="tr" cx="42" cy="42" r="36"></circle>
|
|
777
|
+
<circle class="pr" id="insp-ring" cx="42" cy="42" r="36"></circle>
|
|
778
|
+
</svg>
|
|
779
|
+
<div class="insp-ring-num"><b id="insp-progress-n">0/0</b><span data-i18n="步">步</span></div>
|
|
780
|
+
</div>
|
|
781
|
+
<div id="insp-steps" class="insp-steps"></div>
|
|
782
|
+
</section>
|
|
783
|
+
<!-- 成品文件分区:点开即看,不进详情页 -->
|
|
784
|
+
<section class="insp-pane hidden" id="insp-pane-files">
|
|
785
|
+
<div id="insp-artifacts" class="insp-artifacts"></div>
|
|
786
|
+
</section>
|
|
787
|
+
</div>
|
|
788
|
+
<!-- 迷你指挥坞:运行中常驻底部,任何分区下都能直接下达指令(不带附件,附件在详情页) -->
|
|
789
|
+
<section class="insp-direct hidden" id="insp-card-direct">
|
|
790
|
+
<div class="insp-direct-head"><svg class="ico" aria-hidden="true"><use href="#i-baton"></use></svg><span data-i18n="运行中指挥">运行中指挥</span></div>
|
|
791
|
+
<textarea id="insp-msg-input" rows="2" data-i18n-ph="补充说明或纠偏,将随下一条智能体步骤下达" placeholder="补充说明或纠偏,将随下一条智能体步骤下达"></textarea>
|
|
792
|
+
<div class="insp-direct-bar">
|
|
793
|
+
<span id="insp-direct-hint" class="insp-hint"></span>
|
|
794
|
+
<button id="insp-send-btn" class="primary small" data-i18n="下达指令">下达指令</button>
|
|
795
|
+
</div>
|
|
796
|
+
</section>
|
|
797
|
+
</aside>
|
|
798
|
+
<div id="insp-mask" aria-hidden="true"></div>
|
|
799
|
+
</div>
|
|
800
|
+
|
|
801
|
+
<!-- 访问令牌门:仅远程(非本机)访问且令牌缺失/错误时显示 -->
|
|
802
|
+
<div id="token-gate" class="token-gate hidden">
|
|
803
|
+
<div class="gate-card">
|
|
804
|
+
<div class="gate-brand"><span class="brand-name">CodeBee</span></div>
|
|
805
|
+
<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>
|
|
806
|
+
<input id="gate-token" type="password" placeholder="访问令牌" autocomplete="off" data-i18n-ph="访问令牌">
|
|
807
|
+
<button data-i18n="进入" id="gate-go" class="primary" onclick="submitToken()">进入</button>
|
|
808
|
+
<p id="gate-err" class="msg"></p>
|
|
809
|
+
</div>
|
|
810
|
+
</div>
|
|
811
|
+
|
|
812
|
+
<div id="ctx-menu" class="ctx-menu hidden"></div>
|
|
813
|
+
|
|
814
|
+
<!-- 命令面板(Ctrl+K):搜索任务直达 + 快捷命令 -->
|
|
815
|
+
<div id="cmdk-mask" class="cmdk-mask hidden">
|
|
816
|
+
<div class="cmdk" role="dialog" aria-label="命令面板" data-i18n-aria="命令面板" onclick="event.stopPropagation()">
|
|
817
|
+
<div class="cmdk-input">
|
|
818
|
+
<svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>
|
|
819
|
+
<input id="cmdk-q" type="text" placeholder="搜索操作、任务或文件" data-i18n-ph="搜索操作、任务或文件" autocomplete="off" spellcheck="false">
|
|
820
|
+
</div>
|
|
821
|
+
<div class="cmdk-tabs" id="cmdk-tabs">
|
|
822
|
+
<button class="on" data-t="all" data-i18n="全部">全部</button>
|
|
823
|
+
<button data-t="ops" data-i18n="操作">操作</button>
|
|
824
|
+
<button data-t="tasks" data-i18n="任务">任务</button>
|
|
825
|
+
</div>
|
|
826
|
+
<div class="cmdk-list" id="cmdk-list"></div>
|
|
827
|
+
</div>
|
|
828
|
+
</div>
|
|
829
|
+
|
|
830
|
+
<!-- 通用弹框(导入供应商 / 添加供应商) -->
|
|
831
|
+
<div id="modal" class="modal-wrap hidden">
|
|
832
|
+
<div class="modal-mask" onclick="closeModal()"></div>
|
|
833
|
+
<div class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
|
|
834
|
+
<div class="modal-head">
|
|
835
|
+
<span id="modal-title"></span>
|
|
836
|
+
<button class="icon-btn" onclick="closeModal()" title="关闭" data-i18n-title="关闭">✕</button>
|
|
837
|
+
</div>
|
|
838
|
+
<div class="modal-body" id="modal-body"></div>
|
|
839
|
+
<div class="modal-foot" id="modal-foot"></div>
|
|
840
|
+
</div>
|
|
841
|
+
</div>
|
|
842
|
+
|
|
843
|
+
<!-- 应用内确认 / 输入弹框(替代浏览器原生 confirm/prompt;可叠在 #modal 之上) -->
|
|
844
|
+
<div id="ask" class="modal-wrap ask-wrap hidden">
|
|
845
|
+
<div class="modal-mask" id="ask-mask"></div>
|
|
846
|
+
<div class="modal ask-modal" role="dialog" aria-modal="true" aria-labelledby="ask-title">
|
|
847
|
+
<div class="modal-head">
|
|
848
|
+
<span data-i18n="确认" id="ask-title">确认</span>
|
|
849
|
+
<button class="icon-btn" id="ask-x" title="关闭" aria-label="关闭" data-i18n-aria="关闭" data-i18n-title="关闭">✕</button>
|
|
850
|
+
</div>
|
|
851
|
+
<div class="modal-body" id="ask-body"></div>
|
|
852
|
+
<div class="modal-foot">
|
|
853
|
+
<span class="spacer"></span>
|
|
854
|
+
<button data-i18n="取消" class="ghost" id="ask-no">取消</button>
|
|
855
|
+
<button data-i18n="确定" class="primary" id="ask-yes">确定</button>
|
|
856
|
+
</div>
|
|
857
|
+
</div>
|
|
858
|
+
</div>
|
|
859
|
+
|
|
860
|
+
<script src="qrcode.js"></script>
|
|
861
|
+
<script src="i18n.js"></script>
|
|
862
|
+
<script src="app.js"></script>
|
|
863
|
+
</body>
|
|
864
|
+
</html>
|