codebee 0.1.65 → 0.1.66

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.
Files changed (110) hide show
  1. package/CHANGELOG.md +520 -513
  2. package/LICENSE +21 -21
  3. package/README.md +494 -487
  4. package/app/core/aiflavor.py +197 -197
  5. package/app/core/artifacts.py +148 -148
  6. package/app/core/attachments.py +532 -532
  7. package/app/core/automation.py +758 -758
  8. package/app/core/backup.py +470 -470
  9. package/app/core/beekeeper.py +183 -183
  10. package/app/core/board.py +209 -209
  11. package/app/core/bookmeta.py +796 -759
  12. package/app/core/bookmeta_catalog.py +180 -180
  13. package/app/core/branching.py +137 -137
  14. package/app/core/builtin_agent.py +1234 -1191
  15. package/app/core/capability.py +144 -144
  16. package/app/core/catalog.py +23 -24
  17. package/app/core/chaptersafe.py +32 -32
  18. package/app/core/cleanup.py +303 -303
  19. package/app/core/compaction.py +201 -186
  20. package/app/core/covergen.py +356 -356
  21. package/app/core/diagnostics.py +114 -114
  22. package/app/core/dispatch.py +173 -173
  23. package/app/core/dispatch_log.py +113 -113
  24. package/app/core/env_scrub.py +85 -85
  25. package/app/core/error_codes.py +220 -65
  26. package/app/core/errorlog.py +137 -137
  27. package/app/core/evaluation.py +174 -0
  28. package/app/core/failure_notify.py +290 -0
  29. package/app/core/flows.py +355 -355
  30. package/app/core/goal_service.py +167 -167
  31. package/app/core/health.py +374 -342
  32. package/app/core/history.py +38 -38
  33. package/app/core/hooks.py +162 -156
  34. package/app/core/jobs.py +1034 -1022
  35. package/app/core/knowledge.py +6 -2
  36. package/app/core/manager.py +2115 -1996
  37. package/app/core/market.py +362 -362
  38. package/app/core/market_remote.py +66 -66
  39. package/app/core/mocks.py +64 -64
  40. package/app/core/modelhub.py +3517 -3332
  41. package/app/core/notify.py +106 -106
  42. package/app/core/paihang.py +109 -109
  43. package/app/core/paths.py +2 -2
  44. package/app/core/pipeline.py +4614 -4494
  45. package/app/core/planner.py +33 -31
  46. package/app/core/portguard.py +111 -111
  47. package/app/core/preview.py +293 -293
  48. package/app/core/publish/__init__.py +7 -7
  49. package/app/core/publish/auto.py +367 -367
  50. package/app/core/publish/browser.py +533 -533
  51. package/app/core/publish/fanqie.py +128 -128
  52. package/app/core/publish/flow.py +432 -406
  53. package/app/core/publish/flows-fanqie-calibrated.json +17 -9
  54. package/app/core/publish/flows-qimao-calibrated.json +6 -2
  55. package/app/core/publish/ledger.py +198 -198
  56. package/app/core/publish/manager.py +623 -590
  57. package/app/core/publish/qimao.py +141 -141
  58. package/app/core/publish/ws.py +139 -139
  59. package/app/core/redact.py +38 -38
  60. package/app/core/repeat_guard.py +129 -124
  61. package/app/core/router.py +119 -81
  62. package/app/core/runner.py +2050 -2042
  63. package/app/core/selfupdate.py +384 -384
  64. package/app/core/session_log.py +161 -161
  65. package/app/core/sessions.py +312 -312
  66. package/app/core/settings.py +149 -149
  67. package/app/core/settings_schema.py +262 -262
  68. package/app/core/share_page.py +114 -114
  69. package/app/core/skill_scan.py +114 -106
  70. package/app/core/skillpacks/fanqie-novel.md +80 -80
  71. package/app/core/skillpacks/market/character-bible.md +66 -66
  72. package/app/core/skillpacks/market/code-risk-checklist.md +58 -58
  73. package/app/core/skillpacks/market/git-workflow.md +57 -57
  74. package/app/core/skillpacks/market/release-notes.md +72 -72
  75. package/app/core/skillpacks/market/weekly-report.md +71 -71
  76. package/app/core/skillpacks/market/worldview-consistency.md +70 -70
  77. package/app/core/skills.py +221 -72
  78. package/app/core/step_runner.py +132 -132
  79. package/app/core/store.py +23 -0
  80. package/app/core/task_compile.py +199 -199
  81. package/app/core/telemetry.py +292 -292
  82. package/app/core/tlsctx.py +64 -64
  83. package/app/core/token_meter.py +147 -147
  84. package/app/core/upstream.py +41 -0
  85. package/app/core/usage.py +114 -3
  86. package/app/core/volumes.py +355 -355
  87. package/app/core/wxdigest.py +858 -858
  88. package/app/core/zentao.py +2447 -2447
  89. package/app/main.py +2838 -2832
  90. package/app/pick_dialog.py +110 -110
  91. package/app/ui/app.js +13994 -13977
  92. package/app/ui/board.css +20 -41
  93. package/app/ui/board.html +162 -162
  94. package/app/ui/board.js +305 -305
  95. package/app/ui/i18n.js +2716 -2711
  96. package/app/ui/icons/bee.svg +79 -79
  97. package/app/ui/index.html +1 -1
  98. package/app/ui/manifest.json +16 -16
  99. package/app/ui/qrcode.js +2297 -2297
  100. package/app/ui/style.css +6107 -6125
  101. package/bin/tutti.js +147 -147
  102. package/package.json +46 -41
  103. package/tools/wx_reader.py +261 -261
  104. package/app/.playwright-cli/console-2026-09-23T08-26-03-635Z.log +0 -88
  105. package/app/.playwright-cli/page-2026-09-23T08-26-03-845Z.yml +0 -126
  106. package/app/.playwright-cli/page-2026-09-23T08-29-44-203Z.png +0 -0
  107. package/app/.playwright-cli/page-2026-09-23T08-35-42-046Z.yml +0 -210
  108. package/app/.playwright-cli/page-2026-09-23T08-36-52-858Z.png +0 -0
  109. package/app/.playwright-cli/page-2026-09-23T08-37-33-938Z.png +0 -0
  110. package/app/.playwright-cli/run-detail-after.png +0 -0
package/app/ui/board.css CHANGED
@@ -1,24 +1,26 @@
1
1
  /* CodeBee Mission Control
2
- 方向:工业感任务指挥中心。深海底色承载信息,琥珀色代表蜂群,冰蓝色代表实时数据。 */
2
+ 方向:工业感任务指挥中心。深海底色承载信息,琥珀色代表蜂群,冰蓝色代表实时数据。
3
+ v2 修订:旧版装饰密度高于信息密度。保留现有 DOM 与动态行为,
4
+ 调色板重置为更温暖的石墨蓝,强调色收敛、字号层级拉清(原 v1 值已并入本块)。 */
3
5
 
4
6
  :root {
5
- --bg: #06101c;
6
- --bg-deep: #040a12;
7
- --panel: #0c1a2c;
8
- --panel-hi: #12253c;
9
- --panel-soft: #0f2035;
10
- --line: #294763;
11
- --line-soft: #1d3853;
12
- --text: #eef5ff;
13
- --muted: #7f9bb7;
14
- --muted-2: #526f8d;
15
- --amber: #f5b84e;
16
- --amber-hot: #ffd26a;
17
- --cyan: #54d7ff;
18
- --blue: #6f9dff;
19
- --violet: #a58bff;
20
- --green: #50dfa8;
21
- --red: #ff7078;
7
+ --bg: #081116;
8
+ --bg-deep: #050b0e;
9
+ --panel: #101b20;
10
+ --panel-hi: #16252b;
11
+ --panel-soft: #192a30;
12
+ --line: #304249;
13
+ --line-soft: #24353b;
14
+ --text: #f4efe5;
15
+ --muted: #98aaa9;
16
+ --muted-2: #657a7d;
17
+ --amber: #e8ad4d;
18
+ --amber-hot: #ffd071;
19
+ --cyan: #78c9c0;
20
+ --blue: #9db9ad;
21
+ --violet: #9aafa7;
22
+ --green: #82d3a2;
23
+ --red: #ea7e78;
22
24
  --mono: "Cascadia Mono", "SFMono-Regular", Consolas, ui-monospace, monospace;
23
25
  --display: "Bahnschrift", "DIN Alternate", "Segoe UI", "Microsoft YaHei", sans-serif;
24
26
  }
@@ -389,29 +391,6 @@ button, input { font: inherit; }
389
391
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; }
390
392
  }
391
393
 
392
- /* ---------------------------------------------------------------- v2:克制的运营控制台
393
- 旧版的问题是装饰密度高于信息密度。这里保留现有 DOM 和动态行为,
394
- 重置为更温暖的石墨蓝色板、少量强调色和更清晰的字号层级。 */
395
- :root {
396
- --bg: #081116;
397
- --bg-deep: #050b0e;
398
- --panel: #101b20;
399
- --panel-hi: #16252b;
400
- --panel-soft: #192a30;
401
- --line: #304249;
402
- --line-soft: #24353b;
403
- --text: #f4efe5;
404
- --muted: #98aaa9;
405
- --muted-2: #657a7d;
406
- --amber: #e8ad4d;
407
- --amber-hot: #ffd071;
408
- --cyan: #78c9c0;
409
- --blue: #9db9ad;
410
- --violet: #9aafa7;
411
- --green: #82d3a2;
412
- --red: #ea7e78;
413
- }
414
-
415
394
  body {
416
395
  background:
417
396
  radial-gradient(900px 460px at 84% -18%, #31545a26, transparent 68%),
package/app/ui/board.html CHANGED
@@ -1,162 +1,162 @@
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="icon" href="/icons/icon-192.png">
8
- <link rel="stylesheet" href="/board.css">
9
- </head>
10
- <body>
11
-
12
- <!-- 远程访问令牌门(本机免输;与主界面共用 orch.token) -->
13
- <div id="gate" class="gate hidden">
14
- <div class="gate-box">
15
- <div class="gate-mark" aria-hidden="true"><span></span><span></span><span></span></div>
16
- <div class="gate-title" data-i18n="需要访问令牌">需要访问令牌</div>
17
- <div class="gate-sub" data-i18n="启动 CodeBee 时控制台会显示">启动 CodeBee 时控制台会显示</div>
18
- <input id="gate-token" type="password" data-i18n-ph="访问令牌" placeholder="访问令牌" autocomplete="off">
19
- <button id="gate-ok" type="button" data-i18n="进入大屏">进入大屏</button>
20
- <div id="gate-err" class="gate-err"></div>
21
- </div>
22
- </div>
23
-
24
- <header id="hd">
25
- <div class="hd-brand">
26
- <div class="brand-mark" aria-hidden="true"><i></i><i></i><i></i><b></b></div>
27
- <div class="brand-copy">
28
- <div class="brand-kicker">CODEBEE / OPERATIONS</div>
29
- <div class="hd-name" data-i18n="任务驾驶舱">任务驾驶舱</div>
30
- </div>
31
- </div>
32
- <div class="hd-center">
33
- <span class="live-pip"></span>
34
- <span data-i18n="实时监控">实时监控</span>
35
- <span class="hd-sep">/</span>
36
- <span id="hd-updated" class="hd-updated" data-i18n="同步中">同步中</span>
37
- </div>
38
- <div class="hd-right">
39
- <div id="hd-pool" class="hd-pill" title="执行池占用" data-i18n-title="执行池占用">—</div>
40
- <div id="hd-health" class="hd-pill warn hidden" title=""></div>
41
- <div id="hd-conn" class="hd-pill off hidden" data-i18n="连接断开">连接断开</div>
42
- <div id="hd-clock" class="hd-clock">--:--:--</div>
43
- </div>
44
- </header>
45
-
46
- <main id="board">
47
- <section id="overview" class="overview panel">
48
- <div class="overview-copy">
49
- <div class="eyebrow"><span></span><span data-i18n="蜂群状态">蜂群状态</span></div>
50
- <div class="overview-line">
51
- <div>
52
- <h1 id="hero-state" data-i18n="蜂群待命">蜂群待命</h1>
53
- <p id="hero-copy" data-i18n="没有正在运行的任务,新任务在主界面创建后会实时出现在这里">没有正在运行的任务,新任务在主界面创建后会实时出现在这里</p>
54
- </div>
55
- <div class="hero-count">
56
- <strong id="hero-live-count">0</strong>
57
- <span data-i18n="个活动单元">个活动单元</span>
58
- </div>
59
- </div>
60
- <div class="overview-foot">
61
- <span class="signal-chip"><i></i><span id="hero-signal" data-i18n="系统状态良好">系统状态良好</span></span>
62
- <span class="overview-note" data-i18n="实时聚合 · 每 4 秒刷新">实时聚合 · 每 4 秒刷新</span>
63
- </div>
64
- </div>
65
- <div class="overview-visual" aria-hidden="true">
66
- <div class="orbit orbit-a"></div>
67
- <div class="orbit orbit-b"></div>
68
- <div class="orbit-dot dot-a"></div>
69
- <div class="orbit-dot dot-b"></div>
70
- <div class="orbit-dot dot-c"></div>
71
- <div class="core-glow"></div>
72
- <div class="overview-core"><strong id="orb-number">0</strong><span>ACTIVE</span></div>
73
- </div>
74
- <div class="overview-aside">
75
- <div class="aside-label" data-i18n="执行池">执行池</div>
76
- <div class="pool-meter"><i id="pool-meter-fill"></i></div>
77
- <div class="pool-readout"><strong id="pool-alive">0</strong><span>/</span><span id="pool-target">0</span><em data-i18n="在线槽位">在线槽位</em></div>
78
- <div class="aside-divider"></div>
79
- <div class="aside-row"><span data-i18n="队列等待">队列等待</span><b id="overview-queued">0</b></div>
80
- <div class="aside-row"><span data-i18n="今日成功率">今日成功率</span><b id="overview-success">—</b></div>
81
- </div>
82
- </section>
83
-
84
- <section id="kpis" aria-label="核心指标" data-i18n-aria="核心指标">
85
- <div class="kpi k-run">
86
- <div class="kpi-head"><span data-i18n="运行中">运行中</span><i class="kpi-icon"></i></div>
87
- <div class="k-num" id="k-running">0</div>
88
- <div class="kpi-foot"><span data-i18n="当前活动">当前活动</span><b>LIVE</b></div>
89
- </div>
90
- <div class="kpi k-queue">
91
- <div class="kpi-head"><span data-i18n="排队中">排队中</span><i class="kpi-icon"></i></div>
92
- <div class="k-num" id="k-queued">0</div>
93
- <div class="kpi-foot"><span data-i18n="等待调度">等待调度</span><b>QUEUE</b></div>
94
- </div>
95
- <div class="kpi k-done">
96
- <div class="kpi-head"><span data-i18n="今日完成">今日完成</span><i class="kpi-icon"></i></div>
97
- <div class="k-num" id="k-done">0</div>
98
- <div class="kpi-foot"><span data-i18n="完成运行">完成运行</span><b>DONE</b></div>
99
- </div>
100
- <div class="kpi k-fail">
101
- <div class="kpi-head"><span data-i18n="今日失败">今日失败</span><i class="kpi-icon"></i></div>
102
- <div class="k-num" id="k-failed">0</div>
103
- <div class="kpi-foot"><span data-i18n="需要关注">需要关注</span><b>ALERT</b></div>
104
- </div>
105
- <div class="kpi k-tok">
106
- <div class="kpi-head"><span data-i18n="今日 tokens">今日 tokens</span><i class="kpi-icon"></i></div>
107
- <div class="k-num" id="k-tokens">0</div>
108
- <div class="kpi-foot"><span data-i18n="模型消耗">模型消耗</span><b>USAGE</b></div>
109
- </div>
110
- <div class="kpi k-cost">
111
- <div class="kpi-head"><span data-i18n="今日成本">今日成本</span><i class="kpi-icon"></i></div>
112
- <div class="k-num" id="k-cost">$0.00</div>
113
- <div class="kpi-foot"><span data-i18n="运行成本">运行成本</span><b>COST</b></div>
114
- </div>
115
- </section>
116
-
117
- <section id="main">
118
- <section id="wall" class="panel live-panel">
119
- <header class="panel-head">
120
- <div>
121
- <div class="eyebrow"><span></span><span data-i18n="实时任务流">实时任务流</span></div>
122
- <h2 data-i18n="运行中任务">运行中任务</h2>
123
- </div>
124
- <div class="panel-head-right">
125
- <span id="wall-count" class="live-count">0 ACTIVE</span>
126
- <span id="wall-mode" class="mode-label" data-i18n="监控中">监控中</span>
127
- </div>
128
- </header>
129
- <div id="wall-cards"></div>
130
- <div id="wall-empty" class="wall-empty hidden">
131
- <div class="empty-orbit" aria-hidden="true"><i></i><i></i><i></i><b>0</b></div>
132
- <div class="idle-t1" data-i18n="队列已清空">队列已清空</div>
133
- <div class="idle-t2" data-i18n="等待新的任务接入蜂巢">等待新的任务接入蜂巢</div>
134
- <div class="empty-meta"><span><i></i><b data-i18n="工作池就绪">工作池就绪</b></span><span><i></i><b data-i18n="监控在线">监控在线</b></span></div>
135
- </div>
136
- <div id="queue-row" class="queue-row hidden">
137
- <div class="q-label"><span class="q-mark"></span><span data-i18n="排队等待">排队等待</span><b id="queue-count">0</b></div>
138
- <span id="queue-chips"></span>
139
- </div>
140
- </section>
141
-
142
- <aside id="rail">
143
- <section class="rail-card rail-trend panel">
144
- <div class="rail-head"><div><div class="eyebrow"><span></span><span data-i18n="资源脉冲">资源脉冲</span></div><h3 data-i18n="近 7 日 tokens">近 7 日 tokens</h3></div><span class="rail-badge">7 DAYS</span></div>
145
- <div id="trend" class="trend"></div>
146
- </section>
147
- <section class="rail-card rail-models panel">
148
- <div class="rail-head"><div><div class="eyebrow"><span></span><span data-i18n="模型分布">模型分布</span></div><h3 data-i18n="近 7 日模型 TOP5">近 7 日模型 TOP5</h3></div><span class="rail-badge">TOP 5</span></div>
149
- <div id="models" class="models"></div>
150
- </section>
151
- <section class="rail-card rail-recent panel grow">
152
- <div class="rail-head"><div><div class="eyebrow"><span></span><span data-i18n="事件日志">事件日志</span></div><h3 data-i18n="最近动态">最近动态</h3></div><span id="recent-count" class="rail-badge">—</span></div>
153
- <div id="recent" class="recent"></div>
154
- </section>
155
- </aside>
156
- </section>
157
- </main>
158
-
159
- <script src="/i18n.js"></script>
160
- <script src="/board.js"></script>
161
- </body>
162
- </html>
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="icon" href="/icons/icon-192.png">
8
+ <link rel="stylesheet" href="/board.css">
9
+ </head>
10
+ <body>
11
+
12
+ <!-- 远程访问令牌门(本机免输;与主界面共用 orch.token) -->
13
+ <div id="gate" class="gate hidden">
14
+ <div class="gate-box">
15
+ <div class="gate-mark" aria-hidden="true"><span></span><span></span><span></span></div>
16
+ <div class="gate-title" data-i18n="需要访问令牌">需要访问令牌</div>
17
+ <div class="gate-sub" data-i18n="启动 CodeBee 时控制台会显示">启动 CodeBee 时控制台会显示</div>
18
+ <input id="gate-token" type="password" data-i18n-ph="访问令牌" placeholder="访问令牌" autocomplete="off">
19
+ <button id="gate-ok" type="button" data-i18n="进入大屏">进入大屏</button>
20
+ <div id="gate-err" class="gate-err"></div>
21
+ </div>
22
+ </div>
23
+
24
+ <header id="hd">
25
+ <div class="hd-brand">
26
+ <div class="brand-mark" aria-hidden="true"><i></i><i></i><i></i><b></b></div>
27
+ <div class="brand-copy">
28
+ <div class="brand-kicker">CODEBEE / OPERATIONS</div>
29
+ <div class="hd-name" data-i18n="任务驾驶舱">任务驾驶舱</div>
30
+ </div>
31
+ </div>
32
+ <div class="hd-center">
33
+ <span class="live-pip"></span>
34
+ <span data-i18n="实时监控">实时监控</span>
35
+ <span class="hd-sep">/</span>
36
+ <span id="hd-updated" class="hd-updated" data-i18n="同步中">同步中</span>
37
+ </div>
38
+ <div class="hd-right">
39
+ <div id="hd-pool" class="hd-pill" title="执行池占用" data-i18n-title="执行池占用">—</div>
40
+ <div id="hd-health" class="hd-pill warn hidden" title=""></div>
41
+ <div id="hd-conn" class="hd-pill off hidden" data-i18n="连接断开">连接断开</div>
42
+ <div id="hd-clock" class="hd-clock">--:--:--</div>
43
+ </div>
44
+ </header>
45
+
46
+ <main id="board">
47
+ <section id="overview" class="overview panel">
48
+ <div class="overview-copy">
49
+ <div class="eyebrow"><span></span><span data-i18n="蜂群状态">蜂群状态</span></div>
50
+ <div class="overview-line">
51
+ <div>
52
+ <h1 id="hero-state" data-i18n="蜂群待命">蜂群待命</h1>
53
+ <p id="hero-copy" data-i18n="没有正在运行的任务,新任务在主界面创建后会实时出现在这里">没有正在运行的任务,新任务在主界面创建后会实时出现在这里</p>
54
+ </div>
55
+ <div class="hero-count">
56
+ <strong id="hero-live-count">0</strong>
57
+ <span data-i18n="个活动单元">个活动单元</span>
58
+ </div>
59
+ </div>
60
+ <div class="overview-foot">
61
+ <span class="signal-chip"><i></i><span id="hero-signal" data-i18n="系统状态良好">系统状态良好</span></span>
62
+ <span class="overview-note" data-i18n="实时聚合 · 每 4 秒刷新">实时聚合 · 每 4 秒刷新</span>
63
+ </div>
64
+ </div>
65
+ <div class="overview-visual" aria-hidden="true">
66
+ <div class="orbit orbit-a"></div>
67
+ <div class="orbit orbit-b"></div>
68
+ <div class="orbit-dot dot-a"></div>
69
+ <div class="orbit-dot dot-b"></div>
70
+ <div class="orbit-dot dot-c"></div>
71
+ <div class="core-glow"></div>
72
+ <div class="overview-core"><strong id="orb-number">0</strong><span>ACTIVE</span></div>
73
+ </div>
74
+ <div class="overview-aside">
75
+ <div class="aside-label" data-i18n="执行池">执行池</div>
76
+ <div class="pool-meter"><i id="pool-meter-fill"></i></div>
77
+ <div class="pool-readout"><strong id="pool-alive">0</strong><span>/</span><span id="pool-target">0</span><em data-i18n="在线槽位">在线槽位</em></div>
78
+ <div class="aside-divider"></div>
79
+ <div class="aside-row"><span data-i18n="队列等待">队列等待</span><b id="overview-queued">0</b></div>
80
+ <div class="aside-row"><span data-i18n="今日成功率">今日成功率</span><b id="overview-success">—</b></div>
81
+ </div>
82
+ </section>
83
+
84
+ <section id="kpis" aria-label="核心指标" data-i18n-aria="核心指标">
85
+ <div class="kpi k-run">
86
+ <div class="kpi-head"><span data-i18n="运行中">运行中</span><i class="kpi-icon"></i></div>
87
+ <div class="k-num" id="k-running">0</div>
88
+ <div class="kpi-foot"><span data-i18n="当前活动">当前活动</span><b>LIVE</b></div>
89
+ </div>
90
+ <div class="kpi k-queue">
91
+ <div class="kpi-head"><span data-i18n="排队中">排队中</span><i class="kpi-icon"></i></div>
92
+ <div class="k-num" id="k-queued">0</div>
93
+ <div class="kpi-foot"><span data-i18n="等待调度">等待调度</span><b>QUEUE</b></div>
94
+ </div>
95
+ <div class="kpi k-done">
96
+ <div class="kpi-head"><span data-i18n="今日完成">今日完成</span><i class="kpi-icon"></i></div>
97
+ <div class="k-num" id="k-done">0</div>
98
+ <div class="kpi-foot"><span data-i18n="完成运行">完成运行</span><b>DONE</b></div>
99
+ </div>
100
+ <div class="kpi k-fail">
101
+ <div class="kpi-head"><span data-i18n="今日失败">今日失败</span><i class="kpi-icon"></i></div>
102
+ <div class="k-num" id="k-failed">0</div>
103
+ <div class="kpi-foot"><span data-i18n="需要关注">需要关注</span><b>ALERT</b></div>
104
+ </div>
105
+ <div class="kpi k-tok">
106
+ <div class="kpi-head"><span data-i18n="今日 tokens">今日 tokens</span><i class="kpi-icon"></i></div>
107
+ <div class="k-num" id="k-tokens">0</div>
108
+ <div class="kpi-foot"><span data-i18n="模型消耗">模型消耗</span><b>USAGE</b></div>
109
+ </div>
110
+ <div class="kpi k-cost">
111
+ <div class="kpi-head"><span data-i18n="今日成本">今日成本</span><i class="kpi-icon"></i></div>
112
+ <div class="k-num" id="k-cost">$0.00</div>
113
+ <div class="kpi-foot"><span data-i18n="运行成本">运行成本</span><b>COST</b></div>
114
+ </div>
115
+ </section>
116
+
117
+ <section id="main">
118
+ <section id="wall" class="panel live-panel">
119
+ <header class="panel-head">
120
+ <div>
121
+ <div class="eyebrow"><span></span><span data-i18n="实时任务流">实时任务流</span></div>
122
+ <h2 data-i18n="运行中任务">运行中任务</h2>
123
+ </div>
124
+ <div class="panel-head-right">
125
+ <span id="wall-count" class="live-count">0 ACTIVE</span>
126
+ <span id="wall-mode" class="mode-label" data-i18n="监控中">监控中</span>
127
+ </div>
128
+ </header>
129
+ <div id="wall-cards"></div>
130
+ <div id="wall-empty" class="wall-empty hidden">
131
+ <div class="empty-orbit" aria-hidden="true"><i></i><i></i><i></i><b>0</b></div>
132
+ <div class="idle-t1" data-i18n="队列已清空">队列已清空</div>
133
+ <div class="idle-t2" data-i18n="等待新的任务接入蜂巢">等待新的任务接入蜂巢</div>
134
+ <div class="empty-meta"><span><i></i><b data-i18n="工作池就绪">工作池就绪</b></span><span><i></i><b data-i18n="监控在线">监控在线</b></span></div>
135
+ </div>
136
+ <div id="queue-row" class="queue-row hidden">
137
+ <div class="q-label"><span class="q-mark"></span><span data-i18n="排队等待">排队等待</span><b id="queue-count">0</b></div>
138
+ <span id="queue-chips"></span>
139
+ </div>
140
+ </section>
141
+
142
+ <aside id="rail">
143
+ <section class="rail-card rail-trend panel">
144
+ <div class="rail-head"><div><div class="eyebrow"><span></span><span data-i18n="资源脉冲">资源脉冲</span></div><h3 data-i18n="近 7 日 tokens">近 7 日 tokens</h3></div><span class="rail-badge">7 DAYS</span></div>
145
+ <div id="trend" class="trend"></div>
146
+ </section>
147
+ <section class="rail-card rail-models panel">
148
+ <div class="rail-head"><div><div class="eyebrow"><span></span><span data-i18n="模型分布">模型分布</span></div><h3 data-i18n="近 7 日模型 TOP5">近 7 日模型 TOP5</h3></div><span class="rail-badge">TOP 5</span></div>
149
+ <div id="models" class="models"></div>
150
+ </section>
151
+ <section class="rail-card rail-recent panel grow">
152
+ <div class="rail-head"><div><div class="eyebrow"><span></span><span data-i18n="事件日志">事件日志</span></div><h3 data-i18n="最近动态">最近动态</h3></div><span id="recent-count" class="rail-badge">—</span></div>
153
+ <div id="recent" class="recent"></div>
154
+ </section>
155
+ </aside>
156
+ </section>
157
+ </main>
158
+
159
+ <script src="/i18n.js"></script>
160
+ <script src="/board.js"></script>
161
+ </body>
162
+ </html>