codebee 0.1.48 → 0.1.50
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 +30 -0
- package/README.md +4 -150
- package/app/core/aiflavor.py +94 -2
- package/app/core/automation.py +55 -2
- package/app/core/builtin_agent.py +450 -32
- package/app/core/knowledge.py +432 -405
- package/app/core/manager.py +76 -3
- package/app/core/modelhub.py +53 -5
- package/app/core/pipeline.py +162 -88
- package/app/core/planner.py +45 -0
- package/app/core/preview.py +293 -0
- package/app/core/runner.py +336 -144
- package/app/core/settings.py +7 -1
- package/app/core/store.py +78 -7
- package/app/core/volumes.py +7 -5
- package/app/core/zentao.py +63 -13
- package/app/main.py +66 -1
- package/app/ui/app.js +741 -167
- package/app/ui/i18n.js +64 -31
- package/app/ui/index.html +57 -12
- package/app/ui/style.css +230 -33
- package/package.json +1 -1
package/app/ui/i18n.js
CHANGED
|
@@ -46,6 +46,16 @@
|
|
|
46
46
|
"推荐任务类型": "Recommended task type",
|
|
47
47
|
"切换类型": "Switch type",
|
|
48
48
|
"这个需求更适合「{0}」流程,能使用对应的规划与质量门禁。是否切换后执行?": "This request fits the {0} workflow, which provides matching planning and quality gates. Switch before running?",
|
|
49
|
+
// 自动化卡片上的偏好标签(短名与胶囊面同步取用)
|
|
50
|
+
"自动": "Auto",
|
|
51
|
+
"快速": "Fast",
|
|
52
|
+
"专家": "Expert",
|
|
53
|
+
"自动推荐": "Auto-recommended",
|
|
54
|
+
"编排模式:": "Orchestration mode: ",
|
|
55
|
+
"思考程度:": "Reasoning effort: ",
|
|
56
|
+
"对话模型:": "Chat model: ",
|
|
57
|
+
"只对「直接执行」类流程生效;留「自动推荐」时按系统路由挑模型。": "Applies only to the Direct execution workflow; leave it on Auto-recommended to let routing pick the model.",
|
|
58
|
+
"选择对话模型前请先选厂商": "Choose a provider before picking a chat model",
|
|
49
59
|
|
|
50
60
|
// —— 引擎/角色 ——
|
|
51
61
|
|
|
@@ -196,6 +206,15 @@
|
|
|
196
206
|
"发送": "Send",
|
|
197
207
|
"继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)": "Keep typing… (Enter to send, Shift+Enter for a new line; paste screenshots directly)",
|
|
198
208
|
"成果": "Results",
|
|
209
|
+
"运行预览": "Live preview",
|
|
210
|
+
"运行视图": "Run",
|
|
211
|
+
"实时运行入口页面": "Run the entry page live",
|
|
212
|
+
"预览视图": "Preview views",
|
|
213
|
+
"重新加载预览": "Reload the preview",
|
|
214
|
+
"打开新窗口": "Open in new window",
|
|
215
|
+
"在新窗口打开预览": "Open the preview in a new window",
|
|
216
|
+
"预览工作目录:": "Previewing working directory: ",
|
|
217
|
+
"正在读取文件…": "Reading file…",
|
|
199
218
|
"版本": "Code",
|
|
200
219
|
"圣经": "Bible",
|
|
201
220
|
"详情分区": "Detail sections",
|
|
@@ -323,6 +342,8 @@
|
|
|
323
342
|
"继续执行": "Resume",
|
|
324
343
|
"正在执行…": "Working…",
|
|
325
344
|
"(本轮无文本输出)": "(no text output this turn)",
|
|
345
|
+
"思考过程": "Thinking",
|
|
346
|
+
"字": "chars",
|
|
326
347
|
"也可直接粘贴截图": "or paste a screenshot directly",
|
|
327
348
|
"添加附件": "Add attachment",
|
|
328
349
|
"添加附件:截图/文本/代码/PDF 等,创建任务时落盘到工作目录 _attachments/": "Add attachments — screenshots/text/code/PDF; saved to the task workdir under _attachments/ on creation",
|
|
@@ -354,7 +375,7 @@
|
|
|
354
375
|
" 个任务目录": " task directories",
|
|
355
376
|
" 个来源": " sources",
|
|
356
377
|
" 个步骤": " steps",
|
|
357
|
-
" 条": "
|
|
378
|
+
" 条": " item(s)",
|
|
358
379
|
" / 共 ": " of ",
|
|
359
380
|
"只看该类": "Show only this category",
|
|
360
381
|
"该分类下暂无教训": "No lessons in this category yet",
|
|
@@ -366,7 +387,7 @@
|
|
|
366
387
|
" 次 · ": " runs · ",
|
|
367
388
|
" 第": " #",
|
|
368
389
|
" 轮对话上下文)": " turns of context)",
|
|
369
|
-
" 字": "
|
|
390
|
+
" 字": " words",
|
|
370
391
|
" 章": " ch",
|
|
371
392
|
" 万": "0,000",
|
|
372
393
|
" 亿": "00,000,000",
|
|
@@ -455,8 +476,8 @@
|
|
|
455
476
|
"CLI 绑定": "CLI bindings",
|
|
456
477
|
"模型调度(可选)": "Model routing (optional)",
|
|
457
478
|
"自动推荐(推荐)": "Automatic recommendation (recommended)",
|
|
458
|
-
"确认禁用模型 {0}
|
|
459
|
-
"
|
|
479
|
+
"确认禁用模型 {0}?调度链里它的条目会自动移除,其余模型不受影响;可在模型调度页重新启用。": "Disable model {0}? Its entry will be removed from the routing chain automatically; other models are unaffected. You can re-enable it under Model routing.",
|
|
480
|
+
"确认禁用该厂商?调度链里它的条目会自动移除,恢复后可在模型调度页重新启用。": "Disable this provider? Its entries will be removed from the routing chains automatically. You can re-enable it under Model routing.",
|
|
460
481
|
" 个供应商?\n相关显式模型调度会自动解除,此操作不可撤销。": " providers?\nRelated explicit model routing overrides will be removed. This cannot be undone.",
|
|
461
482
|
"编排设置": "Orchestrator",
|
|
462
483
|
"经验库": "Skill library",
|
|
@@ -618,7 +639,6 @@
|
|
|
618
639
|
"逐项目标核对:": "Beat-by-beat check: ",
|
|
619
640
|
"第": "Ch.",
|
|
620
641
|
"章": "",
|
|
621
|
-
" 字": " words",
|
|
622
642
|
" 轮": " rounds",
|
|
623
643
|
"只重写上一遍未过线的章节,已过线章节沿用成稿与评分": "Rewrites only the chapters that missed the threshold last run; passing chapters keep their drafts and scores.",
|
|
624
644
|
"再跑一次这个任务;连载任务会断点续跑,已完成章节不重写": "Run this task again; serial novels resume from the breakpoint — finished chapters are kept.",
|
|
@@ -749,7 +769,6 @@
|
|
|
749
769
|
"工作目录": "Working directory",
|
|
750
770
|
"类型": "Type",
|
|
751
771
|
"上下文": "Context",
|
|
752
|
-
"编排模式": "Orchestration mode",
|
|
753
772
|
"任务标题": "Task title",
|
|
754
773
|
"验证命令": "Verify command",
|
|
755
774
|
"稿件文件(合并稿)": "Manuscript file (merged)",
|
|
@@ -758,6 +777,19 @@
|
|
|
758
777
|
"评审维度(逗号分隔,可自定义)": "Review dimensions (comma-separated; custom OK)",
|
|
759
778
|
"连载模式:章节数(空 = 单稿件一次成文)": "Serial: chapters (blank = single draft)",
|
|
760
779
|
"每章约字数": "Approx. words per chapter",
|
|
780
|
+
// —— 分卷(卷结构:大纲规划 / 写作注入 / 成书分割 / UI 分组)——
|
|
781
|
+
"分卷:每卷章数(空 = 不分卷)": "Volumes: chapters per volume (blank = no volumes)",
|
|
782
|
+
"分卷:指定卷结构(可选,优先于每卷章数)": "Volumes: explicit structure (optional; overrides chapters per volume)",
|
|
783
|
+
"例:20(卷边界按全书章号自动推导)": "e.g. 20 (boundaries derived from book-wide chapter numbers)",
|
|
784
|
+
"例:第一卷 少年初入江湖 20章;第二卷 风云再起 16章": "e.g. Vol 1 The Young Wanderer 20 ch; Vol 2 Storm Rising 16 ch",
|
|
785
|
+
"每卷一行或分号分隔:卷名 + 章数(或第1-20章)。也可以在任务目标里直接这样写,会自动识别": "One per line or separated by semicolons: volume name + chapter count (or ch.1-20). You can also write this in the task goal — it is detected automatically.",
|
|
786
|
+
"分卷:每卷章数(留空 = 不分卷)": "Volumes: chapters per volume (blank = no volumes)",
|
|
787
|
+
"卷": "Vol",
|
|
788
|
+
"未分卷": "No volumes",
|
|
789
|
+
"其他文件": "Other files",
|
|
790
|
+
"分卷(卷结构)": "Volumes",
|
|
791
|
+
"长篇建议分卷。两种给法:填「每卷章数」(默认预填 20,清空 = 不分卷),系统按全书章号自动切卷;或者直接写明各卷——在「指定卷结构」框里,也可以在任务目标里写「第一卷 少年初入江湖 第1-20章;卷二 风云再起 21-40章」,会自动识别。给了卷名的会原样沿用,不会被改写。": "Long books should be split into volumes. Two ways: set \"chapters per volume\" (prefilled with 20; blank = no volumes) and boundaries are derived from book-wide chapter numbers, or spell the volumes out — in the \"explicit structure\" field, or straight in the task goal as \"Vol 1 The Young Wanderer ch.1-20; Vol 2 Storm Rising ch.21-40\", which is detected automatically. Volume names you supply are kept verbatim.",
|
|
792
|
+
"分卷会贯穿全程:大纲按卷给卷名与卷弧光(本卷主线冲突与卷末高潮);每章起草和评审都带着「第几卷第几章」,靠近卷末会提醒收拢支线、卷末章必须写出本卷高潮与卷末钩子;成书自动插入「第 X 卷《卷名》」分隔;详情页章节卡与发布页清单按卷分组,发章时一卷一卷地发。卷边界只看全书章号,所以续写批次会自动接上同一卷,不会把一卷劈成两半。": "Volumes apply end to end: the outline names each volume and its arc (the volume's main conflict and its climax); every chapter is drafted and reviewed knowing which volume and position it sits at, so chapters near a volume's end stop opening new threads and the final chapter of a volume must deliver that volume's climax and closing hook; the merged book gets \"Vol N: Title\" separators; and both the chapter review cards and the publish list are grouped by volume, so you can publish one volume at a time. Boundaries depend only on book-wide chapter numbers, so a continuation batch joins the same volume instead of cutting one in half.",
|
|
761
793
|
"实现者": "Implementer",
|
|
762
794
|
"评审组": "Reviewers",
|
|
763
795
|
"管理": "Manage",
|
|
@@ -807,7 +839,6 @@
|
|
|
807
839
|
"智能": "Smart",
|
|
808
840
|
"手动": "Manual",
|
|
809
841
|
"智能(推荐):自动拆解 + 智能路由 + 失败自动修复/换将": "Smart (recommended): auto-decompose + smart routing + auto-fix/swap on failure",
|
|
810
|
-
"手动:自行指定实现者与评审组": "Manual: pick implementer and reviewers yourself",
|
|
811
842
|
"代码引擎": "Code engine",
|
|
812
843
|
"评审引擎": "Review engine",
|
|
813
844
|
"直连引擎": "Direct engine",
|
|
@@ -1077,7 +1108,6 @@
|
|
|
1077
1108
|
"已为 %1 个智能体写入推荐模型,%2 个失败。": "Wrote recommended models to %1 agent(s), %2 failed.",
|
|
1078
1109
|
"已为 %1 个智能体写入推荐模型(原配置已自动备份 .bak)。": "Wrote recommended models to %1 agent(s) (original configs backed up as .bak).",
|
|
1079
1110
|
"推荐模型写入失败:": "Failed to write recommended models: ",
|
|
1080
|
-
"厂商/模型变动,已自动重绑 %1 处。": "Providers/models changed — %1 binding(s) auto-rebound.",
|
|
1081
1111
|
"已保存 %1 个 CLI 的绑定。": "Saved bindings for %1 CLI(s).",
|
|
1082
1112
|
"未安装": "Not installed",
|
|
1083
1113
|
"有新版本 ": "New version ",
|
|
@@ -1281,7 +1311,6 @@
|
|
|
1281
1311
|
"适用:": "Applies to: ",
|
|
1282
1312
|
"运行该类型任务时自动注入提示词,无需手动调用": "Auto-injected into prompts when a task of this type runs — no manual invocation",
|
|
1283
1313
|
"约 ": "about ",
|
|
1284
|
-
"字": "chars",
|
|
1285
1314
|
"已内置": "Built-in",
|
|
1286
1315
|
"已启用": "Enabled",
|
|
1287
1316
|
"已停用(不再注入任务提示词)": "Disabled — no longer injected into task prompts",
|
|
@@ -1318,12 +1347,8 @@
|
|
|
1318
1347
|
"操作状态": "Operations",
|
|
1319
1348
|
"清除已完成": "Clear completed",
|
|
1320
1349
|
"创建任务": "Create task",
|
|
1321
|
-
"删除任务": "Delete task",
|
|
1322
|
-
"归档任务": "Archive task",
|
|
1323
1350
|
"重试任务": "Retry task",
|
|
1324
1351
|
"创建续写任务": "Create continuation",
|
|
1325
|
-
"重命名任务": "Rename task",
|
|
1326
|
-
"取消运行": "Cancel run",
|
|
1327
1352
|
"删除运行": "Delete run",
|
|
1328
1353
|
"清理运行记录": "Clear run history",
|
|
1329
1354
|
"上传附件": "Upload attachment",
|
|
@@ -1346,7 +1371,6 @@
|
|
|
1346
1371
|
"{0} 项失败": "{0} failed",
|
|
1347
1372
|
"操作完成": "Operation complete",
|
|
1348
1373
|
"处理中": "In progress",
|
|
1349
|
-
"失败": "Failed",
|
|
1350
1374
|
"已完成": "Completed",
|
|
1351
1375
|
"该插件含脚本/钩子/MCP 组件,仅支持纯技能类插件": "Contains scripts/hooks/MCP components — only pure skill plugins are supported",
|
|
1352
1376
|
" 个供应商(google 等协议)仅登记,不支持注入 CLI,未出现在上面的下拉中。": " provider(s) (google etc.) are registry-only, can't inject into CLIs, and are hidden from the dropdown above.",
|
|
@@ -1386,7 +1410,6 @@
|
|
|
1386
1410
|
"调用": "Calls",
|
|
1387
1411
|
"费用": "Cost",
|
|
1388
1412
|
"轮": " rounds",
|
|
1389
|
-
"章": " chapters",
|
|
1390
1413
|
"万": "K",
|
|
1391
1414
|
"亿": "B",
|
|
1392
1415
|
"年": "",
|
|
@@ -1521,8 +1544,8 @@
|
|
|
1521
1544
|
"做法": "Best practice",
|
|
1522
1545
|
"已验证有效的做法(程序性记忆)": "Verified working procedure (procedural memory)",
|
|
1523
1546
|
"已清除 ": "Cleared ",
|
|
1524
|
-
"已禁用厂商 {0}
|
|
1525
|
-
"已禁用模型 {0} · {1}
|
|
1547
|
+
"已禁用厂商 {0}:调度链已自动移除它的条目,绑定页可重新启用": "Provider {0} disabled: its entries were removed from the routing chains — re-enable on the Bindings page",
|
|
1548
|
+
"已禁用模型 {0} · {1},调度链已自动移除它;绑定页可重新启用": "Model {0} · {1} disabled: its entry was removed from the routing chain — re-enable on the Bindings page",
|
|
1526
1549
|
"已静默 {0} 的告警(恢复后自动重新武装)": "Muted {0}'s alert (auto-rearms on recovery)",
|
|
1527
1550
|
"开始升级": "Start upgrade",
|
|
1528
1551
|
"当前状态不支持": "Not supported in the current state",
|
|
@@ -1588,7 +1611,7 @@
|
|
|
1588
1611
|
"评分点覆盖": "Scoring coverage",
|
|
1589
1612
|
"商务清晰度": "Commercial clarity",
|
|
1590
1613
|
"扫榜选材": "Rank Scan for Topics",
|
|
1591
|
-
"
|
|
1614
|
+
"抓取七猫+番茄排行榜公开数据 → AI 提炼跨平台热门题材/人设/差异化切入点(快档直出报告)": "Grabs public Qimao + Fanqie ranking data → AI distills cross-platform hot genres / character archetypes / differentiation angles (fast lane, report straight out)",
|
|
1592
1615
|
"想写哪个方向(一句话,可留空默认分析总榜热门题材)": "Which direction to write (one sentence; leave empty to analyze the overall hot genres)",
|
|
1593
1616
|
|
|
1594
1617
|
// —— 插件市场远程来源名(market_remote.py)——
|
|
@@ -1612,6 +1635,7 @@
|
|
|
1612
1635
|
"要解决什么问题、约束条件(工期/技术栈/预算)、给谁评审": "Problem to solve, constraints (timeline / stack / budget), who reviews it",
|
|
1613
1636
|
"目标岗位 + 个人经历(可贴旧简历附件),几年经验投什么职级": "Target role + experience (attach the old resume), years of experience and the level you're applying for",
|
|
1614
1637
|
"实现 → 验证命令 → 跨厂商评审 → 自动修复/换将": "Implement → verify command → cross-provider review → auto-fix / swap agent",
|
|
1638
|
+
"按难度动态编排:简单任务走实现+验证短链,复杂任务增加规划、评审、修复与换将": "Orchestrated by difficulty: simple tasks take a short implement-and-verify path; complex ones add planning, review, fixing and agent swapping",
|
|
1615
1639
|
"CodeBee 直连模型 API 干活(无 CLI 进程),无可用供应商时回退本机 CLI;无拆解/评审(快)": "CodeBee runs directly to the model API (no CLI process); when no usable provider exists, falls back to the local CLI; no decomposition/review (fast)",
|
|
1616
1640
|
"起草 → 多维评审 → 修订循环 → 发布门禁": "Draft → multi-dim review → revision loop → publish gate",
|
|
1617
1641
|
"大纲 → 逐章起草 → 每章多维评审修订 → 全局一致性评审 → 合并(可断点续跑)": "Outline → chapter-by-chapter drafting → per-chapter multi-dim review & revision → global consistency review → merge (resumable)",
|
|
@@ -1963,7 +1987,6 @@
|
|
|
1963
1987
|
"正在安装 wechatauto-replica…(约 1-3 分钟)": "Installing wechatauto-replica… (1-3 minutes)",
|
|
1964
1988
|
"安装完成,依赖已就绪": "Installed — dependency ready",
|
|
1965
1989
|
"安装失败,详见状态行": "Install failed — see status line",
|
|
1966
|
-
"扫描失败:": "Scan failed: ",
|
|
1967
1990
|
"安装失败:": "Install failed: ",
|
|
1968
1991
|
"谁占着端口、属于哪个项目一目了然;「仅本机」的端口外网不可达。关闭只发温和信号,系统进程与本服务自身拒绝关闭。": "See at a glance which process holds each port and which project it belongs to; \"local only\" ports are unreachable from outside. Close sends a gentle termination signal only — system processes and this service itself are refused.",
|
|
1969
1992
|
"端口": "Port",
|
|
@@ -1971,9 +1994,7 @@
|
|
|
1971
1994
|
"项目": "Project",
|
|
1972
1995
|
"仅本机": "local only",
|
|
1973
1996
|
"本服务": "this service",
|
|
1974
|
-
"关闭": "Close",
|
|
1975
1997
|
"没有发现监听端口": "No listening ports found",
|
|
1976
|
-
"扫描失败:": "Scan failed: ",
|
|
1977
1998
|
"结束占用端口 %1 的进程?先温和关闭,无效会自动强制结束(系统进程会被拒绝)": "Kill the process holding port %1? Gentle close first, forced kill if ignored (system processes are refused)",
|
|
1978
1999
|
"已关闭": "Closed",
|
|
1979
2000
|
"未能关闭": "Could not close",
|
|
@@ -2003,10 +2024,13 @@
|
|
|
2003
2024
|
"自动 resolve Bug": "Auto-resolve bugs",
|
|
2004
2025
|
"自动合并代码": "Auto-merge code",
|
|
2005
2026
|
"定时扫描": "Scheduled scan",
|
|
2006
|
-
"
|
|
2027
|
+
"扫描间隔": "Scan interval",
|
|
2028
|
+
"分钟": "min",
|
|
2029
|
+
"定时扫描的间隔,最小 5 分钟": "Interval between scheduled scans; 5 minutes minimum",
|
|
2007
2030
|
"已保存(不改就留空)": "Saved (leave blank to keep)",
|
|
2008
2031
|
"定时扫描已开启,每 ": "Scheduled scan on, every ",
|
|
2009
2032
|
" 小时一次": " h",
|
|
2033
|
+
" 分钟一次": " min",
|
|
2010
2034
|
",下次 ": ", next ",
|
|
2011
2035
|
"定时扫描未开启(仍可手动「立即扫描」)": "Scheduled scan off (manual \"Scan Now\" still works)",
|
|
2012
2036
|
"上次扫描 ": "Last scan ",
|
|
@@ -2060,7 +2084,6 @@
|
|
|
2060
2084
|
"禅道账号,转派/升级用": "ZenTao account for transfer/escalation",
|
|
2061
2085
|
"空 = 指回报告人": "blank = back to reporter",
|
|
2062
2086
|
"模块路由(模块 → 端/人,排查优先级最高)": "Module routes (module → side/owner, top triage priority)",
|
|
2063
|
-
"拉取模块清单": "Fetch modules",
|
|
2064
2087
|
"+ 加路由": "+ Add route",
|
|
2065
2088
|
"模块 ID": "Module ID",
|
|
2066
2089
|
"转给谁(禅道账号,可空)": "Transfer to (ZenTao account, optional)",
|
|
@@ -2092,7 +2115,6 @@
|
|
|
2092
2115
|
"— 选产品 —": "— Pick a product —",
|
|
2093
2116
|
"(已关闭)": " (closed)",
|
|
2094
2117
|
"已拉到 ": "Fetched ",
|
|
2095
|
-
"、": ", ",
|
|
2096
2118
|
" 个产品": " products",
|
|
2097
2119
|
" 个账号": " accounts",
|
|
2098
2120
|
",产品/负责人已是下拉选择": " — products/owners are now dropdowns",
|
|
@@ -2288,27 +2310,22 @@
|
|
|
2288
2310
|
"下次:": "Next: ",
|
|
2289
2311
|
"未配置可用模型,请先到「绑定」页设置": "No usable model configured — set one up on the Bindings page first",
|
|
2290
2312
|
"还没有摘要": "No digests yet",
|
|
2291
|
-
" 条": " msg(s)",
|
|
2292
2313
|
"群摘要设置已保存": "Digest settings saved",
|
|
2293
|
-
"保存失败:": "Save failed: ",
|
|
2294
2314
|
"扫描完成,生成": "Scan finished — ",
|
|
2295
2315
|
" 条新摘要": " new digest(s)",
|
|
2296
2316
|
"扫描完成,暂无新内容": "Scan finished — nothing new",
|
|
2297
2317
|
"扫描有问题:": "Scan issue: ",
|
|
2298
|
-
"扫描失败:": "Scan failed: ",
|
|
2299
2318
|
|
|
2300
2319
|
// —— 群摘要·微信直连(wx_reader sidecar)——
|
|
2301
2320
|
"从本机微信自动拉取(微信直连)": "Pull automatically from local WeChat (direct connection)",
|
|
2302
2321
|
"64 位 Python 路径(需装 wechatauto-replica)": "64-bit Python path (with wechatauto-replica installed)",
|
|
2303
2322
|
"例如 C:\\Users\\HP\\anaconda3\\envs\\wxprobe\\python.exe": "e.g. C:\\Users\\HP\\anaconda3\\envs\\wxprobe\\python.exe",
|
|
2304
2323
|
"选择要监听的群({0})": "Pick groups to watch ({0})",
|
|
2305
|
-
"刷新群列表": "Refresh group list",
|
|
2306
2324
|
"搜索群名": "Search group name",
|
|
2307
2325
|
"群列表为空,点「刷新群列表」": "Group list is empty — click \"Refresh group list\"",
|
|
2308
2326
|
"没有匹配的群": "No matching groups",
|
|
2309
2327
|
"刷新中…": "Refreshing…",
|
|
2310
2328
|
"群列表已更新:": "Group list updated: ",
|
|
2311
|
-
"刷新失败:": "Refresh failed: ",
|
|
2312
2329
|
"转知识库": "To Knowledge Base",
|
|
2313
2330
|
"已转入": "Saved",
|
|
2314
2331
|
"已转入知识库(草稿态,转正后才会注入任务提示词)": "Saved to the knowledge base (draft — it won't feed task prompts until approved)",
|
|
@@ -2339,10 +2356,12 @@
|
|
|
2339
2356
|
"合并导入:保留本机现有数据,备份包里的同名条目覆盖进来。替换导入:先清空本机数据目录再整体落入(宠物锁与历史导入备份除外)——只在想把新机器变成备份包原样时使用。": "Merge: keep local data, overlay same-name items from the backup. Replace: wipe the local data directory first, then restore the backup as-is (pet lock and past import backups excepted) — only use this to make this machine exactly match the backup.",
|
|
2340
2357
|
"路径重映射(换电脑/换路径时把旧路径改写为新路径,推荐开启)": "Path remap (rewrite old paths to the new machine/path — recommended)",
|
|
2341
2358
|
"确认导入": "Import now",
|
|
2342
|
-
"重启服务生效": "Restart to apply",
|
|
2343
2359
|
"每日清理": "Daily cleanup",
|
|
2344
2360
|
"每天自动清理运行过程日志、发布截图、配置备份残留等可再生数据(保留运行记录与结果报告),防止磁盘越积越满。手稿、任务记录、经验库等用户数据永不清理。": "Once a day, automatically clear regenerable clutter — run process logs, publishing screenshots, leftover config backups — while keeping run records and result reports, so the disk doesn't fill up. Manuscripts, task records, the experience base and other user data are never touched.",
|
|
2345
2361
|
"启用每日自动清理": "Enable daily automatic cleanup",
|
|
2362
|
+
"打开/运行前直写 claude 配置": "Write claude config on open/run",
|
|
2363
|
+
"把绑定供应商写进 ~/.claude/settings.json(一键打开与每次运行前)": "Write the bound provider into ~/.claude/settings.json (One-click Open and before every run)",
|
|
2364
|
+
"开启后 CodeBee 会覆盖 cc-switch 等工具对交互 claude 的手选配置。关闭后交互 claude 配置归你手动管理;编排步骤改用一次性注入,模型路由不受影响。": "When on, CodeBee overwrites the interactive-claude provider picked via cc-switch and similar tools. When off, your interactive claude config stays hand-managed; orchestration steps switch to per-run one-shot injection, so model routing is unaffected.",
|
|
2346
2365
|
"保留天数": "Retention (days)",
|
|
2347
2366
|
"立即清理": "Clean up now",
|
|
2348
2367
|
"清理发布浏览器缓存(需重新扫码登录)": "Clear publishing browser cache (requires QR re-login)",
|
|
@@ -2437,6 +2456,13 @@
|
|
|
2437
2456
|
"项目资料与沉淀": "Project docs and notes",
|
|
2438
2457
|
"装技能扩展能力": "Install skills to extend",
|
|
2439
2458
|
"定时与周期执行": "Scheduled and recurring runs",
|
|
2459
|
+
|
|
2460
|
+
// —— 侧栏常驻:用量条 + 计数徽章 ——
|
|
2461
|
+
"本月用量": "This month",
|
|
2462
|
+
"本月用量与费用(点击看完整统计)": "Usage and cost this month (click for full stats)",
|
|
2463
|
+
"本月还没有调用": "No runs this month yet",
|
|
2464
|
+
" tokens · ": " tokens · ",
|
|
2465
|
+
"正在运行或排队 ": "Running or queued: ",
|
|
2440
2466
|
};
|
|
2441
2467
|
|
|
2442
2468
|
// ---------- 工具 ----------
|
|
@@ -2516,11 +2542,18 @@
|
|
|
2516
2542
|
});
|
|
2517
2543
|
// 编排 pill 短名取自 option 文本,重译后要跟着换语言
|
|
2518
2544
|
if (typeof window.syncCmpSelFace === "function") {
|
|
2519
|
-
|
|
2545
|
+
// au-* 是自动化弹框里的偏好胶囊:弹框未开时这两个 id 不在 DOM 里,
|
|
2546
|
+
// syncCmpSelFace 对缺失元素直接返回,无需额外守卫
|
|
2547
|
+
["f-mode", "f-thinking", "au-mode", "au-thinking"].forEach((id) => window.syncCmpSelFace(id));
|
|
2520
2548
|
}
|
|
2521
2549
|
if (typeof window.cmpDirectBtnSync === "function") {
|
|
2522
2550
|
window.cmpDirectBtnSync(); // 「自动推荐/推荐」等词也要换语言
|
|
2523
2551
|
}
|
|
2552
|
+
// 顶栏标题不走 data-i18n(页名随当前页变,静态属性给不了),换语言后在这里补画;
|
|
2553
|
+
// 组名读的是左栏导航文本,此时已被上面的重译扫过,拿到的是新语言的组名
|
|
2554
|
+
if (typeof window.renderPageCrumb === "function") {
|
|
2555
|
+
window.renderPageCrumb();
|
|
2556
|
+
}
|
|
2524
2557
|
}
|
|
2525
2558
|
|
|
2526
2559
|
// 暴露
|
package/app/ui/index.html
CHANGED
|
@@ -114,19 +114,23 @@
|
|
|
114
114
|
<span class="ss-label" data-i18n="搜索">搜索</span>
|
|
115
115
|
<span class="kbd" aria-hidden="true">Ctrl K</span>
|
|
116
116
|
</button>
|
|
117
|
+
<!-- 快捷导航:只放最常用的全局页(data-page 是页面 id 真源)。
|
|
118
|
+
点它们只换主栏内容,左栏任务树原地不动(app.js switchTab 的 main 形态);
|
|
119
|
+
对应入口已从下面设置导航移除,同一页不再两处重复。 -->
|
|
117
120
|
<div class="side-quick">
|
|
118
|
-
<button class="qitem" id="btn-q-overview" title="概览" data-i18n-title="概览">
|
|
121
|
+
<button class="qitem" id="btn-q-overview" data-page="overview" title="概览" data-i18n-title="概览">
|
|
119
122
|
<svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>
|
|
120
123
|
<span data-i18n="概览">概览</span>
|
|
121
124
|
</button>
|
|
122
|
-
<button class="qitem" id="btn-q-
|
|
125
|
+
<button class="qitem" id="btn-q-runs" data-page="runs" title="运行记录" data-i18n-title="运行记录">
|
|
126
|
+
<svg class="ico" aria-hidden="true"><use href="#i-history"></use></svg>
|
|
127
|
+
<span data-i18n="运行记录">运行记录</span>
|
|
128
|
+
<span class="nav-badge hidden" id="nav-badge-runs"></span>
|
|
129
|
+
</button>
|
|
130
|
+
<button class="qitem" id="btn-q-automation" data-page="automation" title="自动化" data-i18n-title="自动化">
|
|
123
131
|
<svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg>
|
|
124
132
|
<span data-i18n="自动化">自动化</span>
|
|
125
133
|
</button>
|
|
126
|
-
<button class="qitem" id="btn-q-market" title="插件市场" data-i18n-title="插件市场">
|
|
127
|
-
<svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>
|
|
128
|
-
<span data-i18n="插件市场">插件市场</span>
|
|
129
|
-
</button>
|
|
130
134
|
</div>
|
|
131
135
|
<div class="side-section tasks">
|
|
132
136
|
<div class="side-label-row">
|
|
@@ -146,6 +150,20 @@
|
|
|
146
150
|
</div>
|
|
147
151
|
<div id="side-tasks" class="side-tasks"></div>
|
|
148
152
|
</div>
|
|
153
|
+
<!-- 底部用量条:陈列真实台账数字(本月调用/花费 + 近 14 天走势)。
|
|
154
|
+
刻意不做「用量 68%」那种百分比进度条——CodeBee 没有套餐配额,
|
|
155
|
+
硬编一个分母就是假数;这里给的都是能直接核对的真值。 -->
|
|
156
|
+
<button id="side-usage" class="side-usage" type="button" onclick="switchTab('usage')"
|
|
157
|
+
title="本月用量与费用(点击看完整统计)" data-i18n-title="本月用量与费用(点击看完整统计)">
|
|
158
|
+
<span class="su-top">
|
|
159
|
+
<span class="su-label" data-i18n="本月用量">本月用量</span>
|
|
160
|
+
<span class="su-cost" id="su-cost">—</span>
|
|
161
|
+
</span>
|
|
162
|
+
<span class="su-mid">
|
|
163
|
+
<span class="su-tok" id="su-tok">—</span>
|
|
164
|
+
<span class="su-spark" id="su-spark"></span>
|
|
165
|
+
</span>
|
|
166
|
+
</button>
|
|
149
167
|
<div class="side-foot">
|
|
150
168
|
<button id="btn-settings" class="foot-btn" title="设置" aria-label="设置" data-i18n-aria="设置" data-i18n-title="设置">
|
|
151
169
|
<svg class="ico ico-lg" aria-hidden="true"><use href="#i-gear"></use></svg>
|
|
@@ -178,12 +196,9 @@
|
|
|
178
196
|
<button id="btn-set-back" class="set-back" data-i18n="返回 CodeBee">
|
|
179
197
|
<svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回 CodeBee
|
|
180
198
|
</button>
|
|
181
|
-
|
|
182
|
-
<button class="set-item" data-sub="overview" data-i18n="概览"><svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>概览</button>
|
|
199
|
+
<!-- 概览 / 运行记录 / 自动化已升为左栏快捷导航(见 .side-quick),此处不再重复挂条目 -->
|
|
183
200
|
<div data-i18n="编排" class="set-group">编排</div>
|
|
184
201
|
<button class="set-item active" data-sub="tasks" data-i18n="任务"><svg class="ico" aria-hidden="true"><use href="#i-tasks"></use></svg>任务</button>
|
|
185
|
-
<button class="set-item" data-sub="runs" data-i18n="运行记录"><svg class="ico" aria-hidden="true"><use href="#i-history"></use></svg>运行记录</button>
|
|
186
|
-
<button class="set-item" data-sub="automation" data-i18n="自动化"><svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg>自动化</button>
|
|
187
202
|
<button class="set-item" data-sub="hooks" data-i18n="钩子"><svg class="ico" aria-hidden="true"><use href="#i-link"></use></svg>钩子</button>
|
|
188
203
|
<button class="set-item" data-sub="__wxdigest" data-i18n="微信群聊汇报"><svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg>微信群聊汇报</button>
|
|
189
204
|
<button class="set-item" data-sub="zentao" data-i18n="禅道"><svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>禅道</button>
|
|
@@ -218,7 +233,12 @@
|
|
|
218
233
|
<svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span id="upd-pill-txt"></span>
|
|
219
234
|
<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>
|
|
220
235
|
</button>
|
|
221
|
-
<div
|
|
236
|
+
<div class="page-title-wrap">
|
|
237
|
+
<!-- 面包屑父级(设置子页显示「组名」,主栏页隐藏);page-title 本体
|
|
238
|
+
保持纯页名——多处测试断言它的 textContent 精确等于页名,不能并入 -->
|
|
239
|
+
<span id="crumb-root" class="crumb-root hidden" aria-hidden="true"></span>
|
|
240
|
+
<div data-i18n="任务" id="page-title" class="page-title">任务</div>
|
|
241
|
+
</div>
|
|
222
242
|
<div id="health-banner" class="health-banner hidden" onclick="healthBannerClick()" title="供应商健康告警" aria-label="供应商健康告警" data-i18n-title="供应商健康告警" data-i18n-aria="供应商健康告警"></div>
|
|
223
243
|
<div class="top-actions">
|
|
224
244
|
<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>
|
|
@@ -436,7 +456,9 @@
|
|
|
436
456
|
<div class="field"><label data-i18n="连载模式:章节数(空 = 单稿件一次成文)">连载模式:章节数(空 = 单稿件一次成文)</label><input id="f-chapters" type="number" min="2" max="20" placeholder="例:8(逐章起草+评审+修订)" data-i18n-ph="例:8(逐章起草+评审+修订)"></div>
|
|
437
457
|
<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>
|
|
438
458
|
<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>
|
|
459
|
+
<div class="field"><label data-i18n="分卷:每卷章数(空 = 不分卷)">分卷:每卷章数(空 = 不分卷)</label><input id="f-vol-chapters" type="number" min="2" max="200" step="1" placeholder="例:20(卷边界按全书章号自动推导)" data-i18n-ph="例:20(卷边界按全书章号自动推导)"></div>
|
|
439
460
|
</div>
|
|
461
|
+
<div class="field" id="f-vol-spec-field"><label data-i18n="分卷:指定卷结构(可选,优先于每卷章数)">分卷:指定卷结构(可选,优先于每卷章数)</label><input id="f-vol-spec" placeholder="例:第一卷 少年初入江湖 20章;第二卷 风云再起 16章" data-i18n-ph="例:第一卷 少年初入江湖 20章;第二卷 风云再起 16章" data-i18n-title="每卷一行或分号分隔:卷名 + 章数(或第1-20章)。也可以在任务目标里直接这样写,会自动识别" title="每卷一行或分号分隔:卷名 + 章数(或第1-20章)。也可以在任务目标里直接这样写,会自动识别"></div>
|
|
440
462
|
</div>
|
|
441
463
|
|
|
442
464
|
<div id="f-manual-only" class="hidden">
|
|
@@ -509,6 +531,7 @@
|
|
|
509
531
|
<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>
|
|
510
532
|
<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>
|
|
511
533
|
<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>
|
|
534
|
+
<button id="rd-tab-preview" class="rd-tab" role="tab" aria-controls="rd-pane-preview" aria-selected="false" tabindex="-1" data-tab="preview" data-i18n="预览"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-clapper"></use></svg>预览<span class="rd-badge hidden"></span></button>
|
|
512
535
|
<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>
|
|
513
536
|
<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>
|
|
514
537
|
<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>
|
|
@@ -613,6 +636,24 @@
|
|
|
613
636
|
<div id="rd-report" class="report"></div>
|
|
614
637
|
<div id="rd-arts" class="rd-arts hidden"></div>
|
|
615
638
|
</div>
|
|
639
|
+
<!-- 网页成品预览:左「运行」实时 iframe + 右各代码文件(借鉴对话式编程
|
|
640
|
+
产品的预览窗)。入口 HTML 由后端从工作目录成品里挑,页签条在此渲染。 -->
|
|
641
|
+
<div id="rd-pane-preview" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-preview" data-pane="preview">
|
|
642
|
+
<div id="rd-preview" class="rd-preview hidden">
|
|
643
|
+
<div class="pv-head">
|
|
644
|
+
<div id="rd-pv-tabs" class="pv-tabs" role="tablist" data-i18n-aria="预览视图"></div>
|
|
645
|
+
<span class="pv-spacer"></span>
|
|
646
|
+
<button id="rd-pv-reload" class="ghost small" data-i18n-title="重新加载预览" title="重新加载预览">
|
|
647
|
+
<svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span data-i18n="刷新">刷新</span>
|
|
648
|
+
</button>
|
|
649
|
+
<a id="rd-pv-open" class="ghost small" target="_blank" rel="noopener" data-i18n-title="在新窗口打开预览" title="在新窗口打开预览">
|
|
650
|
+
<svg class="ico" aria-hidden="true"><use href="#i-globe"></use></svg><span data-i18n="打开新窗口">打开新窗口</span>
|
|
651
|
+
</a>
|
|
652
|
+
</div>
|
|
653
|
+
<div id="rd-pv-body" class="pv-body"></div>
|
|
654
|
+
<div id="rd-pv-hint" class="pv-hint hidden"></div>
|
|
655
|
+
</div>
|
|
656
|
+
</div>
|
|
616
657
|
<div id="rd-pane-git" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-git" data-pane="git">
|
|
617
658
|
<div id="rd-git" class="rd-git hidden"></div>
|
|
618
659
|
</div>
|
|
@@ -692,7 +733,7 @@
|
|
|
692
733
|
<label class="toggle" title="修复任务评审通过后,自动到禅道 resolve(fixed)并回评论" data-i18n-title="修复任务评审通过后,自动到禅道 resolve(fixed)并回评论"><input id="zt-autoresolve" type="checkbox"><span data-i18n="自动 resolve Bug">自动 resolve Bug</span></label>
|
|
693
734
|
<label class="toggle" title="把任务分支自动合并回基线分支(需配置基线分支;合并失败不 resolve 不转派,留人工)" data-i18n-title="把任务分支自动合并回基线分支(需配置基线分支;合并失败不 resolve 不转派,留人工)"><input id="zt-automerge" type="checkbox"><span data-i18n="自动合并代码">自动合并代码</span></label>
|
|
694
735
|
<label class="toggle" title="按下面的间隔定时扫描;关掉后仍可手动「立即扫描」" data-i18n-title="按下面的间隔定时扫描;关掉后仍可手动「立即扫描」"><input id="zt-poll" type="checkbox"><span data-i18n="定时扫描">定时扫描</span></label>
|
|
695
|
-
<label class="zt-interval-field"><span data-i18n="
|
|
736
|
+
<label class="zt-interval-field" for="zt-interval" title="定时扫描的间隔,最小 5 分钟" data-i18n-title="定时扫描的间隔,最小 5 分钟"><span class="zt-iv-label" data-i18n="扫描间隔">扫描间隔</span><span class="zt-iv-box"><input id="zt-interval" type="number" min="5" max="10080" step="5"><span class="zt-iv-unit" data-i18n="分钟">分钟</span></span></label>
|
|
696
737
|
</div>
|
|
697
738
|
<div class="ops"><button id="btn-zentao-save" class="primary small"><span data-i18n="保存配置">保存配置</span></button></div>
|
|
698
739
|
<h3 data-i18n="产品档案" class="sec-title">产品档案</h3>
|
|
@@ -902,6 +943,10 @@
|
|
|
902
943
|
<label class="toggle" style="margin-top:6px"><input id="set-workdir-migrate" type="checkbox"> <span data-i18n="保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)">保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)</span></label>
|
|
903
944
|
<p class="hint" id="set-workdir-hint"></p>
|
|
904
945
|
</div>
|
|
946
|
+
<div class="field"><label data-i18n="打开/运行前直写 claude 配置">打开/运行前直写 claude 配置</label>
|
|
947
|
+
<label class="toggle" style="margin-top:6px"><input id="set-claude-sync" type="checkbox"> <span data-i18n="把绑定供应商写进 ~/.claude/settings.json(一键打开与每次运行前)">把绑定供应商写进 ~/.claude/settings.json(一键打开与每次运行前)</span></label>
|
|
948
|
+
<p data-i18n="开启后 CodeBee 会覆盖 cc-switch 等工具对交互 claude 的手选配置。关闭后交互 claude 配置归你手动管理;编排步骤改用一次性注入,模型路由不受影响。" class="hint">开启后 CodeBee 会覆盖 cc-switch 等工具对交互 claude 的手选配置。关闭后交互 claude 配置归你手动管理;编排步骤改用一次性注入,模型路由不受影响。</p>
|
|
949
|
+
</div>
|
|
905
950
|
<div id="set-v2-card" class="field"></div>
|
|
906
951
|
<div id="settings-msg" class="msg"></div>
|
|
907
952
|
</div>
|