DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Region Probe — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
R

@orphiczhou/dsh-region-probe

Region Probe

适用于 DeepSeek Harness 的只读 Cordis Inspect 提供程序:告知代理正在运行的 shell 实际渲染了哪些 UI 区域、这些区域的占用情况和几何信息,并通过 slot key 或 CSS 选择器读取任意区域的渲染内容——包括发生故障后恢复的区域的故障历史。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:orphiczhou/dsh-region-probe#c42e5e52b431e2e8cdfa4b2e26a53565937eb064
README兼容性版本

兼容性与来源证明

Region Probe 以 @orphiczhou/dsh-region-probe 发布,当前版本为 1.0.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/2

版本

1.0.0stable
2026/10/2

相关插件

正在加载相关插件…

最新版
1.0.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/2
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义Client Ui Skill Explorer@linxin666/dsh-client-ui-skill-explorerDSH 技能中心:按来源(bundled / project / user / custom / runtime)浏览已加载的技能,在 Web GUI 面板中启用或禁用、创建和删除技能。Remote Web Ui@linxin666/dsh-remote-web-ui通过扫码配对访问 dsh Web GUI,共享一个官方界面:设置按钮旁的二维码可将手机和 PC 配对到同一个 Web GUI(手机采用竖屏触控适配层,PC 使用完整桌面界面),通过一次性令牌和 rClient Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。

README

dsh-region-probe

A read-only Cordis Inspect provider for DeepSeek Harness: it tells an agent which UI regions the running shell actually rendered — and what they rendered — so a rendering bug can be found by the agent itself, in the real app, without a screenshot or a human looking at the screen.

No UI. No tools. No network. One provider, three read-only methods.

Why this can work at all

The Harness shell renders every UI region as a slot anchor:

<div data-slot="sidebar.workspaces">…what the occupant rendered…</div>
<div data-slot-error="tool.view.demo">…when that occupant failed to render…</div>

(The anchor itself is display: contents — it has no box; the occupant supplies the layout.)

So every region — the ones this DSH version ships, the ones a later version adds, and the ones third-party plugins contribute — carries a stable slot key in the DOM without that region needing to cooperate. This provider reads those anchors, which is why it needs no list of regions, no per-region code, and no CSS class names (the shell's own class names are CSS-module hashes like BynINW_frame and change with every build; slot keys do not).

What an agent can ask

MethodAnswers
outline()Every region present in the DOM right now: slot, failed, failedBefore, empty, anchors, nodes, on-screen box (x,y,width,height), a text sample. Plus total, failed, failedEver.
snapshot({ slot | selector, depth?, limit? })The rendered content of one region as a bounded node list: path, tag, role, aria-label, owning slot, own text, geometry, visible, fontSize, color, background.
failures()Failure history for this page: which slots failed to render, how many separate times, and whether each is failing now or has recovered (active / recovered / firstSeenAgoMs / lastSeenAgoMs).

Addressed by slot key (preferred) or by any CSS selector (fallback). depth defaults to 3 (anchor → surface → row → label), capped at 8; limit defaults to 60 nodes, capped at 300.

Reading through the agent's existing inspection tool:

// 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 …" }
  ]
}

A slot that is a list can render the same key in more than one place (the sidebar panel list renders once expanded and once in the collapsed rail); those anchors are folded into one region with anchors: 2 and the union box.

Failure history

outline() can only see what is broken right now, so a region that rendered broken for a moment and then recovered leaves no trace — exactly the class of bug a single snapshot misses. The provider therefore keeps a bounded ledger (200 entries) for the life of the page:

  • it starts with the plugin (immediately: true), so it sees the page from boot;
  • a MutationObserver on childList re-syncs when a failed anchor appears or disappears, and every answer re-syncs as well, so the ledger is correct even where MutationObserver is unavailable;
  • a slot that is no longer failing is marked recovered: true and kept;
  • a slot that fails a second time gets count: 2.

The reason a region failed is not here — the shell only leaves an empty data-slot-error marker; the error itself goes to the page console.

What it can and cannot see

  • ✅ Every region that is in the DOM, including regions contributed by other plugins, plus regions added by future DSH versions — nothing needs to opt in.
  • ✅ Shadow roots and same-origin frames are traversed; the node path says so (#shadow, #frame).
  • ✅ Regions that are declared but rendered nothing (empty: true) and regions that failed (failed: true) are distinguished from regions that are missing — the provider never answers a silent empty list: "no region is rendered", "render-error", "selector matched nothing" and "invalid-selector" are different reasons.
  • ❌ Content inside a cross-origin iframe, and anything painted into a canvas, cannot be read; the provider reports the host element and does not pretend otherwise.
  • ⚠️ data-slot / data-slot-error are renderer implementation details, not a documented contract. If a future shell stops emitting them, outline() returns nothing — use snapshot({ selector }) instead, which does not depend on them.
  • ⚠️ Which page answered is not determined by this plugin: a Harness host broadcasts an inspect query to every connected page and takes the first valid answer, so in a multi-window setup the geometry you read describes the page that answered.

Install

DSH installs plugins as profile bundles. Plain ESM, no build step, no dependencies.

From the GUI: Plugins page → Add plugin → paste https://github.com/orphiczhou/dsh-region-probe.

From the CLI:

dsh plugin add orphiczhou/dsh-region-probe

From a local checkout: add the directory as the spec in the same dialog.

The client half loads with the page. Install it and reload the Harness page once; from then on cordis_inspect_list shows the Regions provider on the client platform.

Privacy and safety

This bundle gives an agent the ability to read the Harness UI: region names, visible text, computed colours and geometry. It does not click, write, or navigate; it touches no cookie, no localStorage, and makes no network request; every answer is bounded (nodes, depth, text length) and text is truncated. It exists for self-verification, so treat it as a development tool: disable it if you do not want a session to be able to read its own interface.

Compatibility & version policy

This bundle declares no peerDependencies. That is deliberate: peerDependencies on @deepseek-ai/dsh* is the only compatibility field DSH enforces, so declaring none means the plugin does not hard-fail on a runtime upgrade. It talks to exactly one optional client service, cordisInspect, requested with an optional injection (ctx.inject([...], cb)) so that in a composition without the client runner the plugin simply does nothing instead of failing to load.

Development

node test/contract.cjs        # 100+ assertions, no DSH install required
node scripts/verify-bundle.mjs

test/contract.cjs runs the real client.js against a miniature DOM that models exactly what the shell produces — data-slot anchors, a data-slot-error anchor, a 0×0 anchor whose content is in its children, a list slot rendered twice, a nested transparent wrapper, an empty region, a shadow host, a same-origin frame, a canvas — then drives a crash → recovery → crash again sequence through the ledger, and judges every answer with the shipped DSH schema engine when one is available locally (it skips that part rather than pretending to pass when it is not).

License

MIT