codebee 0.1.50 → 0.1.51
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 +7 -0
- package/README.md +4 -4
- package/app/core/builtin_agent.py +172 -97
- package/app/core/jobs.py +170 -42
- package/app/core/manager.py +24 -7
- package/app/core/market.py +27 -1
- package/app/core/pipeline.py +35 -11
- package/app/core/planner.py +14 -5
- package/app/core/router.py +189 -104
- package/app/core/runner.py +34 -0
- package/app/core/settings.py +4 -3
- package/app/core/skills.py +36 -12
- package/app/core/zentao.py +126 -17
- package/app/main.py +29 -6
- package/app/ui/app.js +13256 -13171
- package/app/ui/i18n.js +56 -4
- package/app/ui/index.html +10 -10
- package/app/ui/style.css +12 -1
- package/package.json +1 -1
package/app/ui/i18n.js
CHANGED
|
@@ -182,6 +182,9 @@
|
|
|
182
182
|
"点击步骤卡片查看 CLI 日志": "Click a step card to view its CLI log",
|
|
183
183
|
"任务完成": "Task completed",
|
|
184
184
|
"任务失败": "Task failed",
|
|
185
|
+
"本轮完成": "Round completed",
|
|
186
|
+
"本轮失败": "Round failed",
|
|
187
|
+
"运行展示": "Run it",
|
|
185
188
|
"轮对话": "turns",
|
|
186
189
|
"产出文件": "Output files",
|
|
187
190
|
"无文件产出": "No output files",
|
|
@@ -920,7 +923,7 @@
|
|
|
920
923
|
"默认保存路径已更新:": "Default save path updated: ",
|
|
921
924
|
"当前生效:": "Currently in effect: ",
|
|
922
925
|
"(内置默认,尚未自定义)": " (built-in default, not customized)",
|
|
923
|
-
"
|
|
926
|
+
"已保存:编排并发上限 ": "Saved: orchestration concurrency limit = ",
|
|
924
927
|
"总 Tokens": "Total tokens",
|
|
925
928
|
"调用次数": "Calls",
|
|
926
929
|
"累计费用": "Total cost",
|
|
@@ -1183,9 +1186,9 @@
|
|
|
1183
1186
|
"先选一个供应商再测试连通": "Pick a provider first",
|
|
1184
1187
|
"当前配置不生效:请检查供应商密钥、启停状态与模型选择。": "Current config is not active: check the API key, enabled state, and model selection.",
|
|
1185
1188
|
"最大并发任务数(多任务同时跑、互不打扰)": "Max concurrent tasks (run in parallel, fully isolated)",
|
|
1186
|
-
"
|
|
1189
|
+
"编排并发上限(本机资源保护)": "Orchestration concurrency limit (local resource guard)",
|
|
1187
1190
|
"1 · 串行": "1 · serial",
|
|
1188
|
-
"
|
|
1191
|
+
"编排类任务按此上限执行,满载自动转入「排队中」并每 15 秒尝试补跑(最长 10 分钟),不判失败。此上限保护的是本机资源(CLI 子进程数),与各 API 厂商的限流无关——多厂商并行不必为厂商额度调大它;direct 对话走独立轻量通道,不占此额度。自动续跑的退避等待不占执行位。": "Orchestration tasks run up to this limit; when full they queue up (shown as \"Queued\") and auto-retry every 15s for up to 10 minutes instead of failing. This guards local resources (CLI subprocesses), not provider rate limits — no need to raise it for multi-provider parallelism. Direct chats use a separate lightweight lane and don't consume this quota. Auto-resume backoff uses no execution slot.",
|
|
1189
1192
|
"正在启动": "Starting",
|
|
1190
1193
|
"默认保存路径(新建任务未指定工作目录时使用;支持 ~)": "Default save path (used when a new task doesn't specify one; ~ supported)",
|
|
1191
1194
|
"保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)": "When saving, migrate existing task directories under the old default path to the new one (skip running tasks; manually specified paths are untouched)",
|
|
@@ -2259,7 +2262,7 @@
|
|
|
2259
2262
|
"「冷却中」是什么意思?": "What does \"Cooling down\" mean?",
|
|
2260
2263
|
"一把 Key 连续失败会被暂停 30 分钟,防止反复撞墙烧钱,到期自动恢复;也可以在密钥旁手动重置。": "A key that keeps failing is paused for 30 minutes so it stops burning money against a wall; it recovers automatically when time is up, or reset it manually next to the key.",
|
|
2261
2264
|
"任务一直显示「排队」?": "Task stuck on \"Queued\"?",
|
|
2262
|
-
"
|
|
2265
|
+
"编排任务满载(达到并发上限)时自动转入「排队中」,每 15 秒尝试补跑,最长等 10 分钟,超时才判失败;排队不占额外资源,取消随时可停。direct 对话走独立轻量通道,不占编排并发额度。自动续跑的退避等待会显示预定恢复时间;服务重启遗留的排队记录由恢复机制立即接管或收口。": "When orchestration tasks hit the concurrency limit they automatically turn to \"Queued\" and retry every 15 seconds for up to 10 minutes before failing; queuing uses no extra resources and cancel works anytime. Direct chats use a separate lightweight lane and don't consume the orchestration quota. Auto-resume backoff shows its scheduled recovery time; queued records left behind by a restart are immediately resumed or closed by recovery.",
|
|
2263
2266
|
"状态里写着「将于 HH:MM 自动续跑」?": "Status says \"Auto-resumes at HH:MM\"?",
|
|
2264
2267
|
"这一步失败了,正在退避等待自动重试,到点会接着跑,不需要手动干预;等不及也可以在详情页手动重试。": "That step failed and is backing off before an automatic retry — it continues on its own at the shown time, no manual action needed; if you can't wait, retry manually from the detail page.",
|
|
2265
2268
|
"生成的文件在哪?": "Where are the generated files?",
|
|
@@ -2321,6 +2324,7 @@
|
|
|
2321
2324
|
"64 位 Python 路径(需装 wechatauto-replica)": "64-bit Python path (with wechatauto-replica installed)",
|
|
2322
2325
|
"例如 C:\\Users\\HP\\anaconda3\\envs\\wxprobe\\python.exe": "e.g. C:\\Users\\HP\\anaconda3\\envs\\wxprobe\\python.exe",
|
|
2323
2326
|
"选择要监听的群({0})": "Pick groups to watch ({0})",
|
|
2327
|
+
"选择要监听的群(0)": "Pick groups to watch (0)",
|
|
2324
2328
|
"搜索群名": "Search group name",
|
|
2325
2329
|
"群列表为空,点「刷新群列表」": "Group list is empty — click \"Refresh group list\"",
|
|
2326
2330
|
"没有匹配的群": "No matching groups",
|
|
@@ -2463,6 +2467,54 @@
|
|
|
2463
2467
|
"本月还没有调用": "No runs this month yet",
|
|
2464
2468
|
" tokens · ": " tokens · ",
|
|
2465
2469
|
"正在运行或排队 ": "Running or queued: ",
|
|
2470
|
+
|
|
2471
|
+
// —— 2026-09-22 i18n 补漏:字典缺翻译 + 直连对话活动标签 + 标点 ——
|
|
2472
|
+
" tokens": " tokens",
|
|
2473
|
+
"tokens": "tokens",
|
|
2474
|
+
" · ": " · ",
|
|
2475
|
+
"{0} · {1} · {2}": "{0} · {1} · {2}",
|
|
2476
|
+
" · 失败 ": " · failed ",
|
|
2477
|
+
"wechatauto-replica 安装完成": "wechatauto-replica installed",
|
|
2478
|
+
"上期 ": "Prev period ",
|
|
2479
|
+
"任务开始": "Task starts",
|
|
2480
|
+
"例:20": "e.g. 20",
|
|
2481
|
+
"保存全部钩子": "Save all hooks",
|
|
2482
|
+
"保存钩子": "Save hook",
|
|
2483
|
+
"内置": "Built-in",
|
|
2484
|
+
"刷新分支列表": "Refresh branch list",
|
|
2485
|
+
"加一条钩子": "Add a hook",
|
|
2486
|
+
"命令:python D:\\proj\\hook.py(stdin 收 JSON,stdout 回 {\"inject\":\"文本\"})": "Command: python D:\\proj\\hook.py (reads JSON event from stdin, writes {\"inject\": \"text\"} to stdout)",
|
|
2487
|
+
"在任务生命周期的关键点执行本机命令:命令从标准输入收到 JSON(事件与任务上下文),标准输出回 {\"inject\": \"文本\"} 即把文本注入提示词(run_end 的输出被忽略,适合回写知识库)。命令按空格分词执行,不支持管道;失败或超时自动跳过,绝不挡主流程。": "Run a local command at key points in the task lifecycle: it receives JSON on stdin (event and task context); anything it prints to stdout as {\"inject\": \"text\"} is injected into the prompt (run_end output is ignored — handy for writing back to the knowledge base). The command is split on spaces, no pipes; failures and timeouts are skipped and never block the main flow.",
|
|
2488
|
+
"导出 txt 丢进监控文件夹,或开启微信直连由蜜蜂自动拉取;按间隔增量生成每群摘要。记录只存本地;摘要请求会发给当前绑定的模型,桌面小蜜蜂会提醒新摘要。": "Export a txt into the watch folder, or enable the WeChat direct connection and let the bee pull it automatically; each group's digest is generated incrementally at every interval. Records stay local; digest requests go to the currently bound model, and the desktop bee notifies you when a new digest is ready.",
|
|
2489
|
+
"推荐": "Recommended",
|
|
2490
|
+
"摘要列表": "Digest list",
|
|
2491
|
+
"操作失败": "Operation failed",
|
|
2492
|
+
"新建任务": "New task",
|
|
2493
|
+
"新建钩子": "New hook",
|
|
2494
|
+
"正在删除任务…": "Deleting task…",
|
|
2495
|
+
"测试成功后自动保存连接并拉取产品列表": "On a successful test, saves the connection and fetches the product list",
|
|
2496
|
+
"消息送达": "Message delivered",
|
|
2497
|
+
"澄清响应较慢,已直接创建任务…": "Clarify is slow — task created directly…",
|
|
2498
|
+
"管理模型…": "Manage models…",
|
|
2499
|
+
"自动:按任务类型与风险动态决定步骤": "Auto: adapt steps to task type and risk",
|
|
2500
|
+
"设置 → 用量统计:每次调用的模型、token 与费用按多个维度聚合展示,历史运行会在启动时自动回填——每个任务花了多少,一目了然。": "Settings → Usage: every call's model, tokens and cost are aggregated across dimensions, and past runs are backfilled at startup — you can see what each task cost at a glance.",
|
|
2501
|
+
"超时(秒)": "Timeout (s)",
|
|
2502
|
+
"运行中…": "Running…",
|
|
2503
|
+
"运行结束": "Run finished",
|
|
2504
|
+
"还没有钩子——点「新建钩子」在任务开始 / 消息送达 / 运行结束时挂你自己的脚本。": "No hooks yet — click \"New hook\" to run your own script on task start / message delivered / run end.",
|
|
2505
|
+
"连接成功,已保存;正在拉取产品清单…": "Connected and saved; fetching products…",
|
|
2506
|
+
"钩子": "Hooks",
|
|
2507
|
+
"钩子名称": "Hook name",
|
|
2508
|
+
"钩子已保存": "Hook saved",
|
|
2509
|
+
"请求工具": "Requesting tools",
|
|
2510
|
+
",": ", ",
|
|
2511
|
+
"。": ". ",
|
|
2512
|
+
"《": "“",
|
|
2513
|
+
"》": "”",
|
|
2514
|
+
"【": "[",
|
|
2515
|
+
"】": "]",
|
|
2516
|
+
"(已发 ": " (sent ",
|
|
2517
|
+
"未命名": "Untitled",
|
|
2466
2518
|
};
|
|
2467
2519
|
|
|
2468
2520
|
// ---------- 工具 ----------
|
package/app/ui/index.html
CHANGED
|
@@ -379,7 +379,7 @@
|
|
|
379
379
|
<option data-i18n="专家:完整规划、多评审、失败修复与换将" value="expert">专家:完整规划、多评审、失败修复与换将</option>
|
|
380
380
|
<option data-i18n="手动:自行指定实现者与评审组" value="manual">手动:自行指定实现者与评审组</option>
|
|
381
381
|
</select>
|
|
382
|
-
<span class="cmp-sel-face" id="f-mode-face">自动</span>
|
|
382
|
+
<span class="cmp-sel-face" id="f-mode-face" data-i18n="自动">自动</span>
|
|
383
383
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
384
384
|
</span>
|
|
385
385
|
<span class="cmp-sel" data-i18n-title="思考程度" title="思考程度">
|
|
@@ -389,13 +389,13 @@
|
|
|
389
389
|
<option data-i18n="快速:少推理、优先响应" value="low">快速:少推理、优先响应</option>
|
|
390
390
|
<option data-i18n="深度:更多推理与检查" value="high">深度:更多推理与检查</option>
|
|
391
391
|
</select>
|
|
392
|
-
<span class="cmp-sel-face" id="f-thinking-face">标准</span>
|
|
392
|
+
<span class="cmp-sel-face" id="f-thinking-face" data-i18n="标准">标准</span>
|
|
393
393
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
394
394
|
</span>
|
|
395
395
|
<!-- 厂商/模型 pill(仅「直接执行」类型显示):点开厂商→模型两级
|
|
396
396
|
钻取菜单,选定写回隐藏 select 真源 -->
|
|
397
397
|
<span class="cmp-sel hidden" id="f-direct-wrap" data-i18n-title="对话模型(可选)" title="对话模型(可选)">
|
|
398
|
-
<button type="button" class="cmp-sel-face cmp-sel-btn" id="f-direct-btn" onclick="toggleModelMenu()" aria-haspopup="menu" aria-controls="cmp-model-menu">自动推荐</button>
|
|
398
|
+
<button type="button" class="cmp-sel-face cmp-sel-btn" id="f-direct-btn" onclick="toggleModelMenu()" aria-haspopup="menu" aria-controls="cmp-model-menu" data-i18n="自动推荐">自动推荐</button>
|
|
399
399
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
400
400
|
<div id="cmp-model-menu" class="type-menu hidden" role="menu" aria-label="对话模型" data-i18n-aria="对话模型"></div>
|
|
401
401
|
</span>
|
|
@@ -578,7 +578,7 @@
|
|
|
578
578
|
<option data-i18n="专家:完整规划、多评审、失败修复与换将" value="expert">专家:完整规划、多评审、失败修复与换将</option>
|
|
579
579
|
<option data-i18n="手动:自行指定实现者与评审组" value="manual">手动:自行指定实现者与评审组</option>
|
|
580
580
|
</select>
|
|
581
|
-
<span class="cmp-sel-face" id="rd-mode-face">自动</span>
|
|
581
|
+
<span class="cmp-sel-face" id="rd-mode-face" data-i18n="自动">自动</span>
|
|
582
582
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
583
583
|
</span>
|
|
584
584
|
<span class="cmp-sel" data-i18n-title="思考程度" title="思考程度">
|
|
@@ -588,11 +588,11 @@
|
|
|
588
588
|
<option data-i18n="快速:少推理、优先响应" value="low">快速:少推理、优先响应</option>
|
|
589
589
|
<option data-i18n="深度:更多推理与检查" value="high">深度:更多推理与检查</option>
|
|
590
590
|
</select>
|
|
591
|
-
<span class="cmp-sel-face" id="rd-thinking-face">标准</span>
|
|
591
|
+
<span class="cmp-sel-face" id="rd-thinking-face" data-i18n="标准">标准</span>
|
|
592
592
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
593
593
|
</span>
|
|
594
594
|
<span class="cmp-sel" id="rd-model-wrap" data-i18n-title="对话模型" title="对话模型">
|
|
595
|
-
<button type="button" class="cmp-sel-face cmp-sel-btn" id="rd-model-btn" onclick="toggleRdModelMenu()" aria-haspopup="menu" aria-controls="rd-model-menu">自动推荐</button>
|
|
595
|
+
<button type="button" class="cmp-sel-face cmp-sel-btn" id="rd-model-btn" onclick="toggleRdModelMenu()" aria-haspopup="menu" aria-controls="rd-model-menu" data-i18n="自动推荐">自动推荐</button>
|
|
596
596
|
<svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
|
|
597
597
|
<div id="rd-model-menu" class="type-menu hidden" role="menu" aria-label="对话模型" data-i18n-aria="对话模型"></div>
|
|
598
598
|
</span>
|
|
@@ -927,12 +927,12 @@
|
|
|
927
927
|
<p data-i18n="「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。" class="hint">「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。</p>
|
|
928
928
|
<div id="orch-config"></div>
|
|
929
929
|
<h3 data-i18n="运行设置" class="sec-title">运行设置</h3>
|
|
930
|
-
<div class="field"><label data-i18n="
|
|
930
|
+
<div class="field"><label data-i18n="编排并发上限(本机资源保护)">编排并发上限(本机资源保护)</label>
|
|
931
931
|
<div class="input-row">
|
|
932
|
-
<input id="set-workers" type="number" min="1" max="
|
|
932
|
+
<input id="set-workers" type="number" min="1" max="24" value="12">
|
|
933
933
|
<button data-i18n="保存" class="ghost small" onclick="saveSettings()">保存</button>
|
|
934
934
|
</div>
|
|
935
|
-
<p data-i18n="
|
|
935
|
+
<p data-i18n="编排类任务按此上限执行,满载自动转入「排队中」并每 15 秒尝试补跑(最长 10 分钟),不判失败。此上限保护的是本机资源(CLI 子进程数),与各 API 厂商的限流无关——多厂商并行不必为厂商额度调大它;direct 对话走独立轻量通道,不占此额度。自动续跑的退避等待不占执行位。" class="hint">编排类任务按此上限执行,满载自动转入「排队中」并每 15 秒尝试补跑(最长 10 分钟),不判失败。此上限保护的是本机资源(CLI 子进程数),与各 API 厂商的限流无关——多厂商并行不必为厂商额度调大它;direct 对话走独立轻量通道,不占此额度。自动续跑的退避等待不占执行位。</p>
|
|
936
936
|
</div>
|
|
937
937
|
<div class="field"><label data-i18n="默认保存路径(新建任务未指定工作目录时使用;支持 ~)">默认保存路径(新建任务未指定工作目录时使用;支持 ~)</label>
|
|
938
938
|
<div class="input-row">
|
|
@@ -1309,7 +1309,7 @@
|
|
|
1309
1309
|
<div class="welcome-card" role="dialog" aria-modal="true" aria-labelledby="welcome-title">
|
|
1310
1310
|
<button class="welcome-x icon-btn" title="关闭" aria-label="关闭" data-i18n-title="关闭" data-i18n-aria="关闭" onclick="welcomeClose()">✕</button>
|
|
1311
1311
|
<div class="help-rail">
|
|
1312
|
-
<span class="welcome-badge" id="welcome-badge">首次启动</span>
|
|
1312
|
+
<span class="welcome-badge" id="welcome-badge" data-i18n="首次启动">首次启动</span>
|
|
1313
1313
|
<div class="welcome-brand">
|
|
1314
1314
|
<svg class="ico welcome-bee" aria-hidden="true"><use href="#i-bee"></use></svg>
|
|
1315
1315
|
<span class="brand-name">CodeBee</span>
|
package/app/ui/style.css
CHANGED
|
@@ -5565,9 +5565,11 @@ button.request-busy > * { opacity: .18; }
|
|
|
5565
5565
|
/* 禅道自动化开关行:四个开关做成并列胶囊(选中态用强调色淡染,一眼看出开了哪些),
|
|
5566
5566
|
扫描间隔靠右成组「标签 + 圆角输入框(内嵌单位)」。窄屏自动换行、间隔独占一行。
|
|
5567
5567
|
(此前 grid 版与 flex 版叠了两层,后者已全量覆盖前者,此处合并成单块) */
|
|
5568
|
+
/* 禅道页小节标题收边距(全局 24px/12px 在这块 12px 高的小标题上下显得空) */
|
|
5569
|
+
#sub-zentao .sec-title { margin: 14px 0 8px; }
|
|
5568
5570
|
.zt-auto-options {
|
|
5569
5571
|
display: flex; flex-wrap: wrap; align-items: center;
|
|
5570
|
-
gap: 10px 12px; grid-template-columns: none; margin:
|
|
5572
|
+
gap: 10px 12px; grid-template-columns: none; margin: 0 0 4px;
|
|
5571
5573
|
}
|
|
5572
5574
|
.zt-auto-options > .toggle {
|
|
5573
5575
|
display: inline-flex; align-items: center; gap: 8px;
|
|
@@ -6065,3 +6067,12 @@ button.request-busy > * { opacity: .18; }
|
|
|
6065
6067
|
#run-list .item .rt { gap: 0; }
|
|
6066
6068
|
}
|
|
6067
6069
|
|
|
6070
|
+
|
|
6071
|
+
/* ---------- 对话结果卡「运行展示」弹窗:file-pop 内嵌运行视图 iframe ----------
|
|
6072
|
+
* 弹窗正文是 overflow:auto 的纵排容器(不同于 .pv-body 的 flex 填满),
|
|
6073
|
+
* 给 iframe 显式高度即可;白底与 .pv-frame 同口径——生成的页面多为浅色,
|
|
6074
|
+
* 深色皮肤下也不该透出暗底把内容染脏。 */
|
|
6075
|
+
#file-pop .fp-frame {
|
|
6076
|
+
display: block; width: 100%; height: min(72vh, 660px);
|
|
6077
|
+
border: none; border-radius: 10px; background: #fff;
|
|
6078
|
+
}
|
package/package.json
CHANGED