DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

@deepseek-ai/dsh-experimental-inspector

Experimental Inspector

用于 Host 调试和 Client Runtime 检查的实验性跨 realm CDP hub

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

npx -y @deepseek-ai/dsh plugin --profile web add @deepseek-ai/dsh-experimental-inspector@0.2.0-rc.2
README兼容性版本

兼容性与来源证明

Experimental Inspector 以 @deepseek-ai/dsh-experimental-inspector 发布,当前版本为 0.2.0-rc.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

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

版本

0.2.0-rc.2prerelease
2026/9/29
查看其余 2 个版本收起版本
0.2.0-rc.1prerelease
2026/9/28
0.1.7-rc.2prerelease
2026/9/24

相关插件

正在加载相关插件…

最新版
0.2.0-rc.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
732.2 kB
文件数
160
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
26,954
安全扫描
✓ v0.2.0-rc.2 扫描通过
查看源码 ↗项目主页 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Experimental Inspector Profile@deepseek-ai/dsh-experimental-inspector-profile用于原始 Session 日志和 Chat 节点检查的可选 Web 捆绑包

README


description: "Experimental Chrome DevTools inspection for Host and browser Client Cordis runtimes, including Console evaluation, Sources, Network capture, Elements trees, and a CDP-independent query API." kind: "package-bundle"

@deepseek-ai/dsh-experimental-inspector

English | 中文

Summary

Inspect one running dsh Host and its browser Clients in Chrome DevTools: Host and Client Console contexts, Host Sources and debugging, captured Host fetches, and a shared Cordis tree, with all CDP state in a Worker.

The Inspector stays off the default plugin list. Install its bundle explicitly with dsh plugin --profile web add @deepseek-ai/dsh-experimental-inspector. Its cordis.patch.yml mounts the installed package; pnpm run demo:inspector mounts the source tree. The Host row needs a Web server. The Worker never accesses live Cordis objects: the shared collector projects them into validated snapshots before transport.

Table of Contents

  • Runtime layout
  • Configuration
  • Observation API
  • Cordis tree inspection
  • Host fetch capture
  • Security
  • Model Experience
  • Known Limitations and Deferred Work
  • Dev Note

Runtime layout

The Host plugin starts the Worker and connects a dedicated MessagePort. The Client plugin reads the injected globalThis.__DSH_INSPECTOR__ bootstrap and opens a separate authenticated WebSocket directly to the Worker; a page opened before the Host row was enabled has no bootstrap, fails its Client plugin with a reload instruction, and inspects only after a reload. Chrome DevTools connects to the Worker's CDP WebSocket. A private node:inspector.Session per DevTools connection attaches from the Worker to the Host main thread, so Host Console evaluation, Sources, breakpoints, and resume remain available while Host JavaScript is paused.

The source tree follows those execution environments: client/ and host/ provide mirrored adapter entry paths, worker/ contains only Worker-thread orchestration and Chrome protocol state, and shared/ contains environment-independent Cordis and network models, normalized realm backend interfaces, and the internal bridge protocol. Worker-side Client and Host adapters are mirrored under worker/realms/; a Client adapter in that directory still executes in the Worker.

Host and Client producers send internal observation records rather than CDP messages. Records contain a source generation, sequence, source-clock timestamp, topic, and JSON payload. The Worker validates every process or network frame, owns source state and retention, and translates recognized topics to standard CDP domains.

Client sources declare typed Runtime, Console, and read-only Sources capabilities. Runtime.enable publishes the real Host execution context and one synthetic context for every connected Client source. Selecting a Client context routes evaluation, property access, function calls, promise awaiting, and object release to that browser realm. Client Console arguments use the same session-local object table, while Debugger.enable publishes the built lib/client.js catalog and Debugger.getScriptSource reads bounded content chunks. Client-script breakpoints, step, and call frames remain unsupported; target-wide pause and resume control the Host debugger only.

Both plugin faces run the same browser-safe Cordis collector. It converts reachable Context and Fiber objects into a versioned CordisTreeSnapshot; the Worker stores that CDP-independent representation and projects each Host or Client source into the Elements panel.

Configuration

The Host plugin injects webServer and accepts these fields:

FieldDefaultMeaning
host127.0.0.1Worker endpoint bind address; only loopback is accepted
port9230First Worker endpoint port; occupied ports advance upward, while 0 requests an OS-assigned port
clientOrigins[]Additional exact browser origins accepted by /ingest; loopback origins remain accepted
captureFetchtrueWrap globalThis.fetch and publish every later call
maxRequestBodyBytes8 MiBPer-request captured request-body prefix
maxResponseBodyBytes32 MiBPer-request captured response-body prefix
maxBodyChunkBytes48 KiBRaw bytes carried by one body record before base64 encoding
maxJournalBytes256 MiBWorker-retained request and response body bytes
maxRetainedRequests2000Active and completed requests retained by the Worker
maxSourceFrameBytes128 KiBEncoded source-frame limit
maxSourceRecordsPerFrame128Records in one source batch
maxQueuedRecords2048Per-producer records waiting for transport
maxQueuedBytes16 MiBPer-producer queued encoded bytes
startupTimeoutMs10 secondsWorker readiness deadline
stopTimeoutMs5 secondsGraceful Worker shutdown deadline before termination

The generated configuration catalog is the exhaustive source for accepted fields and their declarations.

The Host logs a devtools:// URL after the Worker listens. The same Worker serves /json, /json/list, /json/version, the target WebSocket under /devtools/page/<id>, and the Client source at /ingest.

Observation API

Both plugin faces provide the same service:

import type { Context } from '@deepseek-ai/cordis'
import type { InspectorJsonValue } from '@deepseek-ai/dsh-experimental-inspector'

declare const ctx: Context
declare const topic: string
declare const jsonPayload: InspectorJsonValue

ctx.inspector.publish(topic, jsonPayload)
await ctx.inspector.cordis.getTree()

Publishing validates lossless JSON and schedules delivery without waiting for the Worker. Each source has a bounded queue. Overflow is reported as a sequence gap and never delays the observed application operation. cordis.getTree() reads the Worker's latest detached semantic snapshot without creating a CDP session or enabling Runtime, Debugger, or Sources.

Cordis tree inspection

The Elements document has fixed <host> and <clients> containers. <host> contains the Host root Context; <clients> contains one <client> per Client source, and each <client> contains that realm's root Context. The Cordis root Fiber is omitted. Every other Fiber is a child of fiber.parent, owns exactly one Context child for fiber.ctx, and carries only uid="<Cordis Fiber.uid>"; Context elements have no attributes. Context-only extend(), isolate(), and intercept() layers remain direct Context descendants.

Host and Client publish the same nested CordisTreeSnapshot type. Context and Fiber nodes carry opaque object handles for realm-local object lookup; Fiber nodes additionally carry Cordis uid. The Worker composes those realm snapshots into one { host, clients } inspection tree. It assigns BackendNodeId values per source generation; each DevTools connection assigns its own NodeId values; DOM.resolveNode asks the owning Host or Client Runtime for a connection-local RemoteObjectId. DOM.requestNode maps that object id back to the same Elements node. ctx.inspector.cordis.getTree() and DSHInspector.getCordisTree read the detached consumer-neutral tree without routing handles or CDP ids.

Node delivery is depth-limited per DevTools connection: DOM.getDocument serves three document levels when the caller omits depth, withheld levels advertise childNodeCount, and expansion fetches them through DOM.requestChildNodes (depth: -1 for a whole subtree). NodeIds leaving through DOM.performSearch, DOM.requestNode, or DOM.pushNodesByBackendIdsToFrontend first push the not-yet-sent ancestor levels as DOM.setChildNodes events.

Sources publish complete snapshots, while the Worker compares stable backend node identities before notifying DevTools. Unchanged snapshots emit no DOM event; additions, removals, and attribute changes use node-level CDP events, inserted-node payloads withhold their subtree, and sibling reordering replaces only that parent's children. Existing NodeId values and unaffected Elements expansion remain stable.

When a Client disconnects, its Console execution context and live object ids are destroyed immediately. With disconnected-tree retention enabled, Elements keeps the last tree unchanged while connection state remains in the inspection model rather than becoming an unreviewed DOM attribute. Reconnection keeps the logical source id, creates a new synthetic CDP context id for the new transport generation, and replaces the stale tree after its complete snapshot arrives. The Client retains its logical id in sessionStorage and claims it through Web Locks for the page lifetime, so refresh reuses the id while a duplicated live tab receives a new one. The Worker retains at most maxDisconnectedCordisTrees such snapshots; zero removes them immediately.

Host fetch capture

Fetch capture is on by default and records the complete URL, all request and response headers, request body, response body, status, timing, errors, and cancellation. It does not redact credentials, cookies, query values, or payloads. Body capture reads clones; the caller receives the original Response as soon as the original fetch resolves.

The configured body limits bound retention rather than select fields: capture keeps the prefix and marks the result truncated. Network.getRequestPostData and Network.getResponseBody read the Worker's retained bytes. Network.streamResourceContent returns the buffered prefix and adds later response bytes to Network.dataReceived for that DevTools connection, which drives live Response and EventStream views. Direct Undici Client/Dispatcher calls and fetch references retained before plugin activation are outside this observer.

After response headers arrive, a caller-side abort can stop the observer's clone; captured bytes remain available through Network.getResponseBody, capture metadata records the error and truncation, and CDP emits Network.loadingFinished because fetch returned a Response. A fetch rejection before response headers emits Network.loadingFailed, with canceled: true for an abort.

Security

The CDP target grants arbitrary code execution in both Host and connected Client realms through Runtime.evaluate; Host Debugger operations provide additional control. Full fetch capture includes secrets. The Worker therefore accepts only a 127.0.0.1 bind address. Client ingest additionally requires a random WebSocket subprotocol token injected by the Host and rejects non-loopback origins unless explicitly configured. The CDP socket itself has no token; loopback binding is its only access control.

Model Experience

None, as this developer-only inspector observes runtime activity without changing model requests.

KV Cache effect

None; this package neither assembles nor sends a provider request.

Known Limitations and Deferred Work

  • Client active debugging is unsupported — Console events, Runtime evaluation, RemoteObject access, and read-only lib/client.js Sources work. Client-script debugger requests return explicit unsupported errors; target-wide pause and resume control the Host only.
  • Client Sources expose the Inspector bundle only — other page scripts are not cataloged by this package.
  • Client evaluation uses page JavaScript — page Content Security Policy can block dynamic evaluation, and the synthetic context does not provide DevTools command-line helpers or native REPL declaration semantics.
  • Client identity arbitration requires Web Locks — browsers without that API retain reconnect and refresh identity through sessionStorage, but cannot distinguish two simultaneously live tabs copied from the same storage state.
  • Fetch interception covers globalThis.fetch — direct Undici APIs and fetch references retained before activation are not observed.
  • Body cloning has cost — full capture tees request and response streams up to the configured limits and can increase memory and I/O pressure. The retained-body limit does not include buffering inside the stream tee, including an oversized source chunk or data queued for a slower application reader.
  • No automatic Worker restart — an unexpected Worker exit fails the current Inspector instance; lifecycle recovery belongs to a later change.

Dev Note

Working context for maintainers — click to expand

None.

Runtime invariant: No companion is published. Wire parsing, generations, Worker lifecycle, and CDP sessions reject invalid relationships in their owning operations.

clientReconnectBaseMs250 msFirst Client reconnect backoff cap
clientReconnectMaxMs5 secondsMaximum Client reconnect backoff cap
clientRuntimeTimeoutMs30 secondsDeadline for one Worker-to-Client Runtime or Sources command
queryTimeoutMs10 secondsDeadline for one non-CDP semantic query
maxClientRuntimeObjects10000Live Client object handles retained per DevTools connection
maxClientRuntimeProperties2000Property descriptors returned by one Client object inspection
maxClientSourceBytes8 MiBMaximum encoded bytes read from one Client script or source map
maxCordisNodes2048Context and Fiber nodes admitted from one realm snapshot before truncation
maxDisconnectedCordisTrees8Last disconnected realm trees retained as non-live snapshots