Public DSH Contract Matrix
August 24, 2026 ยท View on GitHub
Validated against DeepSeek Harness 0.1.1-rc.2 and the official plugin development guide.
| Need | Public contract | Decision |
|---|---|---|
| Tool registration | @deepseek-ai/dsh-tools: ctx.tools.register(defineTool(...)) | Supported; Cordis-owned cleanup. |
| Session identity / cwd / cancellation | exec.agent?.session, session.header.cwd, exec.signal | Supported; tools fail closed without an agent cwd. |
| Canonical filesystem | @deepseek-ai/dsh-fs: ctx.fs | Supported. |
| Filesystem policy | ctx.sandboxPolicy.resolve(...), ctx.fs.sandboxMode, and ctx.fs.writeText(..., policy) | Supported; mutations use an exact provider version guard, and read-only escalation is unavailable for bare non-enforcing providers. |
| Read observations | Public fs/observed event | Supported; this plugin also owns exact observed line intervals. |
| Process management | @deepseek-ai/dsh-subprocess: ctx.subprocess | Supported. |
| Process confinement | @deepseek-ai/dsh-sandbox: ctx.sandbox.confine | Supported; process-backed read tools force read-only policy and inspect reported enforcement. Full is required by default; explicitly opted-in native Windows may accept partial enforcement. The public contract has no backend attestation. |
| Atomic process read whitelist | No public contract | Unsupported; AST directory/path scans are gated off and exact provider-read file bytes are supplied over stdin. |
| Process launch approval | Generic ctx.approval.request only | Enabled by default and operator-configurable; disabling the prompt never disables forced read-only policy, enforcement eligibility checks, or the exact configured spawn plan. |
| Oversized output | @deepseek-ai/dsh-spill: ctx.spillStore.saveText | Supported when an owner session exists; otherwise output remains bounded. |
| Settings UI | @deepseek-ai/dsh-settings plus the public settings.plugin.item client slot | Supported; the Host exposes coding-tools, while the browser card edits four live availability controls, two live approval controls, and one warned native-Windows compatibility control through the revision-fenced settings scope. The Host uses SettingsScope.watch, exact registration disposers, a transition guard, and generation-scoped cancellation. |
| Built-in read bookkeeping | No consumer API required | The plugin uses its own code_read observation store. |
No DSH private source path is imported.