dsh-cua-preview:带审批与截图预览的 DSH 浏览器自动化

前言

在 DSH 里让模型驱动浏览器时,导航、点击、填表、提交都会直接改变页面状态。若缺少可审阅的上下文和明确的放行步骤,操作一旦发出就难以撤回,也不利于对照「执行前」与「执行后」的画面判断是否真的生效。

下面介绍社区插件 dsh-cua-preview(维护者 ffyfox):用 Puppeteer 驱动本机 Chrome/Chromium,对会改页面的工具调用走 DSH 审批;审批前截取当前屏幕供用户查看,通过后再执行并在结果中按时间线返回截图。审批思路参考 ZCode 的 cua-permission-broker 设计,未复制其源码。插件在 SkillHub 目录中归类为 admin-security。

这是什么

dsh-cua-preview 是 DeepSeek Harness 的 bundle 插件(npm 包名 dsh-cua-preview,当前资料中版本 0.2.0,MIT 许可证)。它解决的是「浏览器自动化 + 人工把关」:只有用户在一次审批中选择允许后,导航与交互类操作才会真正执行;只读类工具不触发审批。

核心功能

插件向 DSH 暴露四类浏览器相关工具,行为如下(以仓库 README 为准):

工具 是否需要审批 返回内容
browser_navigate 是 导航完成并等待页面有界反应后的页面
browser_act(click / fill / submit) 是 动作完成并等待页面有界反应后的页面
browser_snapshot 否 当前 URL、标题与可见文本
browser_screenshot 否 当前屏幕图像

只读的一对不会改页面,因此不弹出审批。需要审批的一对会先询问;仅在 Host 侧得到「允许一次(allow once)」时才会执行,否则不执行任何页面操作。

截图与审批的关系(简要):审批发生在动作之前。用户做决定时,对话行里会先展示审批时刻的屏幕(Host 在提问前瞬间捕获);若允许执行,结果里通常先带标注为 before the action 的帧,再带动作完成后的结果图;若拒绝,则只返回审批时刻画面并标注 at approval time (no action ran)。空白未加载页不会强行输出无意义白图。

DSH 版本与审批文案:插件在 DSH 0.2.0-rc.2 上开发验证(@deepseek-ai/dsh-tools 0.2.0-rc.2,@deepseek-ai/cordis 4.0.4),并向后兼容至 0.1.5-rc.2。在 0.2.0-rc.2 上审批提示行固定为英文(Host 不再暴露可供插件读取的语言偏好);在 0.1.5-rc.2 / rc.3 上可本地化。

浏览器栈:选用 puppeteer-core,安装时不下载浏览器包,直接连接本机已有的 Chrome/Chromium,与你在桌面上使用的浏览器一致。

安装与启用

环境要求(README 原文):

  • Node ≥ 22.12(puppeteer-core 要求)
  • 本机已安装 Chrome 或 Chromium 可执行文件;安装插件时不会自动下载浏览器,缺失时会给出可操作的错误提示

DSH 插件通过 profile 安装,dsh plugin 会把参数转发到该 profile 目录下的包管理器:

# 按包名安装
dsh plugin --profile demo add dsh-cua-preview

# 从本地目录安装(例如已有 checkout)
dsh plugin --profile demo add ./dsh-cua-preview

dsh --profile demo --dump-config   # 配置层中会出现 "# == dsh-cua-preview"
dsh --profile demo                 # 启动

该包是 DSH bundle:自带配置层(cordis.patch.yml),由 profile 加载启动。若要在已有 profile 上挂载而不重装,可用 overlay(仓库测试也采用此方式),示例片段:

- insert:
    - id: cua-preview
      name: 'dsh-cua-preview'
      config:
        artifactsDir: '/tmp/cua-artifacts'   # 可选
        headless: true                       # 可选,默认 true
        chromePath: '/usr/bin/google-chrome-stable'  # 可选,可自动探测

配置项

键 默认值 含义
artifactsDir $DSH_HOME/cua-preview/artifacts 截图证据 PNG 写入目录
headless true 是否无头运行 Chrome
chromePath 自动探测 显式指定 Chrome/Chromium 路径
settle {graceMs: 250, idleMs: 400, capMs: 3000} 动作后等待页面反应再截「结果图」的策略

Chrome 路径还会读取环境变量 $DSH_CUA_CHROME_PATH,并在常见 Linux 路径(如 /usr/bin/google-chrome-stable、/usr/bin/chromium 等)中探测。settle 可为 false、数字(总毫秒预算)或对象覆盖 graceMs / idleMs / capMs;非法值会记录日志并回退默认,避免错误定时器阻止插件加载。

页面反应等待(为何需要 settle)

page.click() 在输入派发后即返回;goto 在 domcontentloaded 时返回也可能早于前端渲染完成。若在动作返回瞬间截图,画面往往仍是动作前的状态。因此每个受审批的动作在截取「结果帧」前会按 settle 等待页面有界时间内完成反应;设计细节见仓库 docs/design.md。

典型用法

  1. 按上文命令把 dsh-cua-preview 加入目标 profile,必要时配置 chromePath 或 headless: false 便于本地观察。
  2. 启动 dsh --profile <name>,在会话中让模型调用只读工具(如 browser_snapshot)了解页面,无需审批。
  3. 当模型调用 browser_navigate 或 browser_act 时,在 Host 审批 UI 中查看当前屏幕截图,选择「允许一次」后操作才会执行;在结果中对照 before the action 与动作后的画面确认效果。
  4. 需要留存证据时,注意 artifactsDir 下写入的 PNG;调试等待策略时可调整 settle。

仓库提供 npm test 及 acceptance / real-load 类脚本用于验证加载与行为,具体入口见 package.json 的 scripts 字段。

适用场景与注意

适合:需要在 DSH 智能体工作流中做受控的浏览器操作(填表、点击、提交、导航),且希望在执行前用截图做人工审阅的场景;与 admin-security 分类一致,强调操作门禁而非无限制自动化。

注意:

  • 插件以当前 DSH 进程的用户权限 运行,浏览器可访问的范围与该用户一致;安装与启用前应自行审查 GitHub 源码 与 MIT 许可证,确认符合你的安全策略。
  • 依赖本机 Chrome/Chromium,容器或 CI 中需预先安装并可通过 chromePath 或 $DSH_CUA_CHROME_PATH 指向。
  • DeepSeek Harness 生态采用「一切皆插件」思路;SkillHub 插件目录 为社区站点,与 DeepSeek / 幻方无官方从属关系,本文事实以仓库 README 与 package 元数据为准。

链接

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜