Releases: metahub-tech/agent-fleet
Release list
v0.8.13-alpha — human_dom 省略 profile 解析硬化(修 P6)
AgentHub #100 E2E P6 真机根因修复(接在 v0.8.12-alpha 之后,独立批)。
根因(取证四次反转锁定)
P6 轮 108 turns 填不进公众号标题 = human_dom_fill/locate 省略 profile → human_dom_profile_id("") 硬默认 "default" → 桥严格路由找不到 default tab(operator tab 注册 op-...)→ no_tab_for_profile,死在解析步没到 DOM。不是 data-placeholder(E1,早在 59fe476/v0.8.10-alpha 实现、P1-P10 标题都填过)、不是 fill 落字。
修法
- 主项:
DomBridge.active_operator_profile()(连接客户端注册表=真活跃证据,最近活跃优先,锁内 copy 消脏读)+resolve_profile_id(显式 profile 一行不变、省略→活跃 operator、无 operator→回退 default)+ 三工具响应带resolved_profile可观测。 - 有意语义收紧:operator + 日常 default 并存时「省略 profile」改指 operator(治 P6,非回归;日常 default 用显式 profile 逃生)。
- 次项:
human_dom_fill抽_do_fill+ E2 失败重试一次(re-tap 复用首次 center)。E1/E2/E3 已在 59fe476 实现、不重写。
真机验收(test-win11 复现 P6)
省略 profile 的 human_dom_fill(query="请在这里输入标题") → {ok:true, verified:true, resolved_profile:"op-f218...", retried:true}(解析命中 operator、标题落字、E2 重试真机 kicked in);对照原失败 {ok:false, reason:no_tab_for_profile, profile:default} → 108 turns。
质量门禁
architect 审 + code-reviewer 审(均无 BLOCKING);22 单测(显式零回归 + 解析算法 + E2 重试)+ common 297 passed;只碰 human_dom 纯 Python(content.js/E1/E3/_os_fill/_locate 未动)。E4 iframe 后置不做。
🤖 Generated with Claude Code
v0.8.12-alpha — 设备操作定点精度 R1+R4+R5
AgentHub #100 目标3 复用闭环 E2E 的定点精度提升,三条独立子特征合入,真机 10 轮公众号发文 E2E 验收通过。
精度红利(真机 10 轮 E2E)
- 截图/轮 ~51 →
10.4(↓80%) - turns/轮 ~50 → ~40
- est token/轮 ~96K → ~40-50K
- 0 相邻图标误点(对照基线的「误点视频→进错编辑器入口」)
- 10/10 草稿全落箱逐字验证
R1 vision 坐标系确定性校正
把「截图空间≡tap 空间」做成显式硬不变量:win DPI awareness 提前置位+接返回值、单一 _capture_in_tap_space 原语、暴露 scale_factor/dpi_aware(仅自检、绝不进坐标运算)。取证反转——不加除法层(center 已在 tap 空间,除 scale 会双重校正)。真机 core 已验(_ensure_dpi_awareness=True/scale_factor=1.0);150% DPI 缩放专测待用户在场。
R4 human_dom 扩覆盖
accessibleName 补可及名(既有 visibleText 链不动、空才追加 aria-labelledby/自身alt/后代img-alt/svg title)+ 有界扩池 + DOM 包含去重(绝不按中心距)。真机命中后台入口「新的创作」「草稿箱」、0 相邻误点,证入口为可及名型、R4 对症。
R5 反应式 hover-verify + score 暴露
vision_locate 透出 OCR ocr_conf(低置信闸输入,行级)+ 新 core 工具 hover_preview(x,y)(移真鼠标+截图+PIL 画确定性十字@tap点)。core 归属避开 vision 的 rapidocr/opencv deps gate(真机 tools/list 确认 hover_preview=True/vision_locate=False)。真机重度实用。
质量门禁
三条各 architect 审 + code-reviewer 审(均无 BLOCKING);本机纯函数/node-vm 全绿 + common 284 passed;集成分支已 reconcile R1↔R5 的 _capture_logical_png→_capture_in_tap_space 改名点(NameError 已消除)。
后续(不在本批次):编辑器字段填充(微信标题 ProseMirror data-placeholder 间歇填不进)另立批次。
🤖 Generated with Claude Code
v0.8.11-alpha — human_browser_open 幂等复用
human_browser_open 幂等复用(AgentHub #100 轮31)
真机实证:操作员 agent 把 human_browser_open 当"翻页/刷新"反复调(一个任务 17 次),原实现每次无条件重启 Chrome + 重跑 CDP 装扩展 → 慢(每次冷启动数秒)+ 破坏(有时把已登录的公众号后台页顶成新标签/Google 首页,agent 落错页 churn)。光靠 skill 文案劝不住模型的重开习惯,故在工具层做成幂等。
变更
- 探测两路:① 盘扫
<udd>/DevToolsActivePort+/json/version探活的 CDP 端点(human_dom 专用 profile 带临时 debug 端口,随 Chrome 存活,跨 server 重启也可探到);② 进程内启动注册表(覆盖无 debug 端口的非 human_dom 专用 profile)。陈旧 DevToolsActivePort(上次崩溃死端口)→ 正确判冷。 - 热路径(复用):不重 spawn、不重装扩展、不重 auto-bake、不新开标签;返回
reused:true+reuse_via。传 url 只在恰好 1 个标签才在当前页内导航(多标签无法可靠判前台页 → 一律不动,绝不盲选 page[0] 顶掉登录页);同源即视为已在目标站不重载(保护登录态/编辑器);仅 focus/最大化(非破坏)。 - 并发安全:「探测 → (冷)spawn → 登记」收进 per-key 锁,同一 profile 并发 open 只冷启动一次;慢的 CDP 装扩展留在锁外。
- 不变:冷路径(首开)spawn + 装扩展,
reused:false;默认日常 Chrome(无 profile)恒reused:false。platforms/common→ win/mac 同一语义共享。
验收
- 合成:连开 3 次 → 冷启动 1 次 + 复用 2 次(无新进程/无新标签/无 loadUnpacked 重跑)✅
- 新增 23 条单测;
platforms/common全量 272 passed;blueprint-check 全绿;自走 code-reviewer 两轮(多标签盲选 + TOCTOU 竞态已修并复验通过)。
PR #74 · squash 84e4c9b
v0.8.10-alpha — human_dom ProseMirror 标题 locate + fill 回读
human_dom ProseMirror 修复 (AgentHub #100 E2E 轮29)
公众号发布员用 human_dom 填 ProseMirror 编辑器标题/正文反复失败。创始人真编辑器 DOM 取证定位真根因,本版修复:
- R1(主因)
content.js visibleText补读data-placeholder/aria-placeholder,逐项先 trim 再判真假取第一个非空白来源。修复 code-review 抓出的短路隐患:真编辑体innerText是"\n"(truthy),若整条||链最后统一 trim 会在 innerText 处短路、永远读不到data-placeholder→ 标题永远 locate 不到。仍只读、不改 DOM。 - R2(安全网)
human_dom_fill加回读校验:按填入片段本身再 locate 确认真落字才ok:True/verified:True;没落字→ok:False/reason:fill_verify_failed/suggest vision,不再假成功。 - R3(加固) locate 候选按真可编辑(ce=true/input/textarea)排在 ce=false 占位 widget 前;输出补
editable字段。 - 部署加固
meta.json存 content.js 模板tpl_hash,模板变更时重烤已有 profile 副本。 - iframe 穿透(R4)按需求文档降为普适非阻塞,不为 #100 先做。
验证
- test-win11 真机(Chrome 149)合成页端到端全过:①标题(
innerText="\n"+data-placeholder)按占位文本 locate 命中、editable=true②fill 标题真落字、回读verified:true③fill 打在 ce=false 只读壳→回读抓空→ok:False+suggest vision ④R3:同命中真编辑体与占位 widget 时candidates[0]为 editable。 - 249 common pytest +
content.jsnode --check +test_content_js_visibletext.mjs(node vm 载入真实源码测逐项 trim)全过;CI 四检全绿;自派 code-reviewer 审核抓出并修复 1 项 Critical,复验闭环。
平台:platforms/common 改动 win/mac 自动共享;OS fill 机制未改。
PR #73 · 待 AgentHub 侧烤进桌面跑 #100 轮30 真机验收(草稿箱标题逐字一致 + 更新时间)。
v0.8.9-alpha — 起窗后强制最大化窗口
--start-maximized 被 Chrome per-profile 窗口尺寸恢复覆盖(半屏)→ server 侧 open 后 Win32 ShowWindow(SW_MAXIMIZE) 确定性强制最大化(不模拟键盘、agent 零操作)。真机 A/B 验证。连同 v0.8.8 的 --hide-crash-restore-bubble: 开窗即全屏 + 零恢复气泡。
v0.8.8-alpha — 抑制崩溃恢复气泡
专用 profile 启动加 --hide-crash-restore-bubble:强杀 chrome 后 profile 带 exit_type=Crashed → 下轮开窗弹「恢复页面?」气泡干扰 operator(轮10 四张求助卡作废)。产品兜住用户侧任何异常退出场景。真机验(test-win11/Chrome149):同一 unclean+可恢复会话下, 不带 flag 弹恢复气泡、带 flag 开窗零气泡。238 测试全过。
v0.8.7-alpha — 修 human_dom 桥注册阻断(关 LNA/PNA) + status 盘扫描
AgentHub #100 阻断修复:human_dom DOM 主路径终于打通
E2E 目标2 7 轮 connected 从未 true、human_dom_locate 持续 no_tab_for_profile。系统排查 + instrument 真桥实锤根因:公开页(example.com/公众号)的 content script 直连 localhost 桥(ws://127.0.0.1)被 Chrome「本地网络访问(LNA/PNA)」gate —— 弹「本地网络访问 允许/屏蔽」且即使允许也长延迟, WS 注册不上。桥/注册/路由逻辑本身正确。
修复
- P0/P2:
human_browser_open起 human_dom 专用 profile 时加--disable-features=LocalNetworkAccessChecks(与首启 feature 合并进同一个--disable-features)。真机验(Chrome 149):全新 profile 首启即connected(1s)、零弹窗零人工、human_dom_locate命中 example.com「Learn more」。作用域仅本专用 profile、非自动化标志、navigator.webdriver仍 false、moat 不破。 - P1:
human_dom_statusinstalled 改纯盘扫描(去掉 bridge_port 过滤)——换 server/桥端口后旧 profile 的 installed 不丢;connected 才是本桥 WS 维度。 - docs:using-human-dom skill 更新为 v0.8.6+ 自动装现实(删掉操作员手动 Load-unpacked / 点 PNA 允许 / F5)。
237 common 测试全过;过 code-review。test-win11 dev checkout 已部署验证:全新 profile 装扩展→零 PNA→connected→locate 命中,全链路真机通过。
v0.8.6-alpha — 确定性装 human_dom 扩展(CDP loadUnpacked) + DPI/IME 修复
AgentHub #100:终结 GUI 视觉自助装扩展,转确定性路线
GUI 视觉自助 Load-unpacked 三轮真机全失败(DPI/坐标失配),创始人裁决转确定性安装。
可行性实证(test-win11 / Chrome 149)
- ❌ 企业策略 force-install 自托管 off-store crx:Chrome
[BLOCKED](非企业机只认商店扩展)。 - ✅ CDP
Extensions.loadUnpacked:官方给自动化的--load-extension替代,端到端跑通、选定落地。
改动
- P0-A 确定性零 GUI 装扩展:
human_browser_open起专用 profile 加临时 debug 端口 → 经 CDP loadUnpacked 把 auto-bake 副本装进该 profile → navigate(必须 load 后再 navigate)。永不抛、装失败降级仍开目标页。 - P0-B
human_dom_status双维度{installed, connected, profiles, hint}:installed 读装成功即写的 loaded.json(弃惰性 flush 的 Secure Preferences);终结「未连接=未安装」误判。 - P1-A win 进程 per-monitor DPI-aware:screenshot↔tap 坐标统一。
- P2
type_textKEYEVENTF_UNICODE 绕输入法:真机实证//不再被中文输入法改成、。
moat
临时 debug 端口对网站侧风控安全:navigator.webdriver 恒 false、loader 装完即 detach(无 Runtime.enable 侧信道)、网页 Origin 被 Chrome 403。已加 moat 回归护栏测试锁死不变量。
235 common 测试全过;真机冷启动全新 profile 装扩展链路已验(2.1s 连上)。过 code-review + architect 评审。
v0.8.5-alpha — human_dom profile 路由 + 桥端口可配 + 首启弹窗抑制 + auto-bake
AgentHub #211 配套(human_dom 发布链)
- human_dom 按 profile 维度路由 + 桥端口可配(#66):支撑多 server / 多 profile 不串线。
- 全新 profile 首启原生弹窗抑制(#67):
_FIRST_RUN_SUPPRESS_FLAGS(--no-first-run等),操作员直接进目标页。零自动化痕迹不破。 human_browser_open(profile=X)auto-bake human_dom 扩展副本(#68):起专用 profile 时自动烤好 per-profile 扩展副本,省掉最易漏的一步。
test-win11(Chrome 149) 真机验证。217 common 测试全过。
说明:本版为「视觉自助 Load-unpacked」路线的收尾基线。因 GUI 视觉装扩展三轮真机全失败(DPI/坐标失配),已转【确定性 CDP loadUnpacked】路线,见后续 v0.8.6-alpha。
v0.8.4-alpha — vision 能力模块 + agent→设备文件上传
发版自 v0.8.3-alpha 以来已合并、尚未发版的能力 + 文档收尾。完整条目见 CHANGELOG.md。
新增能力
- pc-device:vision 像素级元素定位能力模块(#55,win/mac,可选启用)。无障碍树为空/不可用(网页、canvas、Electron 关 a11y、Flutter、游戏)时,用 RapidOCR(PP-OCRv4 ONNX)+ OpenCV 模板匹配做像素定位,纯 CPU、离线。新增
vision_locate/vision_tap/vision_locate_image(win 71→74、mac 70→73)。职责切分:OCR 只管定位(实测中位 1px、0 token),理解仍归 agent 自身视觉。 - iOS:agent→设备文件上传(#54)。
POST /upload+ WDA Photos 扩展,任意大小,真机 iPad iOS 26.5 已验。 - Android:agent→设备文件上传(#53)。
POST /upload+ MCP 工具,真机 Android10 已验。
文档 / 版本
- PEP440 版本
0.8.3a1 → 0.8.4a1(cli + 4 servers)。 - 9 语 README +
install.sh/install.ps1版本串与uvx安装命令同步至v0.8.4-alpha。
安装
uvx --from "git+https://github.com/metahub-tech/agent-fleet@v0.8.4-alpha#subdirectory=cli" agent-fleet setup