codebee 0.1.20 → 0.1.22
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 +171 -165
- package/README.md +36 -9
- package/app/core/automation.py +6 -6
- package/app/core/capability.py +16 -2
- package/app/core/catalog.py +1 -1
- package/app/core/covergen.py +40 -4
- package/app/core/dispatch.py +141 -0
- package/app/core/flows.py +5 -0
- package/app/core/jobs.py +281 -166
- package/app/core/knowledge.py +19 -7
- package/app/core/manager.py +30 -23
- package/app/core/market_remote.py +66 -22
- package/app/core/modelhub.py +145 -11
- package/app/core/pipeline.py +124 -31
- package/app/core/router.py +57 -12
- package/app/core/runner.py +2 -1
- package/app/core/selfupdate.py +24 -14
- package/app/core/settings.py +3 -3
- package/app/core/skills.py +15 -11
- package/app/core/store.py +20 -14
- package/app/core/task_compile.py +83 -0
- package/app/core/zentao.py +26 -6
- package/app/main.py +20 -12
- package/app/pet.py +127 -30
- package/app/ui/app.js +197 -76
- package/app/ui/i18n.js +22 -3
- package/app/ui/index.html +11 -11
- package/app/ui/style.css +32 -0
- package/package.json +1 -1
package/app/ui/i18n.js
CHANGED
|
@@ -428,8 +428,14 @@
|
|
|
428
428
|
"%)": "%)",
|
|
429
429
|
"(暂无数据)": "(No data yet)",
|
|
430
430
|
"智能体管理": "Agents",
|
|
431
|
+
"本机智能体": "Local agents",
|
|
431
432
|
"模型接入": "Models",
|
|
432
433
|
"CLI 绑定": "CLI bindings",
|
|
434
|
+
"模型调度(可选)": "Model routing (optional)",
|
|
435
|
+
"自动推荐(推荐)": "Automatic recommendation (recommended)",
|
|
436
|
+
"确认禁用模型 {0}?链降级将自动跳过它,其余模型不受影响;可在模型调度页重新启用。": "Disable model {0}? Fallback routing will skip it; other models are unaffected. You can re-enable it under Model routing.",
|
|
437
|
+
"确认禁用该厂商?禁用后链降级自动跳过它,恢复后可在模型调度页重新启用。": "Disable this provider? Fallback routing will skip it. You can re-enable it under Model routing.",
|
|
438
|
+
" 个供应商?\n相关显式模型调度会自动解除,此操作不可撤销。": " providers?\nRelated explicit model routing overrides will be removed. This cannot be undone.",
|
|
433
439
|
"编排设置": "Orchestrator",
|
|
434
440
|
"经验库": "Skill library",
|
|
435
441
|
"知识库": "Knowledge base",
|
|
@@ -503,9 +509,13 @@
|
|
|
503
509
|
"一群 AI 智能体自动分工:规划、实现、评审、打磨,直到交付成果。": "A crew of AI agents splits up the work — plan, build, review, polish — until the result is delivered.",
|
|
504
510
|
"添加模型供应商:设置 → 模型接入,填入 API Key": "Add a model provider: Settings → Models, paste your API key",
|
|
505
511
|
"绑定 CLI 智能体:点「一键推荐绑定」自动配好": "Bind CLI agents: one click on Recommended binding configures them",
|
|
512
|
+
"启用本机智能体:运行时默认自动推荐模型": "Enable local agents: runtime model routing is automatic by default",
|
|
506
513
|
"新建任务:选工作目录、写目标,蜂群开工": "Create a task: pick a work folder, describe the goal, and the hive gets going",
|
|
507
514
|
"开始配置模型": "Set up models",
|
|
508
515
|
"绑定 CLI 智能体": "Bind CLI agents",
|
|
516
|
+
"第三步:启用本机智能体": "Step 3: Enable local agents",
|
|
517
|
+
"无需预先绑定模型。CodeBee 默认按任务类型、难度、成本和健康状态自动推荐;需要固定厂商、模型或降级顺序时,再到「设置 → 模型调度(可选)」指定。": "You do not need to bind a model first. CodeBee recommends one from task type, difficulty, cost and health; use Settings → Model routing only when you need to pin a provider, model or fallback order.",
|
|
518
|
+
"还没有已安装且可编排的 CLI——先到「本机智能体」页安装并启用。": "No installed orchestration-ready CLI yet — install and enable one under Local agents.",
|
|
509
519
|
"先跳过,直接体验": "Skip and explore",
|
|
510
520
|
"可随时在「设置 → 关于与更新」重新打开本引导。": "You can reopen this guide anytime in Settings → About & updates.",
|
|
511
521
|
"可随时按 F1,或在「设置 → 关于与更新」重新打开本帮助中心。": "Press F1 anytime, or reopen this help center in Settings → About & updates.",
|
|
@@ -1006,6 +1016,7 @@
|
|
|
1006
1016
|
"最多选 3 条(1 个主模型 + 2 个降级备选)。": "Up to 3 entries (1 primary + 2 fallbacks).",
|
|
1007
1017
|
"有未保存改动": "Unsaved changes",
|
|
1008
1018
|
"一键推荐绑定": "Auto-fill recommendations",
|
|
1019
|
+
"生成推荐指定方案": "Generate an override plan",
|
|
1009
1020
|
"全部保存": "Save all",
|
|
1010
1021
|
"已为 %1 个 CLI 预填推荐模型,确认无误后点各卡片「保存」,或点右上「全部保存」。": "Prefilled recommended models for %1 CLI(s). Review each card and click \"Save\", or \"Save all\" above.",
|
|
1011
1022
|
"已为 %1 个空链 CLI 预填推荐,并修复 %2 条失效链——确认后保存。": "Prefilled %1 empty chain(s) and repaired %2 broken chain(s) — review and save.",
|
|
@@ -1017,6 +1028,11 @@
|
|
|
1017
1028
|
"没有可推荐的:先到「模型接入」页导入与 CLI 协议匹配的供应商。": "Nothing to recommend — import providers matching the CLI protocols on the \"Models\" page first.",
|
|
1018
1029
|
"所有 CLI 都已配置模型链,无需推荐。": "All CLIs already have model chains — no recommendation needed.",
|
|
1019
1030
|
"一键绑定推荐模型": "Auto-bind recommended models",
|
|
1031
|
+
"写入推荐默认模型(可选)": "Write recommended CLI default (optional)",
|
|
1032
|
+
"默认不需要绑定:系统会按任务类型、难度、成本与健康状态自动推荐可用模型;只有需要固定厂商、模型或降级顺序时才在这里绑定。绑定后编排调用会注入该供应商的 API key 与地址;完全未指定时保持自动调度,没有兼容可用供应商才使用 CLI 自身配置。": "Binding is optional by default: the system recommends models from task type, difficulty, cost and health. Bind only to pin a provider, model or fallback order. With no override, routing stays automatic and uses the CLI's own configuration only when no compatible provider is available.",
|
|
1033
|
+
"(自动推荐厂商与模型;没有兼容可用供应商时才使用 CLI 自身配置)": " (automatically recommends a provider and model; uses the CLI's own configuration only when no compatible provider is available)",
|
|
1034
|
+
"这里管理本机 CLI 的安装、版本、启停、冒烟测试和 CLI 自己的默认模型。CodeBee 运行任务时默认自动推荐厂商与模型,无需绑定;只有需要固定厂商、模型或降级顺序时,才到「模型调度(可选)」页指定。安装命令不明的条目可直接编辑": "Manage local CLI installation, versions, enablement, smoke tests and each CLI's own default model here. CodeBee recommends providers and models automatically at runtime; use Model routing only when you need to pin a provider, model or fallback order. For entries without a known install command, edit",
|
|
1035
|
+
"默认无需绑定:CodeBee 会按任务类型、步骤角色、难度、成本、协议兼容性和健康状态动态推荐厂商与模型,并在无可用供应商时回落 CLI 自身配置。只有需要固定厂商、模型或跨厂商降级顺序时才在这里指定;显式指定会覆盖自动推荐,但不改写 CLI 全局配置。": "No binding is required by default. CodeBee dynamically recommends providers and models from task type, step role, difficulty, cost, protocol compatibility and health, then falls back to the CLI's own configuration when needed. Specify an override here only to pin a provider, model or cross-provider fallback order; overrides do not rewrite the CLI's global configuration.",
|
|
1020
1036
|
"没有支持写入默认模型的已安装智能体。": "No installed agents support writing a default model.",
|
|
1021
1037
|
"所有已安装智能体都已配置默认模型,无需绑定。": "All installed agents already have a default model — nothing to bind.",
|
|
1022
1038
|
"已为 %1 个智能体写入推荐模型,%2 个失败。": "Wrote recommended models to %1 agent(s), %2 failed.",
|
|
@@ -1098,8 +1114,10 @@
|
|
|
1098
1114
|
"先选一个供应商再测试连通": "Pick a provider first",
|
|
1099
1115
|
"当前配置不生效:请检查供应商密钥、启停状态与模型选择。": "Current config is not active: check the API key, enabled state, and model selection.",
|
|
1100
1116
|
"最大并发任务数(多任务同时跑、互不打扰)": "Max concurrent tasks (run in parallel, fully isolated)",
|
|
1117
|
+
"并发保护上限(默认立即运行)": "Concurrency safety limit (starts immediately by default)",
|
|
1101
1118
|
"1 · 串行": "1 · serial",
|
|
1102
|
-
"
|
|
1119
|
+
"任务默认立即运行,不进入等待队列;达到上限时会明确提示稍后重试。同一任务仍单飞,自动续跑的退避等待不占执行位。": "Tasks start immediately by default with no waiting queue. At the safety limit, CodeBee clearly asks you to retry later. Each task remains single-flight, and auto-resume backoff uses no execution slot.",
|
|
1120
|
+
"正在启动": "Starting",
|
|
1103
1121
|
"默认保存路径(新建任务未指定工作目录时使用;支持 ~)": "Default save path (used when a new task doesn't specify one; ~ supported)",
|
|
1104
1122
|
"保存时把「旧默认路径下」的现有任务目录迁移到新路径(运行中的跳过;手动指定的目录不受影响)": "When saving, migrate existing task directories under the old default path to the new one (skip running tasks; manually specified paths are untouched)",
|
|
1105
1123
|
"不沿用(全新开始)": "Don't resume (fresh start)",
|
|
@@ -1255,6 +1273,7 @@
|
|
|
1255
1273
|
"安装中…": "Installing…",
|
|
1256
1274
|
"正在下载安装,插件包较大时需要约一分钟…": "Downloading and installing — large plugin packages can take about a minute…",
|
|
1257
1275
|
"请求超时,请重试或检查网络": "Request timed out — try again or check your network",
|
|
1276
|
+
"操作处理中": "Working on it",
|
|
1258
1277
|
"该插件含脚本/钩子/MCP 组件,仅支持纯技能类插件": "Contains scripts/hooks/MCP components — only pure skill plugins are supported",
|
|
1259
1278
|
" 个供应商(google 等协议)仅登记,不支持注入 CLI,未出现在上面的下拉中。": " provider(s) (google etc.) are registry-only, can't inject into CLIs, and are hidden from the dropdown above.",
|
|
1260
1279
|
" 个降级备选)。": " fallback(s)).",
|
|
@@ -2095,7 +2114,7 @@
|
|
|
2095
2114
|
"「冷却中」是什么意思?": "What does \"Cooling down\" mean?",
|
|
2096
2115
|
"一把 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.",
|
|
2097
2116
|
"任务一直显示「排队」?": "Task stuck on \"Queued\"?",
|
|
2098
|
-
"
|
|
2117
|
+
"新任务默认立即运行,不会排队;达到并发保护上限时本次会直接失败并提示稍后重试。只有自动续跑退避会显示预定时间;历史版本遗留的排队记录会由恢复机制立即接管或收口。": "New tasks start immediately and never wait in a queue. At the concurrency safety limit, the attempt fails clearly and asks you to retry later. Only auto-resume backoff shows a scheduled time; legacy queued records are immediately resumed or closed by recovery.",
|
|
2099
2118
|
"状态里写着「将于 HH:MM 自动续跑」?": "Status says \"Auto-resumes at HH:MM\"?",
|
|
2100
2119
|
"这一步失败了,正在退避等待自动重试,到点会接着跑,不需要手动干预;等不及也可以在详情页手动重试。": "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.",
|
|
2101
2120
|
"生成的文件在哪?": "Where are the generated files?",
|
|
@@ -2217,7 +2236,7 @@
|
|
|
2217
2236
|
"工作目录文件": "Workspace files",
|
|
2218
2237
|
"备份不含运行过程日志": "Backup has no run process logs",
|
|
2219
2238
|
"路径重映射": "Path remap",
|
|
2220
|
-
"
|
|
2239
|
+
"有任务正在运行或等待自动续跑,先等它们结束再导入": "Tasks are running or waiting for auto-resume — wait for them to finish before importing",
|
|
2221
2240
|
"替换导入会先清空本机数据目录,再整体落入备份内容(当前数据已自动留了反悔备份)。确定继续?": "Replace-import wipes the local data directory first, then restores the backup wholesale (a regret backup of current data is saved automatically). Continue?",
|
|
2222
2241
|
"确认导入该备份包?同名任务与配置将被覆盖。": "Import this backup? Tasks and settings with the same names will be overwritten.",
|
|
2223
2242
|
"正在导入…": "Importing…",
|
package/app/ui/index.html
CHANGED
|
@@ -181,9 +181,9 @@
|
|
|
181
181
|
<button class="set-item" data-sub="zentao" data-i18n="禅道"><svg class="ico" aria-hidden="true"><use href="#i-search"></use></svg>禅道</button>
|
|
182
182
|
<button class="set-item" data-sub="usage" data-i18n="用量统计"><svg class="ico" aria-hidden="true"><use href="#i-chart"></use></svg>用量统计</button>
|
|
183
183
|
<div data-i18n="配置" class="set-group">配置</div>
|
|
184
|
-
<button class="set-item" data-sub="agents" data-i18n="
|
|
184
|
+
<button class="set-item" data-sub="agents" data-i18n="本机智能体"><svg class="ico" aria-hidden="true"><use href="#i-cpu"></use></svg>本机智能体</button>
|
|
185
185
|
<button class="set-item" data-sub="models" data-i18n="模型接入"><svg class="ico" aria-hidden="true"><use href="#i-layers"></use></svg>模型接入</button>
|
|
186
|
-
<button class="set-item" data-sub="bindings" data-i18n="
|
|
186
|
+
<button class="set-item" data-sub="bindings" data-i18n="模型调度(可选)"><svg class="ico" aria-hidden="true"><use href="#i-link"></use></svg>模型调度(可选)</button>
|
|
187
187
|
<button class="set-item" data-sub="skills" data-i18n="经验库"><svg class="ico" aria-hidden="true"><use href="#i-book"></use></svg>经验库</button>
|
|
188
188
|
<button class="set-item" data-sub="knowledge" data-i18n="知识库"><svg class="ico" aria-hidden="true"><use href="#i-sigma"></use></svg>知识库</button>
|
|
189
189
|
<button class="set-item" data-sub="market" data-i18n="插件市场"><svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>插件市场</button>
|
|
@@ -616,12 +616,12 @@
|
|
|
616
616
|
<h2 data-i18n="智能体目录">智能体目录</h2>
|
|
617
617
|
<button class="hhelp" data-help-topic="models" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
618
618
|
<div class="actions">
|
|
619
|
-
<button data-i18n="
|
|
619
|
+
<button data-i18n="写入推荐默认模型(可选)" id="btn-catalog-autobind" class="ghost">写入推荐默认模型(可选)</button>
|
|
620
620
|
<button data-i18n="重新加载 catalog" id="btn-reload-catalog" class="ghost">重新加载 catalog</button>
|
|
621
621
|
<button data-i18n="恢复默认 catalog" id="btn-reset-catalog" class="ghost">恢复默认 catalog</button>
|
|
622
622
|
</div>
|
|
623
623
|
</div>
|
|
624
|
-
<p class="hint"><span data-i18n="
|
|
624
|
+
<p class="hint"><span data-i18n="这里管理本机 CLI 的安装、版本、启停、冒烟测试和 CLI 自己的默认模型。CodeBee 运行任务时默认自动推荐厂商与模型,无需绑定;只有需要固定厂商、模型或降级顺序时,才到「模型调度(可选)」页指定。安装命令不明的条目可直接编辑">这里管理本机 CLI 的安装、版本、启停、冒烟测试和 CLI 自己的默认模型。CodeBee 运行任务时默认自动推荐厂商与模型,无需绑定;只有需要固定厂商、模型或降级顺序时,才到「模型调度(可选)」页指定。安装命令不明的条目可直接编辑</span> <code>data/catalog.json</code> <span data-i18n="后点重新加载。">后点重新加载。</span></p>
|
|
625
625
|
<h3 data-i18n="已安装" class="sec-title">已安装</h3>
|
|
626
626
|
<div id="ag-installed" class="cards"></div>
|
|
627
627
|
<h3 data-i18n="可安装" class="sec-title">可安装</h3>
|
|
@@ -651,15 +651,15 @@
|
|
|
651
651
|
</div>
|
|
652
652
|
</div>
|
|
653
653
|
|
|
654
|
-
<!--
|
|
654
|
+
<!-- 模型调度(可选) -->
|
|
655
655
|
<div id="sub-bindings" class="subpage hidden">
|
|
656
656
|
<div class="panel wide">
|
|
657
|
-
<div class="panel-head"><h2 data-i18n="
|
|
657
|
+
<div class="panel-head"><h2 data-i18n="模型调度(可选)">模型调度(可选)</h2>
|
|
658
658
|
<button class="hhelp" data-help-topic="models" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
|
|
659
|
-
<button id="btn-autobind" class="ghost small" onclick="autoBindAll()" data-i18n="
|
|
659
|
+
<button id="btn-autobind" class="ghost small" onclick="autoBindAll()" data-i18n="生成推荐指定方案">生成推荐指定方案</button>
|
|
660
660
|
<button id="btn-saveall-bind" class="ghost small hidden" onclick="saveAllBindings()" data-i18n="全部保存">全部保存</button>
|
|
661
661
|
</div>
|
|
662
|
-
<p data-i18n="CodeBee
|
|
662
|
+
<p data-i18n="默认无需绑定:CodeBee 会按任务类型、步骤角色、难度、成本、协议兼容性和健康状态动态推荐厂商与模型,并在无可用供应商时回落 CLI 自身配置。只有需要固定厂商、模型或跨厂商降级顺序时才在这里指定;显式指定会覆盖自动推荐,但不改写 CLI 全局配置。" class="hint">默认无需绑定:CodeBee 会按任务类型、步骤角色、难度、成本、协议兼容性和健康状态动态推荐厂商与模型,并在无可用供应商时回落 CLI 自身配置。只有需要固定厂商、模型或跨厂商降级顺序时才在这里指定;显式指定会覆盖自动推荐,但不改写 CLI 全局配置。</p>
|
|
663
663
|
<div id="binding-list" class="cards"></div>
|
|
664
664
|
</div>
|
|
665
665
|
</div>
|
|
@@ -746,12 +746,12 @@
|
|
|
746
746
|
<p data-i18n="「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。" class="hint">「编排者」是 CodeBee 自己的智能体:直连 API 供应商的模型(不占 CLI 会话),统一负责任务规划拆解、难度判定与写作大纲。未启用或调用失败时自动回落为「最强可用 CLI 智能体」规划,流程永不阻塞。</p>
|
|
747
747
|
<div id="orch-config"></div>
|
|
748
748
|
<h3 data-i18n="运行设置" class="sec-title">运行设置</h3>
|
|
749
|
-
<div class="field"><label data-i18n="
|
|
749
|
+
<div class="field"><label data-i18n="并发保护上限(默认立即运行)">并发保护上限(默认立即运行)</label>
|
|
750
750
|
<div class="input-row">
|
|
751
|
-
<input id="set-workers" type="number" min="1" max="12" value="
|
|
751
|
+
<input id="set-workers" type="number" min="1" max="12" value="12">
|
|
752
752
|
<button data-i18n="保存" class="ghost small" onclick="saveSettings()">保存</button>
|
|
753
753
|
</div>
|
|
754
|
-
<p data-i18n="
|
|
754
|
+
<p data-i18n="任务默认立即运行,不进入等待队列;达到上限时会明确提示稍后重试。同一任务仍单飞,自动续跑的退避等待不占执行位。" class="hint">任务默认立即运行,不进入等待队列;达到上限时会明确提示稍后重试。同一任务仍单飞,自动续跑的退避等待不占执行位。</p>
|
|
755
755
|
</div>
|
|
756
756
|
<div class="field"><label data-i18n="默认保存路径(新建任务未指定工作目录时使用;支持 ~)">默认保存路径(新建任务未指定工作目录时使用;支持 ~)</label>
|
|
757
757
|
<div class="input-row">
|
package/app/ui/style.css
CHANGED
|
@@ -5390,3 +5390,35 @@ body.welcome-open { overflow: hidden; }
|
|
|
5390
5390
|
|
|
5391
5391
|
/* 对话页语音输入按钮(借鉴 paseo voice):识别中高亮呼吸 */
|
|
5392
5392
|
#rd-chat-voice.live { color: var(--bad); animation: cb-rise .6s ease infinite alternate; }
|
|
5393
|
+
/* 设置导航标题保持单行,避免较长标题在手机抽屉里增高并把末尾入口推离视口。 */
|
|
5394
|
+
.side-settings .set-item { white-space: nowrap; }
|
|
5395
|
+
|
|
5396
|
+
/* ---------------- 请求即时反馈(统一 api 写操作,追加于文件尾防并行重排) ---------------- */
|
|
5397
|
+
.request-progress {
|
|
5398
|
+
position: fixed; z-index: 320; top: 0; left: 0; width: 34%; height: 2px;
|
|
5399
|
+
background: var(--accent); opacity: 0; pointer-events: none;
|
|
5400
|
+
transform: translateX(-110%);
|
|
5401
|
+
}
|
|
5402
|
+
.request-progress.active {
|
|
5403
|
+
opacity: 1;
|
|
5404
|
+
animation: request-progress-run 1.15s ease-in-out infinite;
|
|
5405
|
+
}
|
|
5406
|
+
@keyframes request-progress-run {
|
|
5407
|
+
0% { transform: translateX(-110%); }
|
|
5408
|
+
70% { transform: translateX(185%); }
|
|
5409
|
+
100% { transform: translateX(300%); }
|
|
5410
|
+
}
|
|
5411
|
+
button.request-busy {
|
|
5412
|
+
position: relative; pointer-events: none; cursor: wait;
|
|
5413
|
+
}
|
|
5414
|
+
button.request-busy::after {
|
|
5415
|
+
content: ""; position: absolute; left: 50%; top: 50%; width: 14px; height: 14px;
|
|
5416
|
+
margin: -8px 0 0 -8px; border: 2px solid currentColor; border-right-color: transparent;
|
|
5417
|
+
border-radius: 50%; animation: request-busy-spin .7s linear infinite;
|
|
5418
|
+
}
|
|
5419
|
+
button.request-busy > * { opacity: .18; }
|
|
5420
|
+
@keyframes request-busy-spin { to { transform: rotate(360deg); } }
|
|
5421
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5422
|
+
.request-progress.active { animation: none; transform: translateX(95%); }
|
|
5423
|
+
button.request-busy::after { animation-duration: 1.4s; }
|
|
5424
|
+
}
|
package/package.json
CHANGED