From f104d18165c620f8c60c64b3b46426f2d0f97e14 Mon Sep 17 00:00:00 2001 From: Yige Date: Fri, 7 Aug 2026 20:09:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(web-access):=20=E6=88=AA=E5=9B=BE=E5=83=8F?= =?UTF-8?q?=E7=B4=A0=E7=9B=B4=E6=8E=A5=E7=BB=99=E3=80=81clip=20=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E7=BA=A7=E8=A3=81=E5=89=AA=E3=80=81artifact=20?= =?UTF-8?q?=E7=94=A8=E7=BB=9D=E5=AF=B9=E8=B7=AF=E5=BE=84=20(#77)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 跟进 desirecore/desirecore#1741 与 #1756(均已合入 dev,随 10.0.100 发布)。 ## 变更 / Changes - **截图像素直接给**:现在作为 image 块进工具结果,视觉模型当场就能看。补一节说明什么时候才需要再 `Read` 一次(结果明确写了未附带像素、或需要原始分辨率),避免同一张图在上下文里占两份。同时说明非视觉模型下会明确告知「你看不到它的内容」,此时不要凭空描述画面。 - **元素级裁剪不再需要 `cdp.raw`**:`BrowserSnapshot` 的 `options.clip={x,y,width,height,scale}` 直接支持,`scale` 最大 4(已对照 `command-params.ts:333` 核实)。 - **artifact 改用 `result.artifact.absolutePath`**:原文教的 `${DESIRECORE_ROOT}/...` 在路径展开里根本不认(只认 `~` / `$HOME` / `$USERPROFILE`),拼出来是相对路径、`Read` 报「文件不存在」;原文给的还是目录,照抄会撞上「路径不是文件」。真机实测两条都踩过。 ## 刻意未改 / Deliberately unchanged 「用户真实鼠标会抢控制权」一条**保持原样**——修它的 desirecore/desirecore#1740 尚未合并,现状描述仍然准确。 ## 版本门控 / Version gating `required_client_version` 10.0.98 → **10.0.100**(含上述两个 PR 的最早版本)。market 是运行时拉取的,不提门槛会让老客户端拿到教它们用不存在能力的说明。 --- Follows desirecore/desirecore#1741 and #1756 (both merged to dev, shipping in 10.0.100). Screenshot pixels now arrive as an image block directly; element-level cropping no longer needs raw CDP; artifact reads use the absolute path from the receipt. The 'real mouse steals control' note is intentionally left as-is because its fix (#1740) is not merged yet. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- skills/web-access/SKILL.md | 4 ++-- skills/web-access/references/browser-tools.md | 21 ++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/skills/web-access/SKILL.md b/skills/web-access/SKILL.md index e32fffc..8ddd5e0 100644 --- a/skills/web-access/SKILL.md +++ b/skills/web-access/SKILL.md @@ -16,7 +16,7 @@ description: >- 新闻、网址、URL、找一下、搜一下、查一下、小红书、B站、微博、飞书、Twitter、 推特、X、知乎、公众号、已登录、登录状态。 license: Complete terms in LICENSE.txt -version: 2.1.1 +version: 2.2.0 type: procedural risk_level: low status: enabled @@ -79,7 +79,7 @@ market: fill-opacity="0.12"/> category: research - required_client_version: 10.0.98 + required_client_version: 10.0.100 maintainer: name: DesireCore Official verified: true diff --git a/skills/web-access/references/browser-tools.md b/skills/web-access/references/browser-tools.md index 5c6dcd0..dcca515 100644 --- a/skills/web-access/references/browser-tools.md +++ b/skills/web-access/references/browser-tools.md @@ -176,6 +176,21 @@ BrowserImport: 把 Space / Session 委派给另一个 Agent,`shareMode` 可选 `snapshot`(只读副本)、 `copy-on-write`(写时复制)、`live-shared`(实时共享)、`handoff`(移交控制权)。 +## 截图:像素直接给你,通常不需要再 Read + +`BrowserSnapshot` `mode: visual` 与 `BrowserAct` `page.screenshot` 会把截图像素作为 +image 块**直接放进工具结果**——视觉模型当场就能看,不必再调 `Read`。 + +只有这几种情况才需要走 `result.artifact.absolutePath` 再 `Read` 一次: + +- 结果里明确写了「截图已保存,但…未附带像素」(超出单图预算、或体积过大) +- 你需要的是**原始分辨率**,而附带的像素被压缩过 + +对同一张图既看 image 块又 `Read` 一遍,只会让它在上下文里占两份。 + +当前模型不支持视觉输入时,结果会明说「你看不到它的内容」——**此时不要凭空描述画面**, +改用 `semantic` / `accessibility` 快照拿页面信息。 + ## 已知边界(照做,别试探) | 边界 | 说明 | @@ -183,11 +198,11 @@ BrowserImport: | **截图前必须 `tab.activate`** | 标签页默认停在 `(-10000,-10000,1x1)`,没有合成表面。直接截图会卡满 30 s deadline,**并把标签页宿主打掉**,之后全部报 `BROWSER_TAB_HOST_NOT_FOUND` | | **同时只有一个可见标签页** | `tab.activate` 绑定主窗口、全局互斥。多 Space 可以并发导航/快照/输入,但截图必须逐个 activate 串行 | | **`page.evaluate` 基本不可用** | 每次调用需人工审批;返回的字符串/对象被替换为 `[REDACTED:browser-runtime-value]`(只有 number/boolean/null 穿透);反调试站点会把它挂起几十秒。读页面用 `BrowserSnapshot` | -| **`cdp.raw` 需人工审批** | `browser.raw_cdp.*` 属于永远人工闸门的能力,无人值守流程用不了(元素级裁剪截图因此不可用) | +| **`cdp.raw` 需人工审批** | `browser.raw_cdp.*` 属于永远人工闸门的能力,无人值守流程用不了。**元素级裁剪不必走它**——`BrowserSnapshot` 的 `options.clip={x,y,width,height,scale}` 直接支持(`scale` 最大 4):先用 `semantic` 快照拿到元素坐标,再截那一块并放大。验证码、小按钮在整页截图里只有几十像素,看不清时用它 | | **没有批量取文通道** | `semantic` 不含正文,`accessibility` 在真实页面上超限,`page.evaluate` 被审批+脱敏。要正文请回落 Jina / Playwright | | **单条命令 30 s deadline** | 超时即判 `browser.host.gone`,会话作废 | -| **用户真实鼠标会抢控制权** | 鼠标划过可见标签页会触发 `trusted-user-input` 并递增 control epoch,可能打断 Agent 的租约 | -| **artifact 不要走 `/save`** | 该接口会弹系统「另存为」对话框等人点。artifact 文件在 `${DESIRECORE_ROOT}/browser/artifacts//`,直接读即可,默认保留 24 小时 | +| **用户真实操作会抢控制权** | 在可见标签页上**点击、按键、滚轮、触摸**会触发 `trusted-user-input` 并递增 control epoch,打断 Agent 的租约。**鼠标只是划过不会**(默认策略 `intentional-input`),所以用户看着页面移动光标是安全的 | +| **artifact 不要走 `/save`** | 该接口会弹系统「另存为」对话框等人点。**用回执里的 `result.artifact.absolutePath`**(工具会把它登记进本次会话的可读白名单),不要自己拼路径——`${DESIRECORE_ROOT}` 这类变量在路径展开里不认(只认 `~` / `$HOME` / `$USERPROFILE`),拼出来是相对路径、`Read` 会报「文件不存在」。默认保留 24 小时 | ## SitePatternRead / SitePatternWrite