DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
F

dsh-fs-observation-bridge

Fs Observation Bridge

Bridges code-reading tools (MCP, CLI, conservative Bash and PowerShell shell reads, native) into DSH's fs/observed read-before-edit policy, with transport and source registries.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:iBobbyTS/dsh-fs-observation-bridge#8535e2be0099bd21dbd08416aaaa09967b8797fe
READMECompatibilityVersions

Compatibility and provenance

Fs Observation Bridge is published as dsh-fs-observation-bridge and currently resolves to version 0.3.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
github
Registry updated
10/27/2026

Versions

0.3.0stable
10/27/2026
0.2.0stable
10/27/2026

Related plugins

Loading related plugins…

Latest
0.3.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
any
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/29/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in developer-tools.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Sdk App@deepseek-ai/dsh-sdk-appThe dsh SDK profile bundle: stdio JSON-RPC serving and process lifecycle over dsh-baseExperimental Inspector@deepseek-ai/dsh-experimental-inspectorExperimental cross-realm CDP hub for Host debugging and Client Runtime inspectionExperimental Inspector Profile@deepseek-ai/dsh-experimental-inspector-profileOptional Web bundle for raw Session logs and Chat node inspection

README

DSH FS Observation Bridge

English | 简体中文

Bridges external code-reading tools into DeepSeek Harness (DSH)'s native file observation system, allowing agents to edit files without redundant read calls after inspecting source code.

Table of Contents

  • Features
  • Design Philosophy
  • Supported Shell Reads
  • Configuration
  • Installation
  • Adding a Source
  • Contributing
  • License

Features

  • Multiple Sources: Built-in support for CodeGraph CLI, CodeGraph MCP, a conservative Bash shell-read grammar, and a conservative PowerShell shell-read grammar for Windows pwsh.
  • Extensible Architecture: Integrate additional code-reading tools and transports through adapters.
  • Read Verification: Register file observations only from verified, model-visible source-reading evidence.
  • Native Safety: Preserve DSH's existing file version checks, concurrency safeguards, and editing behavior.

Design Philosophy

Bridge code readers to DSH's native file observation system rather than replacing its editing mechanisms.

The plugin consists of three independent layers:

  • Transport: Normalizes input from MCP, CLI, shell-read, native DSH tools, and other transports.
  • Source: Identifies tool-specific invocations and extracts or replays source-code evidence.
  • Observation Core: Validates reading evidence and registers observations through fs/observed.

Each layer is independently extensible. New code-reading tools can be integrated without modifying the core, and unverifiable reads do not grant editing authorization.

Concurrent tool calls are observed in completion order. If an older observation for the same file arrives last, a later edit fails closed with FS_STALE_VERSION rather than editing unseen content.

fs/observed is a whole-file, versioned observation, exactly like DSH's native read offset/limit: a trusted partial view authorizes a later full-file edit while the version is unchanged. This bridge does not add a coverage policy; it only feeds the stock policy trusted observations.

Supported Shell Reads

The shell-read transport claims two small, deterministic grammars: Bash on POSIX hosts and PowerShell on Windows hosts (pwsh). It is mutually exclusive with the CodeGraph cli transport: a command is normalized by exactly one of them.

Default (P0)

FormExampleReplay rule
cat file / cat -- filecat src/app.tsExact full-file comparison
head file / head -n N file / head -N filehead -n 80 src/app.tsFirst N lines (default 10)
tail file / tail -n N filetail -n 50 src/app.tsLast N lines (default 10)
tail -n +N filetail -n +522 README.mdFrom line N to EOF
sed -n 'Np' filesed -n '42p' src/app.tsOne line
sed -n 'N,Mp' filesed -n '40,120p' src/app.tsInclusive range
sed -n 'N,$p' filesed -n '40,$p' src/app.tsFrom line N to EOF

Line numbers and pipelines (P1)

A pipeline is one reader (cat without numbering, nl -ba, or sed) followed by up to two stages chosen from head, tail, sed, and nl. nl may appear at most once, and four or more stages are rejected.

FormExample
cat -n file / cat -b fileNumber all lines / non-blank lines
nl -ba fileNumber all lines
cat file | head -n Ncat app.ts | head -n 80
cat file | tail -n Ncat app.ts | tail -n 80
cat file | sed -n 'N,Mp'cat app.ts | sed -n '20,80p'
cat file | nl -baNumber the whole file
cat file | head -n N | tail -n MSelect a window from a prefix
cat file | sed -n 'N,Mp' | nl -baSelect first, then number from 1
cat file | nl -ba | sed -n 'N,Mp'Number first, then select
nl -ba file | sed -n 'N,Mp'Number first, then select
sed -n 'N,Mp' file | nl -baSelect first, then number from 1

PowerShell reads (Windows, W0/W1)

Only a normal foreground pwsh call with a session owner is observed. Persistent PowerShell, background jobs, promoted/timeout calls, and PTC-nested calls are never observed.

FormExampleReplay rule
Get-Content file, gc/cat/type aliasGet-Content .\src\app.tsevery line object, exactly
Get-Content file -RawGet-Content .\app.ts -Rawthe whole file string plus the host's final newline
Get-Content file -TotalCount N / -Head NGet-Content .\app.ts -TotalCount 120first N line objects
Get-Content file -Tail NGet-Content .\app.ts -Tail 50last N line objects
Get-Content file | Select-Object -First N... | Select-Object -First 100first N line objects
Get-Content file | Select-Object -Last N... | Select-Object -Last 50last N line objects
Get-Content file | Select-Object -Skip N -First M... | Select-Object -Skip 200 -First 100line objects N+1 through N+M
Get-Content file | Select-Object -Index I... | Select-Object -Index 42one line object, 0-based

PowerShell is not Bash and is parsed by its own strict grammar:

  • Only Get-Content (or its stock aliases gc, cat, type) with one literal file, plus at most one Select-Object stage, is accepted.
  • -LiteralPath keeps [id] and similar characters literal. Positional binding and -Path keep PowerShell wildcard semantics, so *, ?, [, and ] are rejected there even when quoted.
  • Rejected: provider paths (Env:, HKLM:), drive-relative paths (C:file), NTFS alternate data streams (file:stream), device namespaces (\\?\, \\.\), ~, variables and subexpressions, arrays and commas, splatting, script blocks, redirection, ;/&&, comments, backtick escapes, newlines, and parameter abbreviations.
  • Rejected options: -Encoding, -Stream, -Wait, -AsByteStream, -Delimiter, -ReadCount, -Filter, -Include, -Exclude, -Force, and any unknown parameter. -Raw cannot be combined with -TotalCount/-Tail or a pipeline; Select-Object accepts only -First, -Last, -Skip (with -First), and -Index, and rejects -Property, -ExpandProperty, and -Unique.

Why PowerShell stdout is replayed, not compared as bytes

Get-Content emits one string object per line (terminators consumed) and the console host writes each formatted object followed by its own newline; -Raw emits one string and the host appends one more newline. The bridge therefore rebuilds the expected stdout from DSH's own ctx.fs.readText and compares it with the structured stdout.text, normalizing only CRLF/LF. Line bodies, blank lines, tabs, trailing spaces, and a missing final newline are compared exactly. A Windows PowerShell 5.1 read that decodes a UTF-8 file through the legacy ANSI code page produces different text and therefore fails closed; an empty file is observable only for a complete Get-Content/-Raw read.

Authorization conditions

A shell-read observation is emitted only when all of these hold:

  1. The call is a normal foreground bash or pwsh call with a session owner. Persistent-shell, background, promoted, job_output, and PTC-nested calls are not supported.
  2. exitCode === 0, no signal/timeout/abort/stop, no sandbox denial or runner failure, stderr is empty, and neither stdout nor stderr is truncated; a spill file is not accepted as model-visible content.
  3. The command is exactly one of the forms above: one literal target file, no shell operators other than the listed |, no redirection, variable/command substitution, glob, brace expansion, or unquoted tilde. Quoted glob characters such as '[id]/+page.svelte' are literal filenames and are allowed for Bash; PowerShell follows the dialect rules above.
  4. For Bash, the effective working directory comes from the call's workdir (or the session directory) and matches the Bash result's cwd. For PowerShell it is the result's own cwd, because that is the directory the process actually ran in. The path always resolves through ctx.fs.
  5. The target is a regular text file within maxSourceBytes; before = stat, readText, after = stat must report the same opaque version.
  6. Replaying the parsed plan over the current file must equal the structured stdout exactly, after CRLF→LF normalization only. No trimming, whitespace compression, or free-form snippet inclusion.
  7. The result is visible in the final frozen tool result: the complete expected stdout must still be present. A later listener that rewrites or truncates it prevents the observation.
  8. Empty output is accepted only for a complete cat or complete Get-Content/-Raw read of an empty file.

Rejected examples include cat f1 f2, cat -, cat -A, head -c, tail -f, complex or -i sed, npx cat, ssh host cat f, docker exec ... cat f, git show HEAD:f, rg --files, arbitrary Python/Node/awk scripts, redirections, command lists, and more than two pipeline selectors for Bash; and Get-Content -Wait, Get-Content -AsByteStream, Get-Content -Raw | Select-Object ..., Select-String, rg, cmd /c type, path arrays, provider paths, and dynamic paths for PowerShell. These are deliberately outside the low-complexity trusted whitelist.

Configuration

Set fields under the plugin row's config in the profile patch:

- id: fs-observation-bridge
  name: 'dsh-fs-observation-bridge'
  config:
    maxSourceBytes: 8388608
    maxEvidenceFiles: 200
    disabledSources: []
FieldDefaultMeaning
maxSourceBytes8388608 (8 MiB)Largest file read to verify evidence; larger files are skipped (no authorization).
maxEvidenceFiles200Largest number of files validated from one tool result.
disabledSources[]Built-in source ids to disable, for example [codegraph], [shell-read], or [powershell-read]. An unknown id fails activation.

Installation

Install this package as a DSH bundle from the Plugin Manager (plugin_manager, action install_bundle, target: the absolute path of this package). The bundle declares dsh.bundle.patch, inserts one fs-observation-bridge row, and leaves the stock fs-observation-policy enabled.

Adding a Source

Sources are built into the project rather than registered at runtime. Adding one is a focused contribution:

  1. Add lib/sources/<tool>.js exporting { id, accepts, extract, resolveRoot? }.
  2. extract(invocation) returns an evidence array. Snippet-based items are { path, root?, snippets: [{ text, startLine?, endLine? }] }; exact-output items are { path, expectedStdout, verify(content), stable, permitEmpty }. verify must replay the source's visible output from current file content.
  3. Register the source in createSourceRegistry([...]) in lib/index.js.
  4. Add parser and evidence tests; the bridge core and transports need no change for a new source of an existing transport.

A source that cannot provide verifiable output simply never authorizes an edit.

Contributing

Issues and pull requests are welcome, especially contributions that add support for additional code-reading tools.

  • Source Adapters: Integrate new code-reading tools such as Graphify or Serena.
  • Transport Adapters: Support input mechanisms beyond MCP, CLI, shell-read, and native DSH tools.
  • Testing & Improvements: Improve compatibility, concurrency safety, and read verification.

All contributions should preserve DSH's native file observation and editing safety semantics.

License

MIT.