dsh-region-probe:让智能体读取 Harness 界面实际渲染了什么

前言

在 DeepSeek Harness(DSH)里做客户端或插件开发时,界面 bug 往往表现为「某块区域空白、报错一闪而过、布局错位」。智能体通常拿不到截图,人也未必一直在看屏幕,单靠日志很难对齐「壳子到底画出了哪些区域、各自占多大、里面大致是什么文字」。

常见做法是人工描述界面,或依赖固定选择器、CSS 类名去猜 DOM 结构。DSH 壳子对区域使用稳定的 data-slot 锚点,类名却是随构建变化的 CSS Module 哈希,维护一份区域清单也不现实。下面介绍社区插件 dsh-region-probe(维护者 orphiczhou,分类:客户端):只读接入 Cordis Inspect,在运行中的 Harness 页面里汇总区域列表、几何与占用情况,并记录曾失败又恢复的区域历史,供智能体通过现有检查工具自助核对渲染结果。

这是什么

dsh-region-probe 是一个面向 DSH 的只读 Cordis Inspect provider。它不自带 UI、不暴露额外工具、不发网络请求;在客户端侧注册一个 provider,提供三个只读方法。

Harness shell 把每个 UI 区域渲染成带稳定 slot key 的锚点,例如:

<div data-slot="sidebar.workspaces">…occupant 渲染的内容…</div>
<div data-slot-error="tool.view.demo">…该 occupant 渲染失败时…</div>

锚点本身为 display: contents,不占布局盒;provider 读取这些锚点,因此不需要维护区域列表、逐区域代码,也不依赖壳子的 CSS 类名。第三方插件与未来版本新增的区域,只要在 DOM 里出现对应锚点,即可被看到。

安装并 reload 一次 Harness 页面后,cordis_inspect_list 会在 client 平台列出名为 Regions 的 provider。

智能体可以问什么

通过智能体已有的 Cordis Inspect 查询(platform: "client", provider: "Regions")调用下列方法:

方法 作用
outline() 当前 DOM 中所有区域:slot、failed、failedBefore、empty、anchors、nodes、屏幕盒(x,y,width,height)、文本采样;汇总 total、failed、failedEver。
snapshot({ slot \| selector, depth?, limit? }) 单个区域的有界节点列表:path、tag、role、aria-label、所属 slot、文本、几何、visible、fontSize、color、background。优先用 slot key,也可用任意 CSS selector。depth 默认 3、上限 8;limit 默认 60 节点、上限 300。
failures() 本页渲染失败历史:哪些 slot 失败过、次数、当前是否仍失败(active / recovered / firstSeenAgoMs / lastSeenAgoMs)。

README 中的调用示例(outline):

// cordis_inspect_query({ platform: "client", provider: "Regions", method: "outline" })
{
  "total": 36, "failed": 0, "failedEver": 1,
  "regions": [
    { "slot": "sidebar",        "nodes": 137, "x": 0,   "y": 0, "width": 280,  "height": 900, … },
    { "slot": "main",           "nodes": 110, "x": 280, "y": 0, "width": 1160, "height": 900, … },
    { "slot": "sidebar.workspaces", "nodes": 49, "x": 12, "y": 204, "width": 268, "height": 640,
      "failed": false, "failedBefore": true, "empty": false,
      "text": "会话树 + ⋯ ▶ xiaomi-power-key-proj …" }
  ]
}

同一 slot key 若在列表等多处各渲染一次(例如侧栏展开与折叠轨各一份),会合并为一个 region,并给出 anchors: 2 与并集包围盒。

失败历史为何单独存在

outline() 只能反映此刻是否失败;短暂报错后恢复的区域,单次 snapshot 容易漏掉。provider 在页面生命周期内维护有界账本(200 条):

  1. 随插件以 immediately: true 启动,从页面加载起即记录;
  2. 对 childList 使用 MutationObserver,且在每次应答前再同步,保证在 Observer 不可用时账本仍正确;
  3. 已恢复的 slot 标记 recovered: true 并保留;同一 slot 再次失败则 count 递增。

失败原因不在此 provider 内:壳子只留空的 data-slot-error 标记,具体错误在页面控制台。

能看与不能看

  • 当前 DOM 里出现的所有区域(含其他插件、未来 DSH 版本新增区域),无需 opt-in。
  • 会遍历 shadow root 与同源 iframe,节点路径中会标注 #shadow、#frame。
  • 区分「声明但未渲染」(empty: true)、「渲染失败」(failed: true)与「根本没有匹配」;空列表会区分「无区域」「render-error」「selector 无匹配」「invalid-selector」等原因。
  • 跨源 iframe 内部与 canvas 上绘制内容不可读;会报告宿主元素,不假装能读到内部。
  • data-slot / data-slot-error 属于渲染实现细节,非对外契约;若未来 shell 不再输出,outline() 可能为空,可改用不依赖 slot 的 snapshot({ selector })。
  • 多窗口时,由哪个页面应答由 Harness 主机广播 inspect 决定(取第一个有效应答),几何数据对应应答页,而非本插件自行指定。

安装与启用

DSH 以 profile bundle 安装插件:纯 ESM,无构建步骤、无 npm 依赖。

图形界面: Plugins 页 → Add plugin → 粘贴:

https://github.com/orphiczhou/dsh-region-probe

命令行:

dsh plugin add orphiczhou/dsh-region-probe

本地目录也可在同一对话框里作为 spec 添加。客户端半部随页面加载;安装后 reload 一次 Harness 页面即可。

典型用法思路

  1. 智能体改完客户端或插件代码后,调用 outline(),核对 failed、empty 与各 region 的 text、几何是否合理。
  2. 对可疑 slot 调用 snapshot({ slot: "sidebar.workspaces", depth: 3, limit: 60 }),查看可见节点与样式,而不依赖截图。
  3. 若用户描述「刚才红了一下又好了」,调用 failures() 查 failedBefore、recovered 与 count。

插件未声明 peerDependencies,通过可选注入 cordisInspect 接入;无 client runner 的组合里会静默不加载而非整包失败。

适用场景与注意

适合: 在 DSH 里做 shell、插件或工具视图开发的智能体或开发者,需要在真实运行页面做只读 UI 自检、定位区域未渲染或瞬时失败。

权限与安全: 插件以当前 DSH 客户端进程权限运行,能读取区域名、可见文本、计算样式与几何;不点击、不写存储、不访问 cookie 或 localStorage、不发网络请求;应答有节点数、深度、文本长度等上限。README 将其定位为开发自检工具——若不希望会话读取自身界面,应禁用该插件。安装前请自行查看 GitHub 源码 与 MIT 许可证。

社区插件目录站 SkillHub 上的条目 与 GitHub 仓库独立维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本文介绍的是社区贡献的客户端 inspect provider。

结尾

dsh-region-probe 把 Harness 壳子的 slot 锚点变成结构化、可查询的只读视图,并补上瞬时失败的历史账本,让智能体在不开截图、不维护区域清单的前提下核对「界面实际渲染了什么」。进一步了解与安装:

  • 目录页:https://www.skillhub.cn/plugins/orphiczhou/dsh-region-probe
  • 仓库:https://github.com/orphiczhou/dsh-region-probe
羽毛球分组比赛记分
小程序二维码

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

Xiaoye