Back to home

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.

ParameterTypeNotes
pathstring, requiredA relative path resolves against the calling agent's session workspace, not the server's launch directory.
limitintegerDefaults 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)

License

MIT