dsh_debug_web:让 DSH agent 在页面里执行 JS、读控制台

前言

在 DSH 里做 Web 侧 agent 时,官方给模型的客户端感知主要是只读 Inspect:能读槽位树、主题令牌、Service/Event 契约,但读不到 DOM、读不到控制台,也不能在页面里跑代码。排查「页面上到底渲染成什么样」「console 报了什么」时,模型往往只能猜,或让人工打开 F12。

dongasai/dsh_debug_web(npm 包名 @dongasai/dsh-debug-web)补的是这一半:注册一个模型工具 dsh_debug_web,通过 DSH 已有的 Cordis Host→Client Inspect 通道(cordis/inspect-query),向已连接的 Harness 浏览器页面请求执行 JavaScript 并取回 JSON 结果,同时把页面侧捕获的 console 与未捕获异常缓冲交给模型。它不新造协议,只在宿主与页面各挂一层工具与 Inspect Provider。维护者为 dongasai,许可证 MIT(© 2026),当前版本 0.1.0;社区目录分类为联网工具。

这是什么

一句话:一个全局模型工具 + 页面侧 DebugWeb Inspect Provider,作用域仅限当前已连接的 Harness 标签页。

宿主依赖 @deepseek-ai/dsh-cordis-host-runner 的 cordisInspect;缺失时本插件不会激活。本插件不占槽位、页签或路由,界面无变化,能力在工具列表与模型调用侧体现。

核心功能

模型工具 dsh_debug_web(四个 action)

action 作用 必填参数
pages 列出响应页面:pageId、URL、标题、视口、可见性、已捕获条数 —
eval 在页面执行表达式或语句体,支持 await,返回 JSON 值 code
logs 读页面捕获的 console/异常缓冲,可按 since / level / limit 切片 —
clear 清空缓冲并返回清掉多少条 —

eval 可选 pageId;logs / clear 也可选 pageId。多标签页时应先用 pages 拿 pageId,再传给后续 action,避免打到后台标签页。

页面侧自动行为(无需用户手动配置)

  • 包装 console.log/info/warn/error/debug,保留原输出。
  • 挂载 window.onerror(捕获阶段,含 <script>/<img> 资源加载失败)与 unhandledrejection。
  • 300 条环形缓冲,单条正文截到 2000 字符,序号单调递增;不落盘、不发送第三方。

不提供的能力

截图、网络瀑布、DOM 快照接口、宿主文件访问均不在本通道内。

安装与启用

安装时必须指定 --profile,否则会报 required option '--profile <name> not specified'。本包带 dsh.bundle,装完后会自动进入 bundles;仅加依赖而不进 profile bundles 会导致装了不挂载。

方式一:本地目录(开发)

dsh plugin --profile web add link:/data/ai/dsh/dsh_debug_web

link: 依赖改代码后立刻反映为已装的那份。

方式二:命令行 · git 源(分发)

dsh plugin --profile web add github:dongasai/dsh_debug_web
dsh plugin --profile web add github:dongasai/dsh_debug_web#0.1

仓库地址为 https://github.com/dongasai/dsh_debug_web 。#0.1 钉在已推送的 tag 上;tag 被改动或删除后安装会失败。git 规格须用 github: 或 git+,不要用 git@…(会被 pnpm 当本地路径)。

方式三:Web 界面

DSH Web → 左侧栏插件 → 添加插件 → 填本仓库绝对路径 → 安装 → 点立即启用。

生效方式

改动 如何生效
client.js(页面 Provider) 刷新浏览器页面
index.js / cordis.patch.yml / package.json 的 dsh.* 重启 dsh web

装完第一次必须重启一次 dsh web:工具在宿主启动合成插件行时注册。

确认已挂载

dsh --profile web --dump-config | grep -A1 dsh-debug-web

期望出现:

- id: dsh-debug-web
  name: '@dongasai/dsh-debug-web'

重启后让模型调用 dsh_debug_web,action=pages。成功时大致会看到当前 pageId、视口与缓冲条数。工具列表里没有该工具 → 重启宿主;报 provider-missing → 刷新页面以加载新客户端 bundle。

典型用法

1. 枚举页面

模型调用 dsh_debug_web,action=pages。查询会广播到所有已连接页面,宿主只采纳第一个有效结果。

2. 在页面读 DOM 或样式

action=eval,传入 code,例如读 document.title 或 getComputedStyle(document.body).backgroundColor,返回值须能无损 JSON 化(函数、循环引用会导致查询失败;DOM 节点会转为 outerHTML 前缀)。

3. 读 console 与异常

页面在插件加载之后的输出才会进入缓冲。用 action=logs,可按 level 过滤;limit 默认 100、上限 300;since 为序号 seq,用于增量拉取。排查完可用 action=clear 清空缓冲。

4. 通道与超时口径

宿主默认等待 10000ms(cordis-host-runner 的 clientInspectTimeoutMs);页面侧 eval 自身 3000ms 先超时,模型侧通常先看到可读错误而非长时间挂起。未传 pageId 时,eval 的副作用可能在每个已连接标签页各执行一次(通道无「只定向某一页」的字段,仅 pageId 不匹配时该页拒绝本次查询)。

适用场景与注意

适合:Web profile 下让 agent 验证真实渲染、对齐 F12 里的样式与标题、读取页面运行时的 warn/error、在受控开发环境里做轻量页面探测。

安全与权限:eval 与页面同权,可读写 localStorage、改 DOM、发同源请求;通道无内建审批闸门。信任边界是「本机 + 已连接 Harness 页面」,不是沙箱。安装前请自行审阅 https://github.com/dongasai/dsh_debug_web 源码与 MIT 许可证;插件以当前 DSH 进程与浏览器标签页的权限运行。

边界摘要:日志仅内存缓冲,刷新即丢;装好之前的 console 拿不到;无 push,只能模型主动 logs;不提供截图与网络瀑布;多页场景只有首答结果被采纳。

结尾

若你的 agent 需要「看见 live 页面」而不只是 Inspect 契约,dsh_debug_web 是在现有 Cordis Inspect 通道上补 DOM 执行与 console 缓冲的最小增量。目录页:https://www.skillhub.cn/plugins/dongasai/dsh_debug_web ;源码与完整排错表:https://github.com/dongasai/dsh_debug_web 。

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

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

小夜