codebee 0.1.21 → 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 CHANGED
@@ -1,171 +1,171 @@
1
- # 更新日志
2
-
3
- CodeBee 的用户可感知变更记录。发布新版时:最上面加一节,并同步 README 里的
4
- `<!-- relnotes:start -->…<!-- relnotes:end -->` 段(那段会被 `npm view` 的
5
- README 元数据带回,供老版本在「发现新版本」时展示新版更新内容)。
6
-
7
- ## 未发布
8
-
9
- ## v0.1.21(2026-09-21)
10
-
11
- - 任务默认直接启动,不再进入容量等待队列;达到并发保护上限立即失败并明确提示稍后重试,历史 queued 记录启动时自动接管或收口。
12
- - 修复取消竞态:编排、管理、自升级、禅道修复在取消后不会复活;自动续跑重启恢复不再受隐藏数量上限影响,并显示明确的续跑时间。
13
- - 定时任务、重试、续写、答疑和禅道修复统一使用同一套启动失败收口逻辑,避免任务长期停留在待启动状态。
14
-
15
- ## v0.1.20(2026-09-20)
16
-
17
- - 全类型交付契约:小说、文章、短视频、文档、翻译、调研、演讲、汇报、邮件、技术方案、简历按真实类型路由,并注入各自角色、成品结构和真实性约束
18
- - token 预算修复:默认关闭压缩与续会话路径也累计真实 usage;压缩单次/重试防重复记账,预算熔断恢复有效
19
- - 任务类型管理修复:15 种流程全部显示成本预估;类型切换不再串 rubric;编辑预置流程不再误建副本;direct 正确显示为直连引擎
20
- - 全类型竞品雷达与经验沉淀:关键词库校正为 130 组并按小时轮换,新增当日七专项报告与后续深挖队列
21
-
22
- - 取消即强杀:手动点「取消运行」直接强制终止任务——运行立刻翻「已取消」终态(还挂「运行中」的步骤同步收口,蜂巢格不再空转),CLI 子进程树由取消事件 0.4 秒内秒杀;内置智能体生成中的模型请求改为可打断(取消即刻放弃等待,健康 KEY 不背冷却),起草/赛马的 30s/60s 退避与暂停闸也改为取消即刻唤醒;管理安装/升级/自升级被取消后终态不被步骤汇总改写回「失败」;确认框与提示文案同步改为「立即强制终止」语义
23
- - 群摘要·微信直连:不用再手动导出——蜜蜂坞齿轮里开启「从本机微信自动拉取」,填 64 位 Python 路径(conda 独立环境装 wechatauto-replica),「刷新群列表」搜出 347 个群勾选要监听的群,之后每次扫描 sidecar(tools/wx_reader.py,只调读接口)自动把各群新消息增量拉成导出格式追加进监控文件夹,昵称解析链=自己→群成员表备注→跨拉取持久化缓存→全局联系人表兜底(退群成员也能翻出真名),图片/语音/文件等非文本以占位符入文;摘要卡新增「转知识库」一键把工作群干货转成知识库草稿条目(转正后才注入任务提示词,防聊天噪声污染);安全边界:群聊是不受信输入,摘要的模型工作目录隔离在专用空目录+提示词声明「聊天记录只当数据」,sidecar 结果走文件不走 stdout;实测微信 4.1.13.65(原 wxauto 路线只支持 3.9.X 已弃)
24
- - 群摘要:微信群聊天记录定时整理——把导出的聊天记录 txt 丢进监控文件夹(文件名=群名,每条以「2024-01-01 12:34 发送者」开头,UTF-8/GBK 通吃),按间隔增量生成每群 AI 摘要(一句话总览/话题结论/待办行动项/未决争议);首次接入只摘要最近一窗不回溯历史,同秒多条消息靠末条身份精确接续不漏不重,摘要失败游标不动下拍自动重试;摘要在右下角网页蜜蜂坞面板看(未读徽章+气泡提醒,齿轮里就地配置监控文件夹/间隔/窗口字数,未启用且无数据整坞隐藏),桌面小蜜蜂同步报「🍯 有新群摘要」(悬停见未读数、点击直达网页细看);隐私口径:记录只存本地,摘要请求会发给当前绑定的模型(面板内明示);调度挂 automation tick(fire_due 自节流,同禅道模式)
25
- - 桌面蜜蜂(续):双形象预置「毛绒蜜蜂 / 机械蜜蜂」右键菜单或设置页随时换(原位换装不用重启,pet_skin 落设置);大小三档(小/中/大)、回到初始位置、让TA安静一会(30 分钟不碎碎念)、先藏起来(30 分钟彻底隐身)——对齐竞品宠物设置面板;悬停清单只列进行中/排队并截断长标题(历史失败项曾刷成一堵墙,失败由警示气泡点名);动画加料:工作时高频振翅悬浮、睡觉呼吸沉浮+每 18 秒伸个懒腰、庆祝变成跳跳摇摆舞、冒气泡蹦一下、待机偶尔冒一句蜂言蜂语;拖动换 Tk 内置 scan_dragto(C 级跟手,原来逐事件 geometry 卡成 PPT)且拖动中冻结姿态;全机唯一蜜蜂——单实例锁从数据目录改到系统临时目录,多服务实例/开发仓+正式版并存也只养一只(多只蜜蜂真机踩坑)
26
- - 桌面蜜蜂:CodeBee 桌宠(参考 Codex Pets 产品形态)——tkinter 零依赖自绘小蜜蜂常驻桌面右下角,实时反映蜂群状态:空闲打盹(Zzz)、任务运行振翅悬停(徽章显示数量+步骤进度条)、全部完工翻滚庆祝(气泡「N 个任务完工!」)、失败/取消警示抖动(气泡点名问题任务);鼠标悬停弹出「蜂群动态」任务清单(进行中/排队/失败实时刷新,含当前步骤与进度);左键打开 CodeBee、右键菜单(显示模式/语言/关闭)、按住拖动且位置记忆;跑在独立小进程(pick_dialog 同款进程隔离),服务关闭约 1 分钟内自离不留孤儿;设置页「皮肤」子页新增开关与「常驻 / 仅任务运行时」显示模式(默认开、常驻);设置是唯一真源——关闭后蜜蜂下个轮询周期自离、看护线程不复活;单实例心跳锁防双开
27
-
28
- ## v0.1.19(2026-09-20)
29
-
30
- - 知识库零负担化:条目默认直接转正参与注入(提炼提示词自带质量约束兜底),历史草稿启动时一次性转正
31
- - 发布管理器自愈:启动收尸把等扫码/忙状态的死线程改判 error;旧版冤判「等待登录超时」的记录后台复核,登录态还在的直接翻回已连接
32
- - 禅道地址自适应:REST 根路径 404 时自动探测 /zentao 子路径部署并缓存,另提供产品/账号清单接口供前端下拉
33
- - 新增竞品调研流程:抓取七猫+番茄排行榜公开数据,AI 提炼跨平台热门题材/人设/差异化切入点
34
-
35
- ## v0.1.18(2026-09-20)
36
-
37
- - 知识库:运行产出自动整理成可复用知识——编排者从产出材料(调研报告/文档)提炼知识条目(草稿态),人工「转正」后按任务类型+相关性自动注入同类任务的规划与评审提示词;与经验库分工(教训记「别这么做」,知识记「已知是这样」);设置页独立「知识库」子页,搜索/状态/标签过滤+手动新建(即个人知识管理库);事实带账龄,as_of 超 90 天注入时自动标注「可能过期」
38
- - 封面生成:智谱 CogView 接线(CODEBEE_IMAGE_WATERMARK=1 才保留供应商水印);封面落运行目录,专用通道内嵌缩略图
39
- - 七猫发布纠偏:目标读者/分类旧数据不自洽时按官方目录反查,不再死在流程中段
40
- - 队列补队治理:CLI 安装/升级等管理操作也纳入启动补队与巡检(selfupgrade 除外),排队不再无人接案
41
-
42
- ## v0.1.17(2026-09-20)
43
-
44
- - 任务宪章:工作目录 .codebee/constitution.md 一次定义质量原则(代码规范/文风/测试要求),每次运行自动注入所有智能体——注入体系五层就位(宪章>圣经>模块库>经验>记忆)
45
- - 代码评审证据锚定:每个问题必须带「文件名:行号」+一行关键代码引用,无证据不报(借鉴 pr-af)
46
- - 调研报告证据链:同结论双源交叉验证、来源行内标明、事实与观点分离、结论先行+风险局限结构(借鉴 gpt-researcher)
47
- - 评审维度写前自查:起草提示词亮出评审打分维度,作者提前对齐重点
48
- - 圣经连续性锁:跨章设定原样沿用不问义改写,每章用词一致读者不出戏(借鉴 drama-skills)
49
-
50
- ## v0.1.16(2026-09-19)
51
-
52
- - 帮助中心:首启欢迎引导升级为「左目录 + 右内容」多章帮助中心,八章全就绪——快速上手、模型接入与绑定(多 Key 轮换 / 协议徽章解读 / 报错速查 / 免费档起步)、功能一览、连载创作流程、发布上架、代码任务与版本、自动化与技能市场、常见问题(9 条踩坑 FAQ)。首启仍只自动弹一次落在「快速上手」;手动打开(设置导航/关于页/Ctrl+K/**F1**)徽章与标题显示「帮助中心」,原三处「使用引导」入口统一更名
53
- - 就地帮助问号:模型接入、CLI 绑定、智能体目录、自动化、插件市场、禅道、用量统计、经验库八个设置页头 + Git 工作台/代码版本隔离/蜂巢工作台/作品信息四处工作台头部共十二处新增小「?」,点击直达帮助中心对应章节;供应商空状态与「还没有装好的 CLI」空状态附「看帮助」链接
54
- - 帮助中心新增「代码任务与版本」章(任务分支隔离 / 版本裁决合并与丢弃 / 蜂巢与步骤阅读指引),「自动化与技能市场」章补禅道 Bug 自动修复小节
55
-
56
- ## v0.1.15(2026-09-19)
57
-
58
- - 禅道集成:定时扫描激活 Bug → 自动建修复任务 → 跑完自动合并 + resolve(fixed) + 报告回写 + 群通知(REST v1,SSRF 守卫;设置页「禅道」子页)
59
- - 扫榜双源聚合:七猫+番茄 Web 版排行榜合并分析,跨平台重合题材单独标记(信号更强)
60
- - 可分享报告页:运行报告导出为自包含单文件 HTML,发给任何人浏览器直接打开
61
- - 出站 HTTPS 加固:统一证书校验上下文,修复 macOS python.org 发行版缺 CA 导致的全部外联失败(校验只增不减)
62
- - 引擎调参卡:设置页可直接调压缩阈值/尾部保留/goal 轮数等引擎参数(schema 驱动,revision CAS 防并发覆盖)
63
- - 发布浏览器 profile 迁至 ~/.codebee(登录态自动迁移),不再占用仓库目录与拖慢扫描
64
- - 连载发布真机校准续:番茄编辑器结构校准、发章导航超时放宽、真实鼠标事件提交(合成点击被平台检测)
65
-
66
- ## v0.1.14(2026-09-19)
67
-
68
- - 新任务类型「扫榜选材」:抓取七猫排行榜公开数据,AI 提炼热门题材 Top3/高频人设套路/差异化切入建议,直出选题洞察报告
69
- - 运行结果群推送:设置群机器人 webhook(钉钉/飞书/企微自动适配),任务跑完自动汇报状态与评分
70
-
71
- ## v0.1.13(2026-09-19)
72
-
73
- - 封面图生成:连载任务建书面板新增「生成封面」——调编排者供应商图像 API(cogview 候选,竖版优先)产出 cover.png 到运行目录,SSRF 边界校验 + curl 子进程落盘(Python 不经手图像字节)
74
- - 需求拷问采访态:目标描述过短时先问 1-3 个澄清问题(选项芯片点选),创建更准
75
- - 代码任务 Best-of-N:单路实现失败后多候选 worktree 隔离赛马择优
76
- - 计划落盘任务档案:.codebee/ 三件套(spec.md 意图 / task_plan.md 计划 / evidence.md 验证证据)
77
- - 步骤卡「实际派发模型」徽章 + 类型菜单成本预估行
78
-
79
- ## v0.1.12(2026-09-19)
80
-
81
- - 代码任务计划落盘:每次运行把编排计划写进工作目录 .codebee/task_plan.md,与任务规格(spec.md)、验证证据(evidence.md)同居「任务档案」,断点续跑/复盘全程可查
82
- - 多子任务防漂移:实现子任务提示词自动带上「第 i/N 项 + 已完成清单」,长任务链不再重做已完成项
83
- - 连载剧情模块库:plot-modules.md(拆文沉淀的桥段/爽点素材)每章自动注入
84
- - 连载赛马败者精华:落选候选稿的优点自动并入首轮修订意见
85
-
86
- ## v0.1.11(2026-09-18)
87
-
88
- - **连载发布闭环(主轨)**:番茄/七猫作家后台 CDP 直操通道(连接扫码/建书/发章/表单探测/截图存证)+ 详情页出版台面板;发布台账幂等(章号去重)+ 三道护栏(每日上限/连续失败暂停/人工确认闸——默认填好表单停,提交权留给用户)
89
- - **定时自动发布(P2.5)**:任务级 task.auto_publish 到点触发批量发布;直发模式需 flows 校准文件解锁;批量发布按章号顺序、失败即停
90
- - 代码任务 Best-of-N:单路失败后 worktree 隔离赛马兜底,验证通过+改动最小者胜(借鉴 orca)
91
- - 需求拷问采访态:goal 模糊时先问 1-3 个澄清问题再开跑(借鉴 grill-me)
92
- - 任务队列双病根根治:job 蒸发看门狗自愈 + 排队回填;同因连撞不再重复退避付费;失败退避等待在运行行/运行详情/执行结果/运行记录处显示「将于 HH:MM 自动续跑」,不再笼统显示排队中
93
- - 运行前配置同步防线:每次真实派发自动把绑定链首落进 CLI 自家配置——绑定换供应商后不再撞上旧 CLI 配置空跑(opencode 钉死旧端点案)
94
- - 评审新增「AI 味」确定性检测:译制腔/套话密度统计随评审下发参考线(借鉴 oh-story,命中才提示、评审官结合上下文判断)
95
- - 任务规格文件化:任何任务在工作目录留 .codebee/spec.md(目标/参数/验证命令),随任务分支版本化、复盘续跑可见
96
- - Git 变更视图豁免 .codebee/ 元数据目录,面板只看任务产出
97
- - 报告区失败/空报告/无报告分态可见提示,不再静默留白
98
- - 新增类型菜单成本预估行、步骤卡「实际派发模型」徽章、建 PR 自定义标题(承接 v0.1.10 未列项)
99
-
100
- ## v0.1.10(2026-09-18)
101
-
102
- - Git 工作台「建 PR」支持自定义标题:提交信息框有内容时自动兼作 PR 标题(一处输入两用)
103
- - Best-of-N 败者精华并入修订:终审从落选候选稿提炼的优点随评审意见一并喂给作者
104
- - 报告与对话的围栏代码块统一渲染;竞品调研知识库(docs/borrow-log/knowledge.md)建立并沉淀 40+ 项目
105
-
106
- ## v0.1.9(2026-09-18)
107
-
108
- - 类型菜单项显示成本预估:每个任务类型一行「≈N tokens · N 次」(近 90 天同类台账中位数,无样本自动隐藏)
109
- - 详情页步骤卡新增「实际派发模型」徽章:换将/链回退时一眼看清每步实际打了哪个模型
110
- - 直连对话新增「建议追问」芯片:助手回答尾部最多 3 条可点建议,点击回填输入框(借鉴 freebuff)
111
- - 新建任务支持 Best-of-N 候选并发(评审类单稿任务):多路不同写法策略并行起草,终审择优并吸收落选稿优点
112
- - 换将超窗预检:切到小上下文模型前先按其容量预压缩,避免第一个请求被拒
113
- - 外部触发 Webhook:POST /api/hooks/run(X-CodeBee-Token 令牌鉴权,未配置仅限本机)
114
- - Git 工作台新增「建 PR」:推送当前分支并调 gh 创建 PR(base 自动识别 main/master)
115
-
116
- ## v0.1.8(2026-09-18)
117
-
118
- - README 全面重写:功能导览 + 9 张实机截图,补齐蜂巢/经验库/插件市场/自动化/对话模式等章节
119
- - 修复:孤儿 CLI 清扫的 PowerShell 查询在部分机器上拖慢启动 60 秒——改为后台线程执行,不再挡服务就绪
120
- - 连载韧性加强:死链步骤自动补位同池活链 CLI;网关限流退避窗口可视化(排队可开详情);启动时补队收尾
121
- - 连载答疑:追话 QA 单步答疑不重跑;评审解析三道网(JSON 内嵌引号/正文提分兜底)
122
- - 目录页管理操作四道防线:假新版本缓存作废复检、同条目去重闸、EBUSY/EPERM 人话提示、aider 迁移 uv tool
123
- - 评审全挂不再误判「未达标」:补位评审 + 判失败;超长提示词落临时文件;打磨重评不覆盖好分
124
- - 新增:欢迎引导向导、手工添加模型、wire 协议探测、详情页布局治理
125
-
126
- ## v0.1.7(2026-09-18)
127
-
128
- - 移除「绑定链·xxx 绑定链失效」红色告警胶囊:从没配置过绑定链的 CLI 不再被误伤(0.1.6 真实装机案例,更新后人人都见红胶囊),回落 CLI 本机默认照跑
129
- - 明确配置过绑定链但链上供应商全部失效时,仍会在该步骤明确报错不静默降级(防静默烧配额的本意保留),只是不再有全局胶囊
130
- - 老版本残留的绑定链告警状态在升级重启后自动清除
131
- - 修复:Windows 上一键升级秒挂(npm EBUSY)——npm 换版本要整体改名包目录,升级命令与就地重启的工作目录却落在包内;现统一钉到包外
132
- - 修复:升级失败后「关于与更新」页永远停在「正在升级…」(升级状态轮询读错返回结构),现在成功/失败都会正常提示
133
-
134
- ## v0.1.6(2026-09-18)
135
-
136
- - 连载韧性:网关限流/欠费时章稿失败先退避重试同作者(保住连载风格一致),重试穷尽才判死整 run;自动续跑改为延迟 5 分钟入队、上限提升到 3 次
137
- - 修复:任务分支从游离 HEAD 检出时「切回原分支」原地空转的假成功;游离基线的合并现在显式拒绝并说明
138
- - kimi 接入:僵尸 kimi 进程自动检测清理;CodeBee 托管配置按 TOML 语义渲染
139
- - 修复:generic 类 CLI 经 npm .cmd 垫片时提示词被 cmd 重解析截烂(改 node 直启)
140
- - 界面:新增蜜蜂图标,蜂巢工作台与皮肤视觉精修
141
-
142
- ## v0.1.5(2026-09-16)
143
-
144
- - 更新提示升级:发现新版本时直接展示「新版本更新内容」,升级后首次打开自动弹一次「本次更新内容」
145
- - 新增 CHANGELOG.md 并随包分发
146
-
147
- ## v0.1.4(2026-09-16)
148
-
149
- - 修复:部分安全软件环境下启动卡在「正在启动任务队列」——worker 线程改为首次有任务时再创建,启动期不再创建任何线程
150
- - 启动任一阶段卡超过 20 秒会自动打印各线程卡点堆栈(就绪后自动关闭),截图即可定位问题
151
-
152
- ## v0.1.3(2026-09-16)
153
-
154
- - 启动过程逐步骤显示进度与耗时,慢硬盘/杀软冷启动不再像卡死
155
- - 服务就绪后明确提示「不要关闭本窗口」
156
-
157
- ## v0.1.2(2026-09-16)
158
-
159
- - 源码仓库地址改为 github.com/Vercel-By-WXP/CodeBee(npm 元数据同步)
160
-
161
- ## v0.1.1(2026-09-16)
162
-
163
- - 品牌 CodeBee 化:任务分支前缀 `codebee/<任务ID>`(老 `tutti/` 分支仍可合并/丢弃),git 提交身份改为 CodeBee
164
- - 数据目录:新装落 `%APPDATA%\CodeBee`(macOS/Linux `~/.codebee`),老 Tutti 目录自动沿用零迁移
165
- - 启动横幅与失败排障指引(多 Python 机器可用 `TUTTI_PYTHON` 切换)
166
- - README 重写快速开始:npm 安装为一等路径
167
-
168
- ## v0.1.0(2026-09-16)
169
-
170
- - npm 首发完成:`npm install -g codebee` 一条命令即用,自带自更新
171
- - 多智能体编排台全家桶:目标拆解/智能路由/执行/验证/跨厂商评审/连载/经验库/插件市场
1
+ # 更新日志
2
+
3
+ CodeBee 的用户可感知变更记录。发布新版时:最上面加一节,并同步 README 里的
4
+ `<!-- relnotes:start -->…<!-- relnotes:end -->` 段(那段会被 `npm view` 的
5
+ README 元数据带回,供老版本在「发现新版本」时展示新版更新内容)。
6
+
7
+ ## 未发布
8
+
9
+ ## v0.1.21(2026-09-21)
10
+
11
+ - 任务默认直接启动,不再进入容量等待队列;达到并发保护上限立即失败并明确提示稍后重试,历史 queued 记录启动时自动接管或收口。
12
+ - 修复取消竞态:编排、管理、自升级、禅道修复在取消后不会复活;自动续跑重启恢复不再受隐藏数量上限影响,并显示明确的续跑时间。
13
+ - 定时任务、重试、续写、答疑和禅道修复统一使用同一套启动失败收口逻辑,避免任务长期停留在待启动状态。
14
+
15
+ ## v0.1.20(2026-09-20)
16
+
17
+ - 全类型交付契约:小说、文章、短视频、文档、翻译、调研、演讲、汇报、邮件、技术方案、简历按真实类型路由,并注入各自角色、成品结构和真实性约束
18
+ - token 预算修复:默认关闭压缩与续会话路径也累计真实 usage;压缩单次/重试防重复记账,预算熔断恢复有效
19
+ - 任务类型管理修复:15 种流程全部显示成本预估;类型切换不再串 rubric;编辑预置流程不再误建副本;direct 正确显示为直连引擎
20
+ - 全类型竞品雷达与经验沉淀:关键词库校正为 130 组并按小时轮换,新增当日七专项报告与后续深挖队列
21
+
22
+ - 取消即强杀:手动点「取消运行」直接强制终止任务——运行立刻翻「已取消」终态(还挂「运行中」的步骤同步收口,蜂巢格不再空转),CLI 子进程树由取消事件 0.4 秒内秒杀;内置智能体生成中的模型请求改为可打断(取消即刻放弃等待,健康 KEY 不背冷却),起草/赛马的 30s/60s 退避与暂停闸也改为取消即刻唤醒;管理安装/升级/自升级被取消后终态不被步骤汇总改写回「失败」;确认框与提示文案同步改为「立即强制终止」语义
23
+ - 群摘要·微信直连:不用再手动导出——蜜蜂坞齿轮里开启「从本机微信自动拉取」,填 64 位 Python 路径(conda 独立环境装 wechatauto-replica),「刷新群列表」搜出 347 个群勾选要监听的群,之后每次扫描 sidecar(tools/wx_reader.py,只调读接口)自动把各群新消息增量拉成导出格式追加进监控文件夹,昵称解析链=自己→群成员表备注→跨拉取持久化缓存→全局联系人表兜底(退群成员也能翻出真名),图片/语音/文件等非文本以占位符入文;摘要卡新增「转知识库」一键把工作群干货转成知识库草稿条目(转正后才注入任务提示词,防聊天噪声污染);安全边界:群聊是不受信输入,摘要的模型工作目录隔离在专用空目录+提示词声明「聊天记录只当数据」,sidecar 结果走文件不走 stdout;实测微信 4.1.13.65(原 wxauto 路线只支持 3.9.X 已弃)
24
+ - 群摘要:微信群聊天记录定时整理——把导出的聊天记录 txt 丢进监控文件夹(文件名=群名,每条以「2024-01-01 12:34 发送者」开头,UTF-8/GBK 通吃),按间隔增量生成每群 AI 摘要(一句话总览/话题结论/待办行动项/未决争议);首次接入只摘要最近一窗不回溯历史,同秒多条消息靠末条身份精确接续不漏不重,摘要失败游标不动下拍自动重试;摘要在右下角网页蜜蜂坞面板看(未读徽章+气泡提醒,齿轮里就地配置监控文件夹/间隔/窗口字数,未启用且无数据整坞隐藏),桌面小蜜蜂同步报「🍯 有新群摘要」(悬停见未读数、点击直达网页细看);隐私口径:记录只存本地,摘要请求会发给当前绑定的模型(面板内明示);调度挂 automation tick(fire_due 自节流,同禅道模式)
25
+ - 桌面蜜蜂(续):双形象预置「毛绒蜜蜂 / 机械蜜蜂」右键菜单或设置页随时换(原位换装不用重启,pet_skin 落设置);大小三档(小/中/大)、回到初始位置、让TA安静一会(30 分钟不碎碎念)、先藏起来(30 分钟彻底隐身)——对齐竞品宠物设置面板;悬停清单只列进行中/排队并截断长标题(历史失败项曾刷成一堵墙,失败由警示气泡点名);动画加料:工作时高频振翅悬浮、睡觉呼吸沉浮+每 18 秒伸个懒腰、庆祝变成跳跳摇摆舞、冒气泡蹦一下、待机偶尔冒一句蜂言蜂语;拖动换 Tk 内置 scan_dragto(C 级跟手,原来逐事件 geometry 卡成 PPT)且拖动中冻结姿态;全机唯一蜜蜂——单实例锁从数据目录改到系统临时目录,多服务实例/开发仓+正式版并存也只养一只(多只蜜蜂真机踩坑)
26
+ - 桌面蜜蜂:CodeBee 桌宠(参考 Codex Pets 产品形态)——tkinter 零依赖自绘小蜜蜂常驻桌面右下角,实时反映蜂群状态:空闲打盹(Zzz)、任务运行振翅悬停(徽章显示数量+步骤进度条)、全部完工翻滚庆祝(气泡「N 个任务完工!」)、失败/取消警示抖动(气泡点名问题任务);鼠标悬停弹出「蜂群动态」任务清单(进行中/排队/失败实时刷新,含当前步骤与进度);左键打开 CodeBee、右键菜单(显示模式/语言/关闭)、按住拖动且位置记忆;跑在独立小进程(pick_dialog 同款进程隔离),服务关闭约 1 分钟内自离不留孤儿;设置页「皮肤」子页新增开关与「常驻 / 仅任务运行时」显示模式(默认开、常驻);设置是唯一真源——关闭后蜜蜂下个轮询周期自离、看护线程不复活;单实例心跳锁防双开
27
+
28
+ ## v0.1.19(2026-09-20)
29
+
30
+ - 知识库零负担化:条目默认直接转正参与注入(提炼提示词自带质量约束兜底),历史草稿启动时一次性转正
31
+ - 发布管理器自愈:启动收尸把等扫码/忙状态的死线程改判 error;旧版冤判「等待登录超时」的记录后台复核,登录态还在的直接翻回已连接
32
+ - 禅道地址自适应:REST 根路径 404 时自动探测 /zentao 子路径部署并缓存,另提供产品/账号清单接口供前端下拉
33
+ - 新增竞品调研流程:抓取七猫+番茄排行榜公开数据,AI 提炼跨平台热门题材/人设/差异化切入点
34
+
35
+ ## v0.1.18(2026-09-20)
36
+
37
+ - 知识库:运行产出自动整理成可复用知识——编排者从产出材料(调研报告/文档)提炼知识条目(草稿态),人工「转正」后按任务类型+相关性自动注入同类任务的规划与评审提示词;与经验库分工(教训记「别这么做」,知识记「已知是这样」);设置页独立「知识库」子页,搜索/状态/标签过滤+手动新建(即个人知识管理库);事实带账龄,as_of 超 90 天注入时自动标注「可能过期」
38
+ - 封面生成:智谱 CogView 接线(CODEBEE_IMAGE_WATERMARK=1 才保留供应商水印);封面落运行目录,专用通道内嵌缩略图
39
+ - 七猫发布纠偏:目标读者/分类旧数据不自洽时按官方目录反查,不再死在流程中段
40
+ - 队列补队治理:CLI 安装/升级等管理操作也纳入启动补队与巡检(selfupgrade 除外),排队不再无人接案
41
+
42
+ ## v0.1.17(2026-09-20)
43
+
44
+ - 任务宪章:工作目录 .codebee/constitution.md 一次定义质量原则(代码规范/文风/测试要求),每次运行自动注入所有智能体——注入体系五层就位(宪章>圣经>模块库>经验>记忆)
45
+ - 代码评审证据锚定:每个问题必须带「文件名:行号」+一行关键代码引用,无证据不报(借鉴 pr-af)
46
+ - 调研报告证据链:同结论双源交叉验证、来源行内标明、事实与观点分离、结论先行+风险局限结构(借鉴 gpt-researcher)
47
+ - 评审维度写前自查:起草提示词亮出评审打分维度,作者提前对齐重点
48
+ - 圣经连续性锁:跨章设定原样沿用不问义改写,每章用词一致读者不出戏(借鉴 drama-skills)
49
+
50
+ ## v0.1.16(2026-09-19)
51
+
52
+ - 帮助中心:首启欢迎引导升级为「左目录 + 右内容」多章帮助中心,八章全就绪——快速上手、模型接入与绑定(多 Key 轮换 / 协议徽章解读 / 报错速查 / 免费档起步)、功能一览、连载创作流程、发布上架、代码任务与版本、自动化与技能市场、常见问题(9 条踩坑 FAQ)。首启仍只自动弹一次落在「快速上手」;手动打开(设置导航/关于页/Ctrl+K/**F1**)徽章与标题显示「帮助中心」,原三处「使用引导」入口统一更名
53
+ - 就地帮助问号:模型接入、CLI 绑定、智能体目录、自动化、插件市场、禅道、用量统计、经验库八个设置页头 + Git 工作台/代码版本隔离/蜂巢工作台/作品信息四处工作台头部共十二处新增小「?」,点击直达帮助中心对应章节;供应商空状态与「还没有装好的 CLI」空状态附「看帮助」链接
54
+ - 帮助中心新增「代码任务与版本」章(任务分支隔离 / 版本裁决合并与丢弃 / 蜂巢与步骤阅读指引),「自动化与技能市场」章补禅道 Bug 自动修复小节
55
+
56
+ ## v0.1.15(2026-09-19)
57
+
58
+ - 禅道集成:定时扫描激活 Bug → 自动建修复任务 → 跑完自动合并 + resolve(fixed) + 报告回写 + 群通知(REST v1,SSRF 守卫;设置页「禅道」子页)
59
+ - 扫榜双源聚合:七猫+番茄 Web 版排行榜合并分析,跨平台重合题材单独标记(信号更强)
60
+ - 可分享报告页:运行报告导出为自包含单文件 HTML,发给任何人浏览器直接打开
61
+ - 出站 HTTPS 加固:统一证书校验上下文,修复 macOS python.org 发行版缺 CA 导致的全部外联失败(校验只增不减)
62
+ - 引擎调参卡:设置页可直接调压缩阈值/尾部保留/goal 轮数等引擎参数(schema 驱动,revision CAS 防并发覆盖)
63
+ - 发布浏览器 profile 迁至 ~/.codebee(登录态自动迁移),不再占用仓库目录与拖慢扫描
64
+ - 连载发布真机校准续:番茄编辑器结构校准、发章导航超时放宽、真实鼠标事件提交(合成点击被平台检测)
65
+
66
+ ## v0.1.14(2026-09-19)
67
+
68
+ - 新任务类型「扫榜选材」:抓取七猫排行榜公开数据,AI 提炼热门题材 Top3/高频人设套路/差异化切入建议,直出选题洞察报告
69
+ - 运行结果群推送:设置群机器人 webhook(钉钉/飞书/企微自动适配),任务跑完自动汇报状态与评分
70
+
71
+ ## v0.1.13(2026-09-19)
72
+
73
+ - 封面图生成:连载任务建书面板新增「生成封面」——调编排者供应商图像 API(cogview 候选,竖版优先)产出 cover.png 到运行目录,SSRF 边界校验 + curl 子进程落盘(Python 不经手图像字节)
74
+ - 需求拷问采访态:目标描述过短时先问 1-3 个澄清问题(选项芯片点选),创建更准
75
+ - 代码任务 Best-of-N:单路实现失败后多候选 worktree 隔离赛马择优
76
+ - 计划落盘任务档案:.codebee/ 三件套(spec.md 意图 / task_plan.md 计划 / evidence.md 验证证据)
77
+ - 步骤卡「实际派发模型」徽章 + 类型菜单成本预估行
78
+
79
+ ## v0.1.12(2026-09-19)
80
+
81
+ - 代码任务计划落盘:每次运行把编排计划写进工作目录 .codebee/task_plan.md,与任务规格(spec.md)、验证证据(evidence.md)同居「任务档案」,断点续跑/复盘全程可查
82
+ - 多子任务防漂移:实现子任务提示词自动带上「第 i/N 项 + 已完成清单」,长任务链不再重做已完成项
83
+ - 连载剧情模块库:plot-modules.md(拆文沉淀的桥段/爽点素材)每章自动注入
84
+ - 连载赛马败者精华:落选候选稿的优点自动并入首轮修订意见
85
+
86
+ ## v0.1.11(2026-09-18)
87
+
88
+ - **连载发布闭环(主轨)**:番茄/七猫作家后台 CDP 直操通道(连接扫码/建书/发章/表单探测/截图存证)+ 详情页出版台面板;发布台账幂等(章号去重)+ 三道护栏(每日上限/连续失败暂停/人工确认闸——默认填好表单停,提交权留给用户)
89
+ - **定时自动发布(P2.5)**:任务级 task.auto_publish 到点触发批量发布;直发模式需 flows 校准文件解锁;批量发布按章号顺序、失败即停
90
+ - 代码任务 Best-of-N:单路失败后 worktree 隔离赛马兜底,验证通过+改动最小者胜(借鉴 orca)
91
+ - 需求拷问采访态:goal 模糊时先问 1-3 个澄清问题再开跑(借鉴 grill-me)
92
+ - 任务队列双病根根治:job 蒸发看门狗自愈 + 排队回填;同因连撞不再重复退避付费;失败退避等待在运行行/运行详情/执行结果/运行记录处显示「将于 HH:MM 自动续跑」,不再笼统显示排队中
93
+ - 运行前配置同步防线:每次真实派发自动把绑定链首落进 CLI 自家配置——绑定换供应商后不再撞上旧 CLI 配置空跑(opencode 钉死旧端点案)
94
+ - 评审新增「AI 味」确定性检测:译制腔/套话密度统计随评审下发参考线(借鉴 oh-story,命中才提示、评审官结合上下文判断)
95
+ - 任务规格文件化:任何任务在工作目录留 .codebee/spec.md(目标/参数/验证命令),随任务分支版本化、复盘续跑可见
96
+ - Git 变更视图豁免 .codebee/ 元数据目录,面板只看任务产出
97
+ - 报告区失败/空报告/无报告分态可见提示,不再静默留白
98
+ - 新增类型菜单成本预估行、步骤卡「实际派发模型」徽章、建 PR 自定义标题(承接 v0.1.10 未列项)
99
+
100
+ ## v0.1.10(2026-09-18)
101
+
102
+ - Git 工作台「建 PR」支持自定义标题:提交信息框有内容时自动兼作 PR 标题(一处输入两用)
103
+ - Best-of-N 败者精华并入修订:终审从落选候选稿提炼的优点随评审意见一并喂给作者
104
+ - 报告与对话的围栏代码块统一渲染;竞品调研知识库(docs/borrow-log/knowledge.md)建立并沉淀 40+ 项目
105
+
106
+ ## v0.1.9(2026-09-18)
107
+
108
+ - 类型菜单项显示成本预估:每个任务类型一行「≈N tokens · N 次」(近 90 天同类台账中位数,无样本自动隐藏)
109
+ - 详情页步骤卡新增「实际派发模型」徽章:换将/链回退时一眼看清每步实际打了哪个模型
110
+ - 直连对话新增「建议追问」芯片:助手回答尾部最多 3 条可点建议,点击回填输入框(借鉴 freebuff)
111
+ - 新建任务支持 Best-of-N 候选并发(评审类单稿任务):多路不同写法策略并行起草,终审择优并吸收落选稿优点
112
+ - 换将超窗预检:切到小上下文模型前先按其容量预压缩,避免第一个请求被拒
113
+ - 外部触发 Webhook:POST /api/hooks/run(X-CodeBee-Token 令牌鉴权,未配置仅限本机)
114
+ - Git 工作台新增「建 PR」:推送当前分支并调 gh 创建 PR(base 自动识别 main/master)
115
+
116
+ ## v0.1.8(2026-09-18)
117
+
118
+ - README 全面重写:功能导览 + 9 张实机截图,补齐蜂巢/经验库/插件市场/自动化/对话模式等章节
119
+ - 修复:孤儿 CLI 清扫的 PowerShell 查询在部分机器上拖慢启动 60 秒——改为后台线程执行,不再挡服务就绪
120
+ - 连载韧性加强:死链步骤自动补位同池活链 CLI;网关限流退避窗口可视化(排队可开详情);启动时补队收尾
121
+ - 连载答疑:追话 QA 单步答疑不重跑;评审解析三道网(JSON 内嵌引号/正文提分兜底)
122
+ - 目录页管理操作四道防线:假新版本缓存作废复检、同条目去重闸、EBUSY/EPERM 人话提示、aider 迁移 uv tool
123
+ - 评审全挂不再误判「未达标」:补位评审 + 判失败;超长提示词落临时文件;打磨重评不覆盖好分
124
+ - 新增:欢迎引导向导、手工添加模型、wire 协议探测、详情页布局治理
125
+
126
+ ## v0.1.7(2026-09-18)
127
+
128
+ - 移除「绑定链·xxx 绑定链失效」红色告警胶囊:从没配置过绑定链的 CLI 不再被误伤(0.1.6 真实装机案例,更新后人人都见红胶囊),回落 CLI 本机默认照跑
129
+ - 明确配置过绑定链但链上供应商全部失效时,仍会在该步骤明确报错不静默降级(防静默烧配额的本意保留),只是不再有全局胶囊
130
+ - 老版本残留的绑定链告警状态在升级重启后自动清除
131
+ - 修复:Windows 上一键升级秒挂(npm EBUSY)——npm 换版本要整体改名包目录,升级命令与就地重启的工作目录却落在包内;现统一钉到包外
132
+ - 修复:升级失败后「关于与更新」页永远停在「正在升级…」(升级状态轮询读错返回结构),现在成功/失败都会正常提示
133
+
134
+ ## v0.1.6(2026-09-18)
135
+
136
+ - 连载韧性:网关限流/欠费时章稿失败先退避重试同作者(保住连载风格一致),重试穷尽才判死整 run;自动续跑改为延迟 5 分钟入队、上限提升到 3 次
137
+ - 修复:任务分支从游离 HEAD 检出时「切回原分支」原地空转的假成功;游离基线的合并现在显式拒绝并说明
138
+ - kimi 接入:僵尸 kimi 进程自动检测清理;CodeBee 托管配置按 TOML 语义渲染
139
+ - 修复:generic 类 CLI 经 npm .cmd 垫片时提示词被 cmd 重解析截烂(改 node 直启)
140
+ - 界面:新增蜜蜂图标,蜂巢工作台与皮肤视觉精修
141
+
142
+ ## v0.1.5(2026-09-16)
143
+
144
+ - 更新提示升级:发现新版本时直接展示「新版本更新内容」,升级后首次打开自动弹一次「本次更新内容」
145
+ - 新增 CHANGELOG.md 并随包分发
146
+
147
+ ## v0.1.4(2026-09-16)
148
+
149
+ - 修复:部分安全软件环境下启动卡在「正在启动任务队列」——worker 线程改为首次有任务时再创建,启动期不再创建任何线程
150
+ - 启动任一阶段卡超过 20 秒会自动打印各线程卡点堆栈(就绪后自动关闭),截图即可定位问题
151
+
152
+ ## v0.1.3(2026-09-16)
153
+
154
+ - 启动过程逐步骤显示进度与耗时,慢硬盘/杀软冷启动不再像卡死
155
+ - 服务就绪后明确提示「不要关闭本窗口」
156
+
157
+ ## v0.1.2(2026-09-16)
158
+
159
+ - 源码仓库地址改为 github.com/Vercel-By-WXP/CodeBee(npm 元数据同步)
160
+
161
+ ## v0.1.1(2026-09-16)
162
+
163
+ - 品牌 CodeBee 化:任务分支前缀 `codebee/<任务ID>`(老 `tutti/` 分支仍可合并/丢弃),git 提交身份改为 CodeBee
164
+ - 数据目录:新装落 `%APPDATA%\CodeBee`(macOS/Linux `~/.codebee`),老 Tutti 目录自动沿用零迁移
165
+ - 启动横幅与失败排障指引(多 Python 机器可用 `TUTTI_PYTHON` 切换)
166
+ - README 重写快速开始:npm 安装为一等路径
167
+
168
+ ## v0.1.0(2026-09-16)
169
+
170
+ - npm 首发完成:`npm install -g codebee` 一条命令即用,自带自更新
171
+ - 多智能体编排台全家桶:目标拆解/智能路由/执行/验证/跨厂商评审/连载/经验库/插件市场
package/README.md CHANGED
@@ -21,13 +21,10 @@ Kimi Code、MiMo Code、Grok Build、Pi、DeepSeek Harness……),提供
21
21
  不会把你的任务内容交给任何第三方。
22
22
 
23
23
  <!-- relnotes:start -->
24
- ### 最新版更新内容(v0.1.21
24
+ ### 最新版更新内容(v0.1.22
25
25
 
26
- - 任务默认直接启动,不进入容量等待队列;满载立即失败并提示稍后重试,自动续跑退避会显示预定时间
27
- - 取消竞态修复:编排、管理、自升级、禅道修复取消后不会复活,重启可恢复全部定时续跑
28
- - 11 类内容任务按真实类型路由,并带各自角色、成品结构和真实性约束
29
- - token 预算恢复有效:默认路径与续会话均累计真实 usage,压缩重试不重复记账
30
- - 15 种流程成本预估全覆盖;修复 rubric 串值、预置流程误建副本和 direct 标签
26
+ - README 功能导览大扩容:新增知识库、自动化、帮助中心、作品信息图文介绍
27
+ - 近期亮点回顾:语音识别词表纠偏、调研报告「结论先行」硬约束、任务默认立即启动
31
28
  <!-- relnotes:end -->
32
29
 
33
30
  ---
@@ -69,6 +66,15 @@ Kimi Code、MiMo Code、Grok Build、Pi、DeepSeek Harness……),提供
69
66
  <img src="docs/screenshots/market.png" width="400" align="top" alt="插件市场">
70
67
  </div>
71
68
 
69
+ ### 📚 知识库:你的个人知识管理库
70
+
71
+ 与经验库是一对搭档——教训记「别这么做」,知识记「已知是这样」。任务结束由编排者
72
+ 从产出材料(调研报告/文档)自动提炼可复用知识条目,默认直接转正参与注入;也可手动
73
+ 新建。条目按任务类型与相关性自动注入同类任务的规划与评审提示词;事实带账龄,
74
+ as_of 超 90 天注入时自动标注「可能过期」。
75
+
76
+ <img src="docs/screenshots/knowledge.png" width="820" alt="知识库:自动提炼 + 标签过滤 + 手动新建">
77
+
72
78
  ### 🛠 智能体管理台:检测 / 安装 / 升级 / 一键绑模型
73
79
 
74
80
  自动检测本机全部 CLI(含版本号),安装失败时 AI 读日志自动诊断给修正命令;「默认模型」
@@ -92,6 +98,25 @@ OpenCode / Continue / Cursor / Trae 十种工具的配置,一次带入全部
92
98
 
93
99
  <img src="docs/screenshots/usage.png" width="820" alt="用量统计">
94
100
 
101
+ ### ⏱ 自动化:定时任务无人值守
102
+
103
+ 按计划自动运行任务(每天 / 每周 / 间隔 / 一次性),复用真实运行链到点开跑;
104
+ 错过的临时任务标记跳过不补跑,连载类错过自动断点续跑。
105
+
106
+ <img src="docs/screenshots/automation.png" width="820" alt="自动化:定时任务列表与下次运行时间">
107
+
108
+ ### 📖 帮助中心与作品信息
109
+
110
+ **F1** 随时呼出多章帮助中心(快速上手 / 模型接入与绑定 / 功能一览 / 连载创作流程 /
111
+ 发布上架 / 代码任务与版本 / 自动化与技能市场 / 常见问题),设置页与工作台头部的
112
+ 「?」直达对应章节。连载任务详情页「作品信息」按发布平台生成建书表单资料
113
+ (番茄 / 七猫),逐字段复制即用;封面生成与发布上架通道打通最后一公里。
114
+
115
+ <div>
116
+ <img src="docs/screenshots/help.png" width="400" align="top" alt="帮助中心">
117
+ <img src="docs/screenshots/bookmeta.png" width="400" align="top" alt="作品信息:按平台生成建书资料">
118
+ </div>
119
+
95
120
  ### 更多内置能力
96
121
 
97
122
  - **15 种任务类型**:直接执行、代码、小说、连载小说、自媒体文章、短视频脚本、
@@ -2,9 +2,9 @@
2
2
  """知识库(Knowledge):运行产出自动整理形成的可复用知识 + 个人知识管理入口。
3
3
 
4
4
  与经验库(skills.py)的分工边界:
5
- - 教训(lessons)记「别这么做」——负面规则,来源=评审暴露的问题(verdict/issues);
6
- - 知识(knowledge)记「已知是这样」——领域事实/平台规则/结论/方法论,
7
- 来源=run 产出材料(调研报告/文档)。两者输入源不同,提炼互不双写。
5
+ - 经验(lessons)记「下次怎么做」——流程规范、实践方法和评审暴露的教训;
6
+ - 知识(knowledge)记「已知是什么」——领域事实、外部规则和可验证结论。
7
+ 运行产出中的实践方法会分流进经验库,事实才进入知识库,避免同一方法双写。
8
8
 
9
9
  质量闸门:条目默认直接转正(approved)参与注入——用户拍板:人工把关太重,
10
10
  提炼提示词里的「只保留有明确复用价值的」约束兜质量。status 字段保留 draft
@@ -243,10 +243,13 @@ def _bump_hits(ids):
243
243
  # ---------------------------------------------------------------- 自动整理
244
244
 
245
245
  KNOWLEDGE_PROMPT = """你是编排系统的知识管理员。下面是一次任务的目标与它的产出材料(调研报告/文档等)。
246
- 请从产出中提炼**可长期复用的知识条目**:领域事实、平台规则、结论、方法论。
247
- 注意:只提炼事实性/结论性内容;「下次要避免什么」这类负面教训由另一个复盘流程负责,你不要写。
246
+ 请从产出中提炼可长期复用的内容,并明确分成两类:
247
+ - fact:回答「是什么」,只含领域事实、外部规则和可验证结论,进入知识库;
248
+ - practice:回答「怎么做」,含流程、操作方法和正向实践,进入经验库;此类必须填写 category。
249
+ 「下次要避免什么」这类负面教训由评审复盘流程负责,不要重复提炼。
248
250
  只输出一个 ```json 代码块,不要输出其他内容。JSON 结构:
249
- {"entries": [{"title": "≤20 字的知识标题", "body": "具体结论(≤200 字,自含上下文,脱离本次任务也能看懂)", "tags": ["1-3 个检索标签"], "as_of": "YYYY-MM-DD(事实采集日)"}]}
251
+ {"entries": [{"kind": "fact 或 practice", "title": "≤20 字的标题", "body": "具体内容(≤200 字,自含上下文,脱离本次任务也能看懂)", "category": "practice 的经验分类", "tags": ["1-3 个检索标签"], "as_of": "YYYY-MM-DD(fact 的事实采集日)"}]}
252
+ category 只能从以下枚举选择:__CATEGORIES__。
250
253
  最多 3 条,只保留有明确复用价值的;产出里没有值得沉淀的就返回空数组。
251
254
 
252
255
  ## 任务类型
@@ -298,7 +301,7 @@ def _pick_material(run):
298
301
 
299
302
 
300
303
  def learn_from_run(run_id):
301
- """运行结束后由编排者从产出材料提炼知识条目(草稿态)。返回写入条数。
304
+ """运行结束后从产出提炼事实与实践并分流入库。返回总写入条数。
302
305
 
303
306
  知识没有便宜的兜底路径:无编排者/无产出/非真实运行(mock)一律静默跳过,
304
307
  宁缺毋滥——教训库的规则兜底搬到这里只会制造垃圾知识。只有正常跑完(done)
@@ -326,6 +329,7 @@ def learn_from_run(run_id):
326
329
  return 0
327
330
  prov, model = orch
328
331
  prompt = (KNOWLEDGE_PROMPT
332
+ .replace("__CATEGORIES__", "、".join(skills.LESSON_CATEGORIES))
329
333
  .replace("__TYPE__", str(task.get("type")))
330
334
  .replace("__GOAL__", (task.get("goal") or "")[:600])
331
335
  .replace("__MATERIAL__", material))
@@ -339,6 +343,14 @@ def learn_from_run(run_id):
339
343
  for x in raw[:3]:
340
344
  if not (isinstance(x, dict) and x.get("title") and x.get("body")):
341
345
  continue
346
+ kind = str(x.get("kind") or "fact").strip().lower()
347
+ if kind == "practice":
348
+ if skills.upsert_lesson(task.get("type") or "*", x["title"],
349
+ x["body"], source=run_id,
350
+ category=x.get("category"),
351
+ dim="%s %s" % (x["title"], x["body"])):
352
+ n += 1
353
+ continue
342
354
  as_of = str(x.get("as_of") or "").strip()
343
355
  if not re.match(r"^\d{4}-\d{2}-\d{2}$", as_of):
344
356
  as_of = _now()[:10]
@@ -19,7 +19,7 @@ import re
19
19
  import threading
20
20
  import time
21
21
 
22
- from . import aiflavor, catalog, history, jobs, knowledge, manager, modelhub, mocks, paihang, planner, registry, router, runner, skills, store, usage
22
+ from . import aiflavor, catalog, history, jobs, knowledge, manager, modelhub, mocks, paihang, planner, registry, router, runner, skills, store, task_compile, usage
23
23
  from . import builtin_agent
24
24
  from . import diagnostics
25
25
  from . import paths as paths_mod
@@ -3280,6 +3280,13 @@ def execute_run(run_id):
3280
3280
  store.update_run(run_id, expected_status="running", status="failed",
3281
3281
  error="找不到任务 %s" % run.get("task_id"), ended_at=_now())
3282
3282
  return
3283
+ # 统一任务编译:旧字段继续供各引擎读取,规格作为运行级诊断与调度输入落盘。
3284
+ task_spec = task_compile.compile_task(task)
3285
+ store.update_run(run_id, task_spec=task_spec,
3286
+ task_spec_summary=task_compile.summary(task_spec),
3287
+ difficulty=task_spec["difficulty"])
3288
+ task = dict(task)
3289
+ task["_compiled_spec"] = task_spec
3283
3290
  # 代码版本检出:任务指定了基线版本时,先检出任务分支 tutti/<task-id> 再跑流水线。
3284
3291
  # 显式意图不容静默降级——仓库缺失/脏工作区/引用不存在一律中止运行并报错,
3285
3292
  # 绝不带着用户未提交改动切分支、也不悄悄退回当前 HEAD。
@@ -3319,6 +3326,11 @@ def execute_run(run_id):
3319
3326
  for _agent in agents:
3320
3327
  if isinstance(_agent, dict):
3321
3328
  _agent["_dispatch_task_type"] = task.get("type") or "direct"
3329
+ store.update_run(run_id, route_plan={
3330
+ "task": task_spec,
3331
+ "implement": router.route_plan(agents, "implement", task_spec, stats),
3332
+ "review": router.route_plan(agents, "review", task_spec, stats),
3333
+ })
3322
3334
  mode = task.get("mode") or ("manual" if task.get("implementer") else "auto")
3323
3335
  store.update_run(run_id, mode=mode)
3324
3336
  # engine 决定流水线:code=实现/验证/评审/修复;review=起草/多维评审/修订/门禁;
@@ -10,7 +10,14 @@ CAPABILITY = {
10
10
  "aider": 70, "openclaw": 60, "generic": 55, "mock": 10,
11
11
  }
12
12
 
13
- MAX_REPAIR_ROUNDS = 2 # 自动修复循环上限
13
+ MAX_REPAIR_ROUNDS = 2 # 自动修复循环上限
14
+
15
+
16
+ def _task_type(ttype):
17
+ """兼容旧调用的字符串与新任务规格对象。"""
18
+ if isinstance(ttype, dict):
19
+ return str(ttype.get("type") or ttype.get("dimension") or "direct")
20
+ return str(ttype or "direct")
14
21
 
15
22
 
16
23
  def _binding_bonus(agent_id, dispatch_mode=False):
@@ -43,11 +50,12 @@ def _history_bonus(stats, agent_id, ttype):
43
50
  return round(18.0 * win_rate + min(6.0, runs) - loss_penalty, 1)
44
51
 
45
52
 
46
- def score(agent, role, ttype, stats=None):
53
+ def score(agent, role, ttype, stats=None):
47
54
  """返回 (总分, 理由字符串)。配额惩罚:catalog 里配了
48
55
  quota_tokens_per_hour 的智能体,本小时用量越接近配额分越低
49
56
  (封顶 -45,足以盖过历史加分),满额后仅在没有其他选择时才会被选中。"""
50
- stats = stats or {}
57
+ stats = stats or {}
58
+ ttype = _task_type(ttype)
51
59
  base = CAPABILITY.get(agent.get("kind"), 60)
52
60
  use_dispatch = bool(agent.get("_dispatch_task_type") or
53
61
  agent.get("dispatch_enabled"))
@@ -83,7 +91,7 @@ def score(agent, role, ttype, stats=None):
83
91
  base, affinity_txt, btxt, htxt, quota_txt, round(total, 1))
84
92
 
85
93
 
86
- def pick(agents, role, ttype, stats=None, exclude=()):
94
+ def pick(agents, role, ttype, stats=None, exclude=()):
87
95
  """按分选出最优智能体。返回 (agent, 理由) 或 (None, "")。"""
88
96
  stats = stats or history.agent_stats()
89
97
  best, best_reason = None, ""
@@ -95,7 +103,33 @@ def pick(agents, role, ttype, stats=None, exclude=()):
95
103
  best, best_reason = (total, a), reason
96
104
  if best is None:
97
105
  return None, ""
98
- return best[1], best_reason
106
+ return best[1], best_reason
107
+
108
+
109
+ def route_plan(agents, role, task_spec, stats=None, exclude=()):
110
+ """生成可审计的候选排序,供运行详情展示和后续 fallback 使用。"""
111
+ if stats is None:
112
+ stats = history.agent_stats()
113
+ real = [a for a in agents or [] if a.get("mode") == "real"]
114
+ pool = real if real else list(agents or [])
115
+ rows = []
116
+ for index, agent in enumerate(pool):
117
+ if agent.get("id") in exclude:
118
+ continue
119
+ candidate = dict(agent)
120
+ if isinstance(task_spec, dict):
121
+ candidate["_dispatch_task_type"] = task_spec.get("type") or "direct"
122
+ candidate["_dispatch_role"] = role
123
+ total, reason = score(candidate, role, task_spec, stats)
124
+ rows.append({"agent_id": agent.get("id") or "",
125
+ "label": agent.get("label") or agent.get("id") or "",
126
+ "kind": agent.get("kind") or "generic",
127
+ "score": round(total, 1), "reason": reason,
128
+ "order": index})
129
+ rows.sort(key=lambda x: (-x["score"], x["order"]))
130
+ return {"role": role, "selected": rows[0]["agent_id"] if rows else "",
131
+ "candidates": rows,
132
+ "fallback": [x["agent_id"] for x in rows[1:]]}
99
133
 
100
134
 
101
135
  def pick_reviewer(agents, impl, ttype, stats=None):