更新日志
每次版本都写清“改了什么、为什么改、怎么验证”;本页与 /api/changelog
同源,直接读仓库根 CHANGELOG.md,不手抄、不二次编辑。
当前版本
v0.4.5
· 发布于 2026-11-06
· JSON
v0.3.0
2026-10-23
一句话:能力库第一次接上"手"——从只会调 API,到能在真实桌面上点、打、滚。
新增能力:computer.use(电脑操控 / 桌面自动化)
- 进程边界:主应用(Python 3.14)不 import 任何 GUI 依赖;子进程跑
.venvs/computer-use(Python 3.12 + gui-agents 0.3.2)里的scripts/agent_s_runner.py,spec/result 走 JSON 文件,可超时、可杀。 - 适配器:
adapter="agent_s",长任务走后台线程(同 storyboard/aiduanju 模式),返回 status=running + run_id,轮询 /api/v1/capabilities/runs。 - 素材:每步截图落
capability_assets(image/png,meta 带 step/kind)。 - 闸门:默认
enabled=false;缺 key/缺端点/缺 venv 一律 409 并说明缺什么,绝不伪造"点完了";enable_local_env(任意代码执行)默认关闭。 - 配置:新增
computer_use 配置段;凭据只认环境变量,库里只存变量名。优先级 config.yaml > 目录默认值 > 代码默认。 - 模型:默认接 DeepSeek 官方(
deepseek-flash,视觉可用,一张图 ≤384 tokens);规划实测正确,但坐标接地精度不足(偏差数百像素),详见 docs/电脑操控-Agent-S.md 第 7 节。正式点点点前建议换 UI-TARS-1.5-7B 接地,或改用 Windows-MCP 的 UIA 通道。 - 干跑:payload 传
dry_predict: true 只让模型"看图出方案"、绝不落地键鼠,用于接线自检。
新增:设备接入(T1,让任何用户用自己的电脑)
- 服务端:
app/capabilities/devices.py(设备注册/令牌哈希/任务队列/租约/配额)+ app/api/devices.py(/api/v1/devices/*,用户侧 X-API-Key、设备侧 X-Device-Token); - 用户端:
scripts/danao_runner.py(register / run / status),调本地 Agent-S 执行并回传; - 护栏:单设备串行、服务端封顶步数/超时、
enable_local_env 强制 false、每日额度、租约到期自动回队、排队超时 expired; - 文档:
docs/电脑操控-用户端Runner.md(用户安装/下单/排障全流程)。
补齐:能力库 ↔ 设备桥接、托盘、闸门
- 桥接:
computer.use 新增 provider danao.device(adapter="device")并设为默认—— 调用方只需 POST /capabilities/computer.use/invoke,服务端自动挑一台在线设备排队,结果(含每步代码与最终截图)回到 capability_runs + capability_assets;没有在线设备 → 409,不假装跑过。 - 闸门:受限能力由"仅管理端"改为"管理端 或 持
computer:use scope 的 key + confirm",执行仍在用户设备上,不在服务端。 - 托盘:
scripts/danao_tray.py(状态灯、停止当前任务、打开日志、开机自启、退出),danao_runner.py autostart --enable/--disable(写启动文件夹,不碰注册表)。 - 实测:起服务 → 注册设备 → 托盘领单 →
/capabilities/computer.use/invoke → run=3 succeeded(provider danao.device,1 步,截图落为 asset#1)。
新增:UIA 执行器(标准控件走 Windows-MCP)
scripts/uia_runner.py:Snapshot → 过滤可点元素(丢掉 OCR 的 word 碎片)→ DeepSeek 选一个动作 → 按元素坐标执行(Click/Type/Scroll 的 label 参数其实是整数元素 id,传字符串会被 pydantic 拒,所以统一换算成控件树里的坐标走 loc);- 目录新增 provider
danao.device.uia 并设为默认,danao.device(视觉)作为兜底; computer_use.executor / windows_mcp 配置项;Runner 按 payload.executor 选脚本;- 实测:任务「打开记事本」15 秒完成(
open notepad (win+r) → 模型确认窗口标题 → done)。
UIA 策略层打磨 + 端到端打通
- 窗口校准:开场与每步都用 ctypes 直连 Win32 确认目标窗口在前台(绕开会挂 60s 的
App 工具); - 打开验证:
open 后 6 秒内没出现目标窗口 → 明确报"打开失败"回给模型; - 失败预算:连续 3 步编标签/工具报错就收手,不再烧步数假装在干活;
- 输入前先点击目标控件,并给编错的标签提供 3 个相近候选;
- 端到端实测:
POST /capabilities/computer.use/invoke → provider danao.device.uia → 托盘 Runner 领单 → UIA 执行"打开记事本并输入 hello uia" → run succeeded,窗口标题变成*hello uia - Notepad,截图落 asset#3。
新增:小白操作面板 /control
GET /control:单文件页面(无鉴权,key 只存在浏览器 localStorage);GET /api/v1/control/devices / POST /api/v1/control/task / GET /api/v1/control/task/{id} / POST .../stop / GET .../latest:只要求 computer:use 一个 scope,截图直接内联成 data URL(省掉再去素材接口鉴权);?key=xxx 可一次带入并立即从地址栏抹掉,方便直接发链接;- 打开页面自动显示"上次任务",避免小白跑完就找不到结果;
- 实测:面板 -> 设备 -> UIA 执行"打开记事本输入…" ->
succeeded,3 步,截图回显。
面板完善:本机 Runner 一键启停 + 历史任务
GET /api/v1/control/runner:读 runner.state.json 心跳判断"本机 Runner 在不在跑";POST /api/v1/control/runner/{start|stop}:仅回环地址(127.0.0.1)且需 computer:use,远程请求一律 403——启停的是服务器这台机器上的进程,不能给别人用;GET /api/v1/control/history:最近任务列表,点一条可回看步骤与截图;- 页面:设备自动刷新(10s)、
Ctrl+Enter 执行、"再做一次"、跑完自动刷设备/历史/Runner 状态; - 控制台
/console 顶栏加「电脑操控 ↗」入口; - Runner 每次循环写
runner.state.json(pid/时间/设备号,不含 token),退出即删。
顺带
- 目录版本
CATALOG_VERSION → 2026-10-23.4,启动即幂等重灌,新能力自动出现在/api/v1/capabilities 与控制台。 - 文档:
docs/电脑操控-Agent-S.md(架构、配置、调用、限制、排障)。 - 测试:
tests/test_computer_use.py 9 条(目录登记、三道闸门、spec 组装、结果裁剪、台账+素材落库),不启动 GUI、不点鼠标。
v0.2.1
2026-10-21
一句话:把死掉的自进化闭环真正打通——洞见不再只是记忆里的记录,而是能变成技能补强提案、跑完 A/B 复测、并被证据裁决保留还是回滚。
闭环修复(生产实证)
- 目标不关闭 → 计划建不出来(主因):计划终局时同步收口目标(
_close_plan_goal),接管历史遗留的僵尸目标(adopt_existing_goal),并主动扫描升级前的残留(sweep_zombie_goals)——死锁固化在库里,升级代码不会自动治好"过去"。 - 谓词前缀污染 → 目标永不满足:标题是「学习需求:」+「评测缺口:」+ 核心的复合串,只剥一层会让类别词残留并稀释重叠系数;改为逐层剥离(
core_topic)。 - 捕获走全库反查 → 捞到负样本:web_learner 的"该页面只是产品清单,未涉及…" 描述的是没学到东西,不能当洞见写进技能;改为取任务自带的洞见正文 + 负样本判定。
顺带修掉的真问题
_skill_covers 基于命题核心判定,修复类命题(评测/路由缺口、技能失效修复)不被"已被技能覆盖"阻拦——技能存在但失效正是要修它的理由。- 复评退避判据方向写反(
closed >= last_eval 实为"没有新评测")→ 天天重学同一道题。 - 捕获覆盖面:真洞见多来自
failed_check(技能失效修复),原先只认 eval_gap → 学到了也丢弃。 - 固定
LIMIT 的全表拉取会静默丢弃目标(2092 条技能里 800 条窗口外)→ 改为 DB 侧匹配。 failed_check 无退避 → 同一主题 3 分钟内连立 3 次全失败,纯烧钱;改为失败后冷却。- retired 技能的补强提案因 JOIN
status='approved' 永久卡 pending → 标记 orphaned。
指标口径:区分「主动跳过」与「真失败」
- 退避拦下、刹车拦下 → 状态
skipped(没做事,不是失败) - 素材源全挂等尝试过但没产出 → 仍是
failed(真失败) skipped 不会触发失败退避(否则守卫互相锁死)improve_plan 从此有三态:done / skipped / failed。
其它
- 新增
self_improve_sweep_zombie / self_improve_sweep_zombie_limit 配置。 - 32 个新测试覆盖命题核心提取、目标终局、洞见捕获、复评退避、失败冷却、僵尸清扫。
- 5 条经验已登记进 danao 经验库(note-cfa46344 等),召回验证通过。
v0.2.0
2026-10-20
一句话:把“项目里的能力”收敛成可调用的功能总库,把“学到的洞见”接上可复现的验证、漂移监控与回滚,并用一块看板回答“它到底学得怎么样”。
功能总库(Capability Hub)
- 47 个项目来源、59 项能力、156 个提供方统一成一张目录:公开页
/capabilities,管理端「功能总库」可新增/编辑能力与提供方,统一调用生图、生视频、语音、知识、经验。 - 场景路由与失败治理:缺密钥/缺端点的提供方直接剔除,失败按偏好回退;后台异步视频使用独立 DB 连接,启动时清理 running 孤儿。
- 成本与素材:按实测 token/次与官方单价记成本台账;素材库配额清理、异盘备份、可下载备份包(tar + manifest + quick_check + 素材数)。
- 路由规则:经验里的
provider_note 可升级为 route_rule 并生效,支持项目 + 百分比灰度、批量审批、命中审计、误排除复核、CSV 导出与 CI gate。 - 质量闭环:提供方成功率/延迟/成本快照、趋势图(SVG/PNG 导出)、质量回写评分、低成功率周报,台账与质量均可按项目过滤。
- 代码能力库:从项目源码用 AST 抽实现(只读、不执行),生成接口契约与入参,同一能力多份实现按确定性规则打分择优;新增标准实现建议器与实现周报。
- 单元库 wrapper:库内实现可生成 HTTP wrapper(公开入口自动上移、兼容同级 lib/、含
- 目录按路径加载);实体型入参改为 {xxx}_id,未接钩子返回 501 而不猜;生成物走审核流,approve 才落盘。 - 多镜头叙事成片:逐段生视频 + TTS + 拼接;首帧续接、BGM 混音(
-t 设时长上限,避免 apad/amix 无限流写爆磁盘)、SRT 字幕、xfade 转场、尺寸归一化。 - 接入配套:一键接入脚本与 GitHub Actions / GitLab CI 模板。
技能运行时与路由
- 技能卡片:从正文确定性解析 purpose / when_to_use / steps / verification / risk / params,不调 LLM;卡片是投影,技能升版后可重建。
- 路由:name/body 取最大 + 语义混合补召回 + 问句/选择意图加权 + 同版本择优;
skill_route 返回 confidence 与 hint(低置信先查知识库/经验库)。 - 调用台账:MCP
skill_outcome 与 HTTP /skills/route、/skills/outcome 都写skill_runs,跨项目来源、迁移调用与成功率可复算。 - 评测:normal / hard / fresh50 / dev 四套 held-out 题,每日 cron + 趋势脚本;fresh50 用例做 SHA256 冻结(改题需
--allow-change),miss 分类器与近义变体合并。
自进化引擎(SIE)
- 能力地图、需求课程、UCB 规划、结算台账四件套;需求来自
kb_queries.gap、failed_check、signal 与真实 route_feedback,不编题。 - 来源级 bandit;
eval_gap 无 lift 降 reward 并 7 天退避;route_gap 阈值 .25 → .35;首次真实流量也能生成需求。 - 成本感知调度 v1 + 跨项目使用守卫;每日简报与周报加入学习行和路由评测行。
- 自验证实验闭环:洞见先并入真的会被路由读取的段落,再用 dev(20) + guard(15) 双集复测;只保留可复现的提升,否则恢复正文/版本并重建卡片;台账存改前改后全文,
experiments.py revert --id N 可一键回退。
学习质量(R2–R8)
- 任务结果口径:failed / verified / unverified + 核验强度(有效/证据/存在性),reward 按强度封顶——完成 ≠ 成功。
- 内容核验 autoverify:只认洞见正文,不认“已学习”计数;token 相关性 + embedding 语义救援(bge-small-zh,阈值 0.50 标定),并保存可复核产物。
- 可核验补学 relearn:老 learn 题目用新格式重学,带题目质量门、冷却窗、每日预算与独立车道,宁缺毋滥。
- 失败学习 learnquality:内容核验失败的来源降权,连续失败的题目退避;样本不足时不动,避免把偶发当规律。
- 跨项目迁移度量:origin、迁移调用、多项目技能、迁移成功率;附业务结果守卫。
评测漂移与学情看板(R9–R16)
- 漂移检测:最新一轮 vs 同 suite/mode/cases 前 7 轮中位数;drop ≤ -0.08、warn、unknown 分级,体检新增第 18 项。
- 慢漂斜率(最近 5 轮线性斜率)与逐题归因(原来命中、现在没命中,最多 10 条)。
- 门控自动回滚(R11)→ 回滚后观察 recovered / still_dropped(R12)→ 版本级回滚 + 人工队列(R13)。
- 学情看板(R14):能力/实验/结果/迁移/漂移/成本/补学七项聚合,人工队列 48h SLA;每日一行快照与“较昨日/趋势”(R15)。
- 人工队列 webhook(R16):超 48h/24h 去重推送,成功后写 notified_at,CLI
drift.py notify。
经验库与公开页
- 经验库公开页
/experience:分类、检索、项目过滤,JSON / JSONL / Markdown 下载;每条经验有稳定 id 与仓库相对出处。 - 导出经验包(experience-pack.v1 + cards.jsonl + summary.json + AGENTS-EXPERIENCE.md),其他项目可直接拉取或随仓库携带。
- 知识库存量扩容:CHANGELOG、git 提交历史、函数 docstring、脚本头注释、
.workbuddy 记忆入 KB;环境事实按指纹合并;严格召回基准与 IDF 加权。 - 公开页统一站点外壳
site.css;门户首页增加功能总库、经验库入口。 - 公开站一致性修复(2026-10-23 晚):顶栏改为
app/web/shell.py 单真值源,7 个公开页(首页 / 经验库 / 功能总库 / 知识库 / 更新日志 / API 文档 / 管理后台)导航与页脚完全一致;首页不再另写一套“能力/自进化/宪章”锚点导航,锚点收进“本页”行。知识库控制台无 Key 时不再永久“加载中…”,改为明确的未连接状态、可一键导入.danao_key.txt、可清除凭据;学情看板改为统一外壳,并把鉴权口径修正为X-Admin-Token(原来提示 API Key,实际接口只认管理口令)。回归 tests/test_site_shell.py 锁住导航一致、无占位符残留与门禁文案。
稳定性与运维
/healthz?fast=1 跳过内核统计,探针不再因 DB 锁 6s 超时。restart_brain.py:import 预检 → 等在途任务收敛 → 重启 → healthz 轮询;重启前写 5 分钟窗口,避免运维动作被记成 fault episode。- 向量增量补齐(按 version 判 stale,不再全量重嵌);卡片上限 2000 → 5000,新卡自动补向量、退休卡自动清理。
- DashScope 视频兼容
output.video_url、1920*1080 尺寸;修复合并时短视频被截断、BGM 无限流、1080/1072 尺寸不匹配等问题。 - 备份三副本与 git bundle 日备;推送失败自动打包 bundle 并重试。
版本与接口(本版新增)
- 新增
app/core/version.py 作为版本唯一真值源;健康检查、控制台状态、MCP serverInfo、pyproject.toml 全部读同一版本号。 - 新增公开接口
GET /api/version、GET /api/changelog 与公开页 /changelog。 - 升级提示:本次为功能增量,无破坏性变更;旧 API 路径与鉴权方式不变。