DSH Plugins Marketplace

DSH Plugins

Plugins

/

UI & Experience

/

dsh-region-probe

d

dsh-region-probe

Manifest valid

A read-only Cordis Inspect provider that lets an agent see the interface it is driving: outline() reports which UI regions the running shell actually rendered, with occupancy, geometry and current or

UI (client)hasBundlePatch

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

Comments

Loading…

Similar plugins

dsh-loader

by dsh-plugins

A version‑aware adapter registry that decouples third‑party Cordis plugins from dsh’s internal service names, paths, and RPC internals. 基于版本感知适配器注册表,为 dsh Cordis 插件提供运行时兼容层,使第三方插件与内部服务名、模块路径及 RPC 细节解耦

Manifest valid

★ 3

↓ 229/wk

TypeScript

Sep 7, 2026

dsh plugin --profile web add @dsh-plugin/dsh-loader

by Neo65536-engineer

Read-only work reports for DeepSeek Harness: reconstruct what an agent task actually did from session logs — tools used, files read/written, commands run, test results, failures, token usage, and whether it finished. Fully offline, no API key, no data leaves your machine.

Tools & CapabilitiesDevelopment & InfrastructureManifest valid

★ 1

MIT

JavaScript

Sep 26, 2026

dsh plugin --profile web add dsh-agent-log

by huiliyi37

官方 DeepSeek Harness 的交互式终端 UI 插件:自研 ANSI 极简交互渲染、流式 Markdown/工具卡、16+ 主题、slash 命令与选择器、输入历史与本地偏好持久化、LSP 诊断、memory记忆,很丝滑的开发体验。

Terminal & ClientsManifest valid

★ 286

↓ 486/wk

Apache-2.0

TypeScript

Sep 30, 2026

dsh plugin --profile terminal add @huiliyi37/dsh-tianshu-tui

Computer Use for macOS desktop applications: reads any app's accessibility tree as text with element indices, then clicks, types, pastes, scrolls, drags, selects text and sets values through it, plus

Tools & CapabilitiesManifest valid

★ 0

dsh plugin --profile web add dsh-mac-cua

by jianjianzhu

Full-page Harness console for the DeepSeek Harness Web GUI: sessions, plugins, market, MCP, skills and usage in one shell.

UI & ExperienceDevelopment & InfrastructureManifest valid

★ 0

MIT

JavaScript

Sep 20, 2026

dsh plugin --profile web add dsh-harness-ui

DSH 模型健康检查:在会话视图新增「模型健康检查」页签,按「供应商(baseURL分组) → API类型 → 模型 → 路由」四行按钮选定目标,手动发送一条真实裸 HTTP 测试请求(支持 openai-completions / openai-responses / anthropic-messages 三协议,流式与非流式可切),一屏展示耗时、TTFT、HTTP 状态、token 用量、响应内容与三层诊断链(API请求 / 模型响应 / 严格校验),错误全部人话化。可把当前模型一键设为默认(下次打开即预选)。另提供用户显式启动、成功即停的有限自动重试会话(严格/连通两种成功判定、4 条停止条件、致命错误不短路)。不做后台监控、不轮询、不告警、不落盘。

Development & InfrastructureTerminal & ClientsManifest valid

★ 0

dsh plugin --profile web add dsh-model-health-probe