riesbri
dsh-plugins
Personal DeepSeek Harness plugin bundle: list_dir tool + machine-local config layer
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
dsh-plugins-riesbri
Personal DeepSeek Harness plugin bundle.
Install
dsh plugin --profile web add github:riesbri/dsh-plugins
Or from a local checkout:
dsh plugin --profile web add /path/to/dsh-plugins
dsh plugin appends the bundle to the profile's dsh.profile.bundles, so its layer applies after @deepseek-ai/dsh-base and any mode bundle. Confirm with:
dsh --profile web --dump-config # shows a "# == dsh-plugins-riesbri" layer
Remove with dsh plugin --profile web remove dsh-plugins-riesbri.
This package ships plain ESM JavaScript with no build step, so a github: install needs no prepare script and no pnpm allowBuilds entry.
What it contributes
list_dir
Lists the direct children of a directory — names, types, and sizes only, never file contents.
The harness filesystem seam has exposed ctx.fs.listDir since the beginning with no model-facing Consumer; @deepseek-ai/dsh-tool-fs records the gap under its known limitations as "No model-facing directory listing ships". Without it the model reaches directory structure only through bash ls — unstructured, and subject to whatever shell sandbox the deployment mounts — or through glob, which is pattern-driven rather than hierarchical.
Because it is a Consumer of the seam rather than a shell-out, listing follows whichever filesystem provider the deployment mounted: local, sandboxed, or remote.
| Parameter | Type | Notes |
|---|---|---|
path | string, required | A relative path resolves against the calling agent's session workspace, not the server's launch directory. |
limit | integer | Defaults to 200, clamped to 1000. A truncated listing says so in its last line. |
The tool registers globally, so it reaches every agent regardless of the agent preset a session selects — a preset row of the same name would shadow it, but no shipped preset defines one.
Machine-local configuration
dsh-home/cordis.patch.yml is the home patch layer, symlinked into place:
ln -s "$PWD/dsh-home/cordis.patch.yml" ~/.dsh/cordis.patch.yml
It applies to every profile, after that profile's bundle layers and before any --patch overlay, and is hot-reloaded on save. It currently enables session content search: the base bundle mounts the session-query index with path: ':memory:' and openAt: never, so every full-text call fails SESSION_QUERY_SEARCH_DISABLED and the Web sidebar matches titles and workspace names only. A durable path with openAt: first-search keeps the node:sqlite import and the file handle off the startup path.
Remember that a patch replaces the targeted row's whole config rather than merging into it, so every key the row needs is restated there.
Layout
package.json declares dsh.bundle
cordis.patch.yml the layer applied when a profile lists this bundle
index.js plugin entry: name, inject, apply
src/list-dir.js the tool
dsh-home/cordis.patch.yml machine-local home patch layer (symlinked to ~/.dsh)