Skip to content

Releases: metahub-tech/agent-fleet

v0.8.13-alpha — human_dom 省略 profile 解析硬化(修 P6)

Choose a tag to compare

@qin-jiangli qin-jiangli released this 07 Jul 01:05
52b23ba

AgentHub #100 E2E P6 真机根因修复(接在 v0.8.12-alpha 之后,独立批)。

根因(取证四次反转锁定)

P6 轮 108 turns 填不进公众号标题 = human_dom_fill/locate 省略 profilehuman_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

Choose a tag to compare

@qin-jiangli qin-jiangli released this 06 Jul 16:34
ce14645

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 幂等复用

Choose a tag to compare

@qin-jiangli qin-jiangli released this 04 Jul 15:11
84e4c9b

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:falseplatforms/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 回读

Choose a tag to compare

@qin-jiangli qin-jiangli released this 04 Jul 09:59
59fe476

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.js node --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 — 起窗后强制最大化窗口

Choose a tag to compare

@qin-jiangli qin-jiangli released this 03 Jul 06:06
e889789

--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 — 抑制崩溃恢复气泡

Choose a tag to compare

@qin-jiangli qin-jiangli released this 03 Jul 04:43
ef13838

专用 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 盘扫描

Choose a tag to compare

@qin-jiangli qin-jiangli released this 02 Jul 18:18
2e247a4

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/P2human_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 不破。
  • P1human_dom_status installed 改纯盘扫描(去掉 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 修复

Choose a tag to compare

@qin-jiangli qin-jiangli released this 02 Jul 14:39
ab2c748

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_text KEYEVENTF_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

Choose a tag to compare

@qin-jiangli qin-jiangli released this 02 Jul 14:00

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→设备文件上传

Choose a tag to compare

@qin-jiangli qin-jiangli released this 20 Jun 04:01
b4f793a

发版自 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