codebee 0.1.5 → 0.1.7
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 +16 -0
- package/README.md +431 -422
- package/app/core/automation.py +30 -5
- package/app/core/catalog.py +23 -0
- package/app/core/health.py +12 -1
- package/app/core/jobs.py +10 -2
- package/app/core/manager.py +87 -10
- package/app/core/modelhub.py +2883 -2845
- package/app/core/pipeline.py +120 -60
- package/app/core/registry.py +4 -0
- package/app/core/remote.py +310 -303
- package/app/core/router.py +5 -4
- package/app/core/runner.py +38 -6
- package/app/core/selfupdate.py +53 -16
- package/app/core/store.py +138 -47
- package/app/core/usage.py +51 -1
- package/app/main.py +219 -23
- package/app/ui/app.js +687 -222
- package/app/ui/i18n.js +43 -6
- package/app/ui/icons/bee.svg +79 -0
- package/app/ui/index.html +59 -46
- package/app/ui/style.css +1229 -328
- package/package.json +1 -1
package/app/ui/i18n.js
CHANGED
|
@@ -146,8 +146,30 @@
|
|
|
146
146
|
"查看内容": "View content",
|
|
147
147
|
"预览": "Preview",
|
|
148
148
|
"点击查看": "Click to view",
|
|
149
|
+
"任务操作": "Task actions",
|
|
149
150
|
"蜂巢": "Hive",
|
|
150
151
|
"对话": "Chat",
|
|
152
|
+
"CLI 日志": "CLI log",
|
|
153
|
+
"打开 CLI 日志": "Open CLI log",
|
|
154
|
+
"点击步骤卡片查看 CLI 日志": "Click a step card to view its CLI log",
|
|
155
|
+
"任务完成": "Task completed",
|
|
156
|
+
"任务失败": "Task failed",
|
|
157
|
+
"轮对话": "turns",
|
|
158
|
+
"产出文件": "Output files",
|
|
159
|
+
"无文件产出": "No output files",
|
|
160
|
+
"查看执行步骤": "View execution steps",
|
|
161
|
+
"查看步骤": "View steps",
|
|
162
|
+
"查看成果": "View results",
|
|
163
|
+
"任务概览": "Task overview",
|
|
164
|
+
"当前状态": "Current status",
|
|
165
|
+
"步骤已完成": "steps complete",
|
|
166
|
+
"最近一步": "Latest step",
|
|
167
|
+
"描述目标即可,CodeBee 会自动拆解并执行": "Describe the goal and CodeBee will break it down and run it",
|
|
168
|
+
"秒": "sec",
|
|
169
|
+
"分": "min",
|
|
170
|
+
"执行结果": "Execution result",
|
|
171
|
+
"执行者": "Executor",
|
|
172
|
+
"未知状态": "Unknown status",
|
|
151
173
|
"发送": "Send",
|
|
152
174
|
"继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)": "Keep typing… (Enter to send, Shift+Enter for a new line; paste screenshots directly)",
|
|
153
175
|
"成果": "Results",
|
|
@@ -256,6 +278,10 @@
|
|
|
256
278
|
"指令已撤回,不会送达执行": "Directive retracted — it will not reach the agent",
|
|
257
279
|
"撤回失败:": "Retract failed: ",
|
|
258
280
|
"蜂巢工作台": "Hive workbench",
|
|
281
|
+
"初始故事圣经": "Initial story bible",
|
|
282
|
+
"可选": "Optional",
|
|
283
|
+
"人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md": "Characters, world rules, main conflict, foreshadowing, and non-negotiable canon; saved to story-bible.md before the run starts",
|
|
284
|
+
"连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。": "Serial tasks inject it into every drafting and review step; leave this blank when the workdir already has story-bible.md to avoid overwriting existing canon.",
|
|
259
285
|
"在岗": "busy",
|
|
260
286
|
"全部空闲": "all idle",
|
|
261
287
|
"工作中": "working",
|
|
@@ -577,8 +603,8 @@
|
|
|
577
603
|
"(用 CLI 默认模型)": " (use CLI default model)",
|
|
578
604
|
"(用 CLI 默认模型——不会注入任何供应商凭据)": " (use CLI default model — no provider credentials injected)",
|
|
579
605
|
"(按供应商/难度自动解析)": " (auto by provider/difficulty)",
|
|
580
|
-
"
|
|
581
|
-
"
|
|
606
|
+
"(按供应商/难度自动解析——供应商协议不匹配或被停用时解析为空,相关步骤将判失败)": " (auto by provider/difficulty — resolves to empty and the step fails hard if the provider's protocol mismatches or is disabled)",
|
|
607
|
+
"模型链里有已停用/已删除的供应商:这些条目解析时会被跳过,链可能因此整体失效,相关步骤将判失败。": "The model chain contains disabled/deleted providers: those entries are skipped at resolve time, which can invalidate the whole chain and make affected steps fail hard.",
|
|
582
608
|
"名称": "Name",
|
|
583
609
|
"默认模型": "Default model",
|
|
584
610
|
"API 地址": "API endpoint",
|
|
@@ -609,11 +635,14 @@
|
|
|
609
635
|
"下午好呀,有什么想让我帮忙的吗": "Good afternoon — what can I help you with?",
|
|
610
636
|
"晚上好呀,有什么想让我帮忙的吗": "Good evening — what can I help you with?",
|
|
611
637
|
"常用类型": "Common types",
|
|
638
|
+
"预估:≈{0}{1}": "Est: ≈{0}{1}",
|
|
639
|
+
"近{0}天 · {1}次同类": "last {0}d · {1} similar runs",
|
|
612
640
|
"背景信息、约束、相关文件(可空)": "Background, constraints, related files (optional)",
|
|
613
641
|
"留空则保存到:": "Leave blank to save to: ",
|
|
614
642
|
"选择…": "Browse…",
|
|
615
643
|
"保存并运行": "Save and run",
|
|
616
644
|
"创建并运行": "Create and run",
|
|
645
|
+
"更多选项": "More options",
|
|
617
646
|
"高级选项(默认全智能,无需改动)": "Advanced (smart defaults — leave as-is)",
|
|
618
647
|
"智能": "Smart",
|
|
619
648
|
"手动": "Manual",
|
|
@@ -839,7 +868,7 @@
|
|
|
839
868
|
"重试": "Retry",
|
|
840
869
|
",点「升级到新版」即可": " — click \"Upgrade to new version\" to proceed",
|
|
841
870
|
"后点重新加载。": " and click Reload.",
|
|
842
|
-
"启用「参与编排」后,该智能体会出现在任务表单与评审组中。进入本页会自动检查各 CLI 是否有新版本;「默认模型」写入 CLI 自己的配置文件(CodeBee 之外也生效),CodeBee 编排运行时用哪个供应商 / 模型请到「CLI
|
|
871
|
+
"启用「参与编排」后,该智能体会出现在任务表单与评审组中。进入本页会自动检查各 CLI 是否有新版本;「默认模型」写入 CLI 自己的配置文件(CodeBee 之外也生效),CodeBee 编排运行时用哪个供应商 / 模型请到「CLI 绑定」页配置。点「一键绑定推荐模型」可为默认模型还空着的智能体自动填入推荐;厂商 / 模型停用或启用后也会自动补绑一次。安装命令不明的条目可直接编辑": "With \"Takes part in orchestration\" enabled, this agent shows up in the task form and review groups. Opening this page auto-checks each CLI for updates; \"default model\" is written into the CLI's own config file (takes effect outside CodeBee too) — to pick which provider/model CodeBee uses at runtime, go to the \"CLI Bindings\" page. \"Auto-bind recommended models\" fills in a recommendation for agents whose default model is empty; rebinding also runs automatically when providers/models are disabled or enabled. Entries with an unknown install command can be edited directly in",
|
|
843
872
|
"是默认皮肤,即原本的界面。": " is the default skin — the original interface.",
|
|
844
873
|
"每套皮肤都是一份完整配色,并且各带「日间 / 夜间」两版,明暗切换不会丢皮肤。选中的皮肤立即生效并记在这台设备上(手机与电脑各自独立)。": "Each skin is a complete palette, with day / night variants — switching brightness never loses your skin. The selected skin applies instantly and is remembered on this device (phone and computer are independent).",
|
|
845
874
|
"系统自己的经验沉淀:": "The system's own distilled experience:",
|
|
@@ -869,6 +898,13 @@
|
|
|
869
898
|
"模型已停用": "Model disabled",
|
|
870
899
|
"没有可推荐的:先到「模型接入」页导入与 CLI 协议匹配的供应商。": "Nothing to recommend — import providers matching the CLI protocols on the \"Models\" page first.",
|
|
871
900
|
"所有 CLI 都已配置模型链,无需推荐。": "All CLIs already have model chains — no recommendation needed.",
|
|
901
|
+
"一键绑定推荐模型": "Auto-bind recommended models",
|
|
902
|
+
"没有支持写入默认模型的已安装智能体。": "No installed agents support writing a default model.",
|
|
903
|
+
"所有已安装智能体都已配置默认模型,无需绑定。": "All installed agents already have a default model — nothing to bind.",
|
|
904
|
+
"已为 %1 个智能体写入推荐模型,%2 个失败。": "Wrote recommended models to %1 agent(s), %2 failed.",
|
|
905
|
+
"已为 %1 个智能体写入推荐模型(原配置已自动备份 .bak)。": "Wrote recommended models to %1 agent(s) (original configs backed up as .bak).",
|
|
906
|
+
"推荐模型写入失败:": "Failed to write recommended models: ",
|
|
907
|
+
"厂商/模型变动,已自动重绑 %1 处。": "Providers/models changed — %1 binding(s) auto-rebound.",
|
|
872
908
|
"已保存 %1 个 CLI 的绑定。": "Saved bindings for %1 CLI(s).",
|
|
873
909
|
"未安装": "Not installed",
|
|
874
910
|
"有新版本 ": "New version ",
|
|
@@ -1164,6 +1200,7 @@
|
|
|
1164
1200
|
"接管": "Take over",
|
|
1165
1201
|
"打开网页": "Open web",
|
|
1166
1202
|
"连接异常": "connection issue",
|
|
1203
|
+
"绑定链失效": "binding chain dead",
|
|
1167
1204
|
"连续失败": "consecutive failures",
|
|
1168
1205
|
"一致性": "Consistency",
|
|
1169
1206
|
"人物塑造": "Characters",
|
|
@@ -1193,10 +1230,10 @@
|
|
|
1193
1230
|
"),无需升级。": ") — no update needed.",
|
|
1194
1231
|
"+ 新建自定义流程": "+ New custom flow",
|
|
1195
1232
|
",可在「关于与更新」一键升级": " — one-click upgrade in About & Updates",
|
|
1196
|
-
",当前没有可注入的 CLI
|
|
1233
|
+
",当前没有可注入的 CLI,编排时相关步骤会直接判失败。": ", but no injectable CLI matches it — affected orchestration steps fail hard.",
|
|
1197
1234
|
":连续失败 ": ": consecutive failures ",
|
|
1198
1235
|
"该供应商协议为 ": "This provider's protocol is ",
|
|
1199
|
-
"
|
|
1236
|
+
"该供应商已停用:编排时不会注入它,模型链因此失效时相关步骤会直接判失败。": "This provider is disabled: orchestration won't inject it, and affected steps fail hard when the model chain is invalidated.",
|
|
1200
1237
|
"绑定后编排调用会注入该供应商的 API key 与地址;不绑定则只按下方模型链传 -m 参数。": "When bound, orchestrated calls inject this provider's API key and URL; otherwise only the model chain below is passed via -m.",
|
|
1201
1238
|
"还没有可选模型:先到「模型接入」页导入供应商并获取模型列表。": "No models available yet — import a provider and fetch its model list on the \"Models\" page first.",
|
|
1202
1239
|
"还没有已安装且可编排的 CLI——先到「智能体管理」页安装并启用。": "No installed, orchestration-capable CLI yet — install and enable one on the \"Agents\" page.",
|
|
@@ -1744,4 +1781,4 @@
|
|
|
1744
1781
|
} else {
|
|
1745
1782
|
applyI18n();
|
|
1746
1783
|
}
|
|
1747
|
-
})();
|
|
1784
|
+
})();
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
|
2
|
+
<!-- CodeBee 写实小蜂:琥珀黑条纹腹 + 绒毛胸背 + 半透明翅脉 + 扇翅动画。
|
|
3
|
+
经 <img> 引用(独立文档,渐变 id 互不串扰);翅动媒体查询随系统 reduce-motion 关停。 -->
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="cbAbd" x1="0" y1="0" x2="0" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#ffcd66"/>
|
|
7
|
+
<stop offset=".55" stop-color="#f0a92c"/>
|
|
8
|
+
<stop offset="1" stop-color="#c67c12"/>
|
|
9
|
+
</linearGradient>
|
|
10
|
+
<radialGradient id="cbThx" cx=".38" cy=".3" r="1.05">
|
|
11
|
+
<stop offset="0" stop-color="#7a5a26"/>
|
|
12
|
+
<stop offset=".6" stop-color="#3d2c10"/>
|
|
13
|
+
<stop offset="1" stop-color="#1f1505"/>
|
|
14
|
+
</radialGradient>
|
|
15
|
+
<linearGradient id="cbWing" x1="0" y1="0" x2="1" y2="1">
|
|
16
|
+
<stop offset="0" stop-color="#ffffff" stop-opacity=".85"/>
|
|
17
|
+
<stop offset="1" stop-color="#cfe0f5" stop-opacity=".16"/>
|
|
18
|
+
</linearGradient>
|
|
19
|
+
<clipPath id="cbAbdClip"><ellipse cx="32" cy="44" rx="11.5" ry="13.5"/></clipPath>
|
|
20
|
+
</defs>
|
|
21
|
+
<style>
|
|
22
|
+
.wingL, .wingR { transform-box: view-box; }
|
|
23
|
+
.wingL { transform-origin: 27px 21px; animation: cbFlapL .16s ease-in-out infinite alternate; }
|
|
24
|
+
.wingR { transform-origin: 37px 21px; animation: cbFlapR .16s ease-in-out infinite alternate; }
|
|
25
|
+
@keyframes cbFlapL { from { transform: rotate(-16deg); } to { transform: rotate(9deg); } }
|
|
26
|
+
@keyframes cbFlapR { from { transform: rotate(16deg); } to { transform: rotate(-9deg); } }
|
|
27
|
+
@media (prefers-reduced-motion: reduce) { .wingL, .wingR { animation: none; } }
|
|
28
|
+
</style>
|
|
29
|
+
|
|
30
|
+
<!-- 触角 -->
|
|
31
|
+
<path d="M29.5 8C27.5 4.6 24.6 3 21.8 3.6" fill="none" stroke="#241a05" stroke-width="1.4" stroke-linecap="round"/>
|
|
32
|
+
<path d="M34.5 8c2-3.4 4.9-5 7.7-4.4" fill="none" stroke="#241a05" stroke-width="1.4" stroke-linecap="round"/>
|
|
33
|
+
<circle cx="21.6" cy="3.7" r="1.5" fill="#241a05"/>
|
|
34
|
+
<circle cx="42.4" cy="3.7" r="1.5" fill="#241a05"/>
|
|
35
|
+
|
|
36
|
+
<!-- 左翅(前后两片,扇翅绕胸侧基点) -->
|
|
37
|
+
<g class="wingL">
|
|
38
|
+
<ellipse cx="16.5" cy="19.5" rx="11.5" ry="4.8" transform="rotate(-34 26 20.5)"
|
|
39
|
+
fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".65" stroke-width=".7"/>
|
|
40
|
+
<ellipse cx="20" cy="24.5" rx="8.2" ry="3.5" transform="rotate(-22 26.5 24.5)"
|
|
41
|
+
fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".55" stroke-width=".6"/>
|
|
42
|
+
<g transform="rotate(-34 26 20.5)" fill="none" stroke="#a9c1dd" stroke-opacity=".4" stroke-width=".5">
|
|
43
|
+
<path d="M26 20.5 8 15.5"/><path d="M26 21.5 7.5 20.5"/>
|
|
44
|
+
</g>
|
|
45
|
+
</g>
|
|
46
|
+
<!-- 右翅 -->
|
|
47
|
+
<g class="wingR">
|
|
48
|
+
<ellipse cx="47.5" cy="19.5" rx="11.5" ry="4.8" transform="rotate(34 38 20.5)"
|
|
49
|
+
fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".65" stroke-width=".7"/>
|
|
50
|
+
<ellipse cx="44" cy="24.5" rx="8.2" ry="3.5" transform="rotate(22 37.5 24.5)"
|
|
51
|
+
fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".55" stroke-width=".6"/>
|
|
52
|
+
<g transform="rotate(34 38 20.5)" fill="none" stroke="#a9c1dd" stroke-opacity=".4" stroke-width=".5">
|
|
53
|
+
<path d="M38 20.5 56 15.5"/><path d="M38 21.5 56.5 20.5"/>
|
|
54
|
+
</g>
|
|
55
|
+
</g>
|
|
56
|
+
|
|
57
|
+
<!-- 腹部:琥珀底 + 黑条纹 + 高光 + 螫针 -->
|
|
58
|
+
<ellipse cx="32" cy="44" rx="11.5" ry="13.5" fill="url(#cbAbd)"/>
|
|
59
|
+
<g clip-path="url(#cbAbdClip)" fill="#241a05">
|
|
60
|
+
<path d="M20 40.5 Q32 36.5 44 40.5 L44 46.5 Q32 42.5 20 46.5 Z"/>
|
|
61
|
+
<path d="M20.5 49 Q32 45.5 43.5 49 L43.2 54.5 Q32 51.5 20.8 54.5 Z" opacity=".92"/>
|
|
62
|
+
</g>
|
|
63
|
+
<path d="M25.2 36q-2.6 4-2 9.5" stroke="#ffe9ad" stroke-opacity=".7" stroke-width="1.6" stroke-linecap="round" fill="none"/>
|
|
64
|
+
<ellipse cx="32" cy="44" rx="11.5" ry="13.5" fill="none" stroke="#8a5a10" stroke-opacity=".35" stroke-width=".8"/>
|
|
65
|
+
<path d="M32 58.5 29.8 54h4.4Z" fill="#241a05"/>
|
|
66
|
+
|
|
67
|
+
<!-- 胸背:绒毛渐变 + 虚线描边模拟绒毛缘 -->
|
|
68
|
+
<ellipse cx="32" cy="25.5" rx="9.2" ry="9.8" fill="url(#cbThx)"/>
|
|
69
|
+
<ellipse cx="32" cy="25.5" rx="9.2" ry="9.8" fill="none" stroke="#8a6a2e" stroke-opacity=".45"
|
|
70
|
+
stroke-width="1" stroke-dasharray="1.2 1.6"/>
|
|
71
|
+
|
|
72
|
+
<!-- 头:复眼 + 高光 -->
|
|
73
|
+
<circle cx="32" cy="12.8" r="6.3" fill="#241a05"/>
|
|
74
|
+
<ellipse cx="28" cy="12.6" rx="2.4" ry="3" fill="#0e0a03"/>
|
|
75
|
+
<ellipse cx="36" cy="12.6" rx="2.4" ry="3" fill="#0e0a03"/>
|
|
76
|
+
<circle cx="28.9" cy="11.3" r=".7" fill="#7d6538" opacity=".8"/>
|
|
77
|
+
<circle cx="36.9" cy="11.3" r=".7" fill="#7d6538" opacity=".8"/>
|
|
78
|
+
<path d="M28.5 8.6q3.5-1.6 7 0" stroke="#8a6a2e" stroke-opacity=".55" stroke-width=".8" fill="none"/>
|
|
79
|
+
</svg>
|
package/app/ui/index.html
CHANGED
|
@@ -233,24 +233,14 @@
|
|
|
233
233
|
<button type="button" id="btn-wizard" class="ghost small" data-i18n="✨ 向导创建" data-i18n-title="三问一确认:目标 → 类型 → 目录,预填进表单" title="三问一确认:目标 → 类型 → 目录,预填进表单" onclick="openTaskWizard()">✨ 向导创建</button>
|
|
234
234
|
</div>
|
|
235
235
|
<p data-i18n="一句话目标即可 —— CodeBee 自动拆解、智能路由、执行、验证并跨厂商评审。" class="hint hero-sub">一句话目标即可 —— CodeBee 自动拆解、智能路由、执行、验证并跨厂商评审。</p>
|
|
236
|
-
<div class="form">
|
|
237
|
-
<!--
|
|
238
|
-
值真源仍是 #f-type / #f-workdir(既有 ID,联动与测试锚点全兼容)。 -->
|
|
239
|
-
<div class="cmp-pills">
|
|
240
|
-
<div class="
|
|
241
|
-
<
|
|
242
|
-
<
|
|
243
|
-
<
|
|
244
|
-
<span class="tp-name" id="f-type-name"></span>
|
|
245
|
-
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
246
|
-
</button>
|
|
247
|
-
<div id="type-menu" class="type-menu hidden" role="listbox" aria-label="任务类型" data-i18n-aria="任务类型"></div>
|
|
248
|
-
</div>
|
|
249
|
-
<button type="button" class="ghost small" id="btn-flows-mgr" data-i18n="管理" data-i18n-title="管理任务类型:新增/编辑自定义流程" title="管理任务类型:新增/编辑自定义流程" onclick="openFlowsManager()">管理</button>
|
|
250
|
-
<div class="cmp-wd">
|
|
251
|
-
<svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg>
|
|
252
|
-
<div class="input-row">
|
|
253
|
-
<input id="f-workdir" placeholder="留空则保存到默认路径;或填绝对路径,例 E:\GoOut\my-project" data-i18n-ph="留空则保存到默认路径;或填绝对路径,例 E:\GoOut\my-project">
|
|
236
|
+
<div class="form">
|
|
237
|
+
<!-- 参考对话式工作台:工作目录是上下文,任务类型放到底部工具栏。
|
|
238
|
+
值真源仍是 #f-type / #f-workdir(既有 ID,联动与测试锚点全兼容)。 -->
|
|
239
|
+
<div class="cmp-pills">
|
|
240
|
+
<div class="cmp-wd">
|
|
241
|
+
<svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg>
|
|
242
|
+
<div class="input-row">
|
|
243
|
+
<input id="f-workdir" placeholder="留空则保存到默认路径;或填绝对路径,例 E:\GoOut\my-project" data-i18n-ph="留空则保存到默认路径;或填绝对路径,例 E:\GoOut\my-project">
|
|
254
244
|
<button data-i18n="选择…" class="ghost small" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('f-workdir')">选择…</button>
|
|
255
245
|
</div>
|
|
256
246
|
</div>
|
|
@@ -263,10 +253,23 @@
|
|
|
263
253
|
<p class="hint" id="git-hint"></p>
|
|
264
254
|
</div>
|
|
265
255
|
<!-- Composer 大输入框:附件在左下、发送在右下;Enter 发送,Shift+Enter 换行 -->
|
|
266
|
-
<div class="cmp-box">
|
|
267
|
-
<
|
|
268
|
-
<
|
|
269
|
-
|
|
256
|
+
<div class="cmp-box">
|
|
257
|
+
<div class="cmp-context-note"><svg class="ico" aria-hidden="true"><use href="#i-chat"></use></svg><span data-i18n="描述目标即可,CodeBee 会自动拆解并执行">描述目标即可,CodeBee 会自动拆解并执行</span></div>
|
|
258
|
+
<textarea id="f-goal" rows="3" placeholder="要完成什么,一句话即可" required data-i18n-ph="要完成什么,一句话即可"></textarea>
|
|
259
|
+
<div class="cmp-bar">
|
|
260
|
+
<div class="cmp-mode">
|
|
261
|
+
<div class="type-wrap">
|
|
262
|
+
<select id="f-type" class="hidden" tabindex="-1" aria-hidden="true"></select>
|
|
263
|
+
<button type="button" id="f-type-btn" class="type-pick" onclick="toggleTypeMenu()" aria-haspopup="listbox" aria-controls="type-menu">
|
|
264
|
+
<span class="tp-ico" id="f-type-ico" aria-hidden="true"></span>
|
|
265
|
+
<span class="tp-name" id="f-type-name"></span>
|
|
266
|
+
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
267
|
+
</button>
|
|
268
|
+
<div id="type-menu" class="type-menu hidden" role="listbox" aria-label="任务类型" data-i18n-aria="任务类型"></div>
|
|
269
|
+
</div>
|
|
270
|
+
<button type="button" class="ghost small" id="btn-flows-mgr" data-i18n="管理" data-i18n-title="管理任务类型:新增/编辑自定义流程" title="管理任务类型:新增/编辑自定义流程" onclick="openFlowsManager()">管理</button>
|
|
271
|
+
</div>
|
|
272
|
+
<div class="att-strip">
|
|
270
273
|
<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>
|
|
271
274
|
<span class="att-hint" data-i18n="也可直接粘贴截图">也可直接粘贴截图</span>
|
|
272
275
|
<div id="att-chips" class="att-chips"></div>
|
|
@@ -280,6 +283,8 @@
|
|
|
280
283
|
</div>
|
|
281
284
|
<!-- 快捷类型:点一个即选定并聚焦目标框(renderQuickChips 渲染) -->
|
|
282
285
|
<div id="cmp-quick" class="cmp-quick" role="group" aria-label="常用类型" data-i18n-aria="常用类型"></div>
|
|
286
|
+
<!-- 开跑前成本预估(refreshEstimate 填充;无同类样本时保持隐藏) -->
|
|
287
|
+
<p class="hint cmp-estimate hidden" id="cmp-estimate"></p>
|
|
283
288
|
<div class="field hidden" id="row-resume-session">
|
|
284
289
|
<label data-i18n="选择会话">选择会话</label>
|
|
285
290
|
<select id="f-resume-session"><option data-i18n="(加载中…)">(加载中…)</option></select>
|
|
@@ -287,7 +292,7 @@
|
|
|
287
292
|
</div>
|
|
288
293
|
|
|
289
294
|
<details id="f-advanced">
|
|
290
|
-
<summary data-i18n="
|
|
295
|
+
<summary data-i18n="更多选项">更多选项</summary>
|
|
291
296
|
<div class="adv-body">
|
|
292
297
|
<div class="grid-2">
|
|
293
298
|
<div class="field">
|
|
@@ -310,8 +315,13 @@
|
|
|
310
315
|
<div id="f-code-only">
|
|
311
316
|
<div class="field"><label data-i18n="验证命令">验证命令</label><input id="f-verify" placeholder="例:python -m pytest -q(可空=只评审)" data-i18n-ph="例:python -m pytest -q(可空=只评审)"></div>
|
|
312
317
|
</div>
|
|
313
|
-
<div id="f-review-only" class="hidden">
|
|
314
|
-
<div
|
|
318
|
+
<div id="f-review-only" class="hidden">
|
|
319
|
+
<div id="bible-create-field" class="field hidden">
|
|
320
|
+
<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>
|
|
321
|
+
<textarea id="f-bible" rows="5" placeholder="人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md" data-i18n-ph="人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md"></textarea>
|
|
322
|
+
<p class="hint" data-i18n="连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。">连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。</p>
|
|
323
|
+
</div>
|
|
324
|
+
<div class="grid-3">
|
|
315
325
|
<div class="field"><label data-i18n="稿件文件(合并稿)">稿件文件(合并稿)</label><input id="f-manuscript" value="manuscript.md" placeholder="工作目录内的文件名" data-i18n-ph="工作目录内的文件名"></div>
|
|
316
326
|
<div class="field"><label data-i18n="评审轮数">评审轮数</label><input id="f-rounds" type="number" value="2" min="1" max="5"></div>
|
|
317
327
|
<div class="field"><label data-i18n="发布阈值(全书)">发布阈值(全书)</label><input id="f-threshold" type="number" value="7.0" min="1" max="10" step="0.5"></div>
|
|
@@ -363,16 +373,17 @@
|
|
|
363
373
|
<button data-i18n="基于此任务新建" id="btn-newfrom" class="ghost hidden">基于此任务新建</button>
|
|
364
374
|
<button data-i18n="删除记录" id="btn-delete" class="danger hidden">删除记录</button>
|
|
365
375
|
</div>
|
|
366
|
-
</div>
|
|
367
|
-
<div id="rd-meta" class="stats rd-meta-strip"></div>
|
|
368
|
-
<div id="rd-
|
|
369
|
-
|
|
370
|
-
<button class="rd-tab" data-tab="
|
|
371
|
-
<button class="rd-tab" data-tab="
|
|
372
|
-
<button class="rd-tab" data-tab="
|
|
373
|
-
<button class="rd-tab" data-tab="
|
|
374
|
-
<button class="rd-tab" data-tab="
|
|
375
|
-
<button class="rd-tab" data-tab="
|
|
376
|
+
</div>
|
|
377
|
+
<div id="rd-meta" class="stats rd-meta-strip"></div>
|
|
378
|
+
<div id="rd-overview" class="rd-overview hidden" aria-live="polite"></div>
|
|
379
|
+
<div id="rd-tabs" class="rd-tabs" role="tablist" data-i18n-aria="详情分区">
|
|
380
|
+
<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>
|
|
381
|
+
<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>
|
|
382
|
+
<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>
|
|
383
|
+
<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>
|
|
384
|
+
<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>
|
|
385
|
+
<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>
|
|
386
|
+
<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>
|
|
376
387
|
</div>
|
|
377
388
|
<!-- 直连任务「对话为主」导航:常规页签条收起(chat-mode),这里给按需打开
|
|
378
389
|
其它分区的小按钮 + 非对话分区时的「返回对话」入口 -->
|
|
@@ -380,7 +391,7 @@
|
|
|
380
391
|
<div class="rd-main">
|
|
381
392
|
<!-- 对话分区(直连任务默认):用户消息与 CLI 输出混排的时间线 + 贴底追话框。
|
|
382
393
|
运行中发出去走信箱(下一步送达);已结束发出去走 /chat 自动续跑新一轮。 -->
|
|
383
|
-
<div class="rd-pane" data-pane="chat">
|
|
394
|
+
<div id="rd-pane-chat" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-chat" data-pane="chat">
|
|
384
395
|
<div id="rd-chat" class="rd-chat hidden">
|
|
385
396
|
<div id="rd-chat-flow" class="rd-chat-flow"></div>
|
|
386
397
|
<div class="rd-chat-bar">
|
|
@@ -395,7 +406,7 @@
|
|
|
395
406
|
</div>
|
|
396
407
|
</div>
|
|
397
408
|
</div>
|
|
398
|
-
<div class="rd-pane" data-pane="hive">
|
|
409
|
+
<div id="rd-pane-hive" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-hive" data-pane="hive">
|
|
399
410
|
<div id="rd-hive" class="rd-hive hidden">
|
|
400
411
|
<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>
|
|
401
412
|
<div id="rd-hive-cells" class="hive-cells"></div>
|
|
@@ -417,22 +428,23 @@
|
|
|
417
428
|
</div>
|
|
418
429
|
</div>
|
|
419
430
|
</div>
|
|
420
|
-
<div class="rd-pane" data-pane="steps">
|
|
431
|
+
<div id="rd-pane-steps" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-steps" data-pane="steps">
|
|
421
432
|
<div id="rd-plan" class="hidden"></div>
|
|
422
433
|
<div id="rd-steps" class="steps"></div>
|
|
423
|
-
</div>
|
|
424
|
-
<div class="rd-pane" data-pane="result">
|
|
425
|
-
<
|
|
426
|
-
<
|
|
434
|
+
</div>
|
|
435
|
+
<div id="rd-pane-result" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-result" data-pane="result">
|
|
436
|
+
<div id="rd-outcome" class="rd-outcome hidden"></div>
|
|
437
|
+
<h3 data-i18n="报告" class="sec-title">报告</h3>
|
|
438
|
+
<div id="rd-report" class="report"></div>
|
|
427
439
|
<div id="rd-arts" class="rd-arts hidden"></div>
|
|
428
440
|
</div>
|
|
429
|
-
<div class="rd-pane" data-pane="git">
|
|
441
|
+
<div id="rd-pane-git" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-git" data-pane="git">
|
|
430
442
|
<div id="rd-git" class="rd-git hidden"></div>
|
|
431
443
|
</div>
|
|
432
|
-
<div class="rd-pane" data-pane="bible">
|
|
444
|
+
<div id="rd-pane-bible" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-bible" data-pane="bible">
|
|
433
445
|
<div id="rd-bible" class="rd-bible hidden"></div>
|
|
434
446
|
</div>
|
|
435
|
-
<div class="rd-pane" data-pane="bookmeta">
|
|
447
|
+
<div id="rd-pane-bookmeta" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-bookmeta" data-pane="bookmeta">
|
|
436
448
|
<div id="rd-bookmeta" class="rd-bookmeta hidden"></div>
|
|
437
449
|
</div>
|
|
438
450
|
<div id="rd-log" class="logbox rd-logdrawer hidden">
|
|
@@ -519,11 +531,12 @@
|
|
|
519
531
|
<div class="panel-head">
|
|
520
532
|
<h2 data-i18n="智能体目录">智能体目录</h2>
|
|
521
533
|
<div class="actions">
|
|
534
|
+
<button data-i18n="一键绑定推荐模型" id="btn-catalog-autobind" class="ghost">一键绑定推荐模型</button>
|
|
522
535
|
<button data-i18n="重新加载 catalog" id="btn-reload-catalog" class="ghost">重新加载 catalog</button>
|
|
523
536
|
<button data-i18n="恢复默认 catalog" id="btn-reset-catalog" class="ghost">恢复默认 catalog</button>
|
|
524
537
|
</div>
|
|
525
538
|
</div>
|
|
526
|
-
<p class="hint"><span data-i18n="启用「参与编排」后,该智能体会出现在任务表单与评审组中。进入本页会自动检查各 CLI 是否有新版本;「默认模型」写入 CLI 自己的配置文件(CodeBee 之外也生效),CodeBee 编排运行时用哪个供应商 / 模型请到「CLI
|
|
539
|
+
<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>
|
|
527
540
|
<h3 data-i18n="已安装" class="sec-title">已安装</h3>
|
|
528
541
|
<div id="ag-installed" class="cards"></div>
|
|
529
542
|
<h3 data-i18n="可安装" class="sec-title">可安装</h3>
|