DeepSeek Harness plugin

dsh-dir-tree

浮窗工作区目录树插件:拖拽路径、懒加载、搜索。Floating workspace directory-tree with drag-drop paths.

Jump to install

Source facts

Repository
bentong-chain/dsh-dir-tree
Latest update
Aug 20, 2026
Category
Tools & Capabilities
GitHub stars
2
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/bentong-chain/dsh-dir-tree
Plugin: dsh-dir-tree
Author: bentong-chain

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer4 files
README.en.mdSource · read only
README language

dsh-dir-tree

简体中文 | English

> A DeepSeek Harness (DSH) floating workspace directory-tree plugin: drag-and-drop file/folder paths into the chat box, lazy loading, search, file-type icons, and auto-follow when switching workspace/session.

> 📚 Full three-form showcase repo (install & internals comparison of dynamic / persistent / standard bundle): dsh-plugin-dir-tree

Features

  • 📁 Floating directory tree of the current session's workspace, minimizable at the bottom-right corner
  • 🌲 Lazy loading: click to expand subdirectories; large directories stay responsive
  • 🖱️ Drag files/folders into the chat box; the full path is filled in automatically
  • 📋 Double-click to copy a path; single-click to select
  • 🔍 Search filter for file names
  • 🎨 File-type icons + directory 📁/📂 blue highlight + indented tree lines
  • 🔄 Switches workspace/session and the tree follows automatically
  • 🪟 Draggable floating window position

Screenshots

Main UI (floating window + directory tree)

![Main UI](docs/screenshot-main.png)

The floating window "📁 Current Workspace" sits in the bottom-right corner: the full path on top, the tree below — directories in blue with a 📁 icon and a expand arrow, files with type icons.

Drag a path into the chat box (animation)

![Drag demo](docs/drag-drop.gif)

Drag any file/folder node into the chat input box; the full path is filled in automatically.

Lazy-load expansion (animation)

![Lazy load](docs/lazy-load.gif)

Click the of a folder to expand its children; only the current level is loaded, so large directories stay responsive.

Minimize / Restore

![Minimize](docs/minimize.gif)

Click or × to collapse the window; a blue "📁 Directory Tree" button appears in the bottom-right corner. Click it to restore.

Installation

This is a standard bundle for DSH — install with dsh plugin add, with no source checkout, no editing of built-in packages, and no Creator mode.

0. Install/run DSH (pick one)

Option A: Global install (recommended for daily use)

npm install -g @deepseek-ai/dsh

Option B: Run temporarily with npx (no install, occasional trials)

npx @deepseek-ai/dsh web
Option A: Global installOption B: npx temporary run
Installed to the system?Yes, permanentlyNo, downloads and runs on demand
Command formdsh ... (available directly)npx @deepseek-ai/dsh ...
First startFastSlower (downloads the package first)
VersionPinned to the globally installed version (manual updates)Usually the latest on npm
Use caseDaily useOccasional trials, keep the environment clean

> Both share the same $DSH_HOME (default ~/.dsh) and profile directory — plugins/sessions/config are fully interchangeable, so this doesn't affect the plugin install below.

1. Install the plugin

Option 1: Install from npm (recommended — no authorization needed)

The plugin is published on npm, one command:

dsh plugin --profile web add dsh-dir-tree

Option 2: Install from git (no npm publish involved)

dsh plugin --profile web add github:bentong-chain/dsh-dir-tree

On first install you'll be prompted to add a build authorization to pnpm-workspace.yaml in your profile:

allowBuilds:
  dsh-dir-tree: true

Copy it and re-run dsh plugin --profile web add github:bentong-chain/dsh-dir-tree.

2. Start DSH (web UI)

dsh web is a hard-coded alias of dsh --profile web — fully equivalent; all three spellings start the same web profile (~/.dsh/profiles/web):

# Option A: after global install (recommended)
dsh --profile web        # or the equivalent alias: dsh web

# Option B: temporary npx run (equivalent to above)
npx @deepseek-ai/dsh web

> No matter how you start it, the plugin loads normally — startup method doesn't matter.

Usage

1. After starting DSH (dsh --profile web / dsh web / npx @deepseek-ai/dsh web), the "📁 Current Workspace" floating window appears in the bottom-right corner 2. Click a folder's to expand its subdirectories 3. Drag files/folders into the chat input box to fill in the full path 4. Double-click to copy a path; use the search box to filter; click /× to minimize; restore via the bottom-right button

Structure

dsh-dir-tree/
├── package.json       # dsh.bundle + dsh.client + prepare build script
├── cordis.patch.yml   # inserts the plugin row
├── index.js           # Host half (connection.rpc.handle + node:fs directory listing)
├── client.js          # Client half source (floating UI + connection.rpc.call)
├── client.bundle.js   # build output (generated by prepare, not committed)
├── build.mjs          # prepare script: esbuild bundling of client.js
└── docs/              # README screenshots (main UI/drag/lazy-load/minimize)

Technical Notes

  • RPC: uses ctx.connection.rpc (a Client→Host channel available to third parties); no api-remotes, no Typert code generation.
  • Workspace tracking: the Client half reads the current session's cwd from ctx.sessions and passes it to the Host; it refreshes reactively when the workspace/session switches.
  • Directory detection: the Host uses node:fs's readdir({ withFileTypes: true }) to get Dirent.isDirectory() directly — no per-entry stat, so large directories stay responsive.
  • ⚠️ exports must include ./package.json: client-modules locates packages with require.resolve('<pkg>/package.json'); if an exports field is defined, any subpath not listed fails to resolve and the client half is silently skipped (no error, never reaches window.__DSH_BOOT__). Always include "./package.json": "./package.json".
  • ⚠️ The Client half must import React from 'react': in a persistent client bundle, React is not a global — it must be fetched from the browser module table via require('react') (react is one of the platform modules); referencing a global React throws ReferenceError at apply time.

License

MIT