Workspace file-tree panel for the DSH web UI: click or drag to insert \[file: path\] references into the composer, styled with native DSH design tokens.
Install
# from npm (prebuilt)
dsh plugin --profile web add @jiyr0119/dsh-workspace-explorer
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Jiyr0119/dsh-workspace-explorer
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A workspace file explorer for the DeepSeek Harness Web UI: a right-side panel showing the current workspace's directory tree — click or drag a file to send its reference to the model.
Inspired by the VS Code / Cursor project tree, filling the gap of a missing directory view in DSH after workspaces are added.
🖥 Live Demo (GitHub Pages)
An interactive mock of the panel UI — no DeepSeek Harness needed to try it. The real plugin runs inside the Harness web UI as a dynamic Cordis plugin.




Features
- 📂 Right-side floating panel — shows the file tree of the current workspace (session cwd); switch workspaces from the dropdown, or register any folder with
+ - 🗂 Lazy-loading tree — directories load on demand; noise dirs (
node_modules,.git,dist,__pycache__, …) are hidden automatically - 🎨 File-type icons — filled, color-coded document badges per extension (TS / JS / Python / JSON / Markdown / image / config / shell, …); amber folders that brighten when expanded
- 🖱 Click to insert — click a file row to append a
[file: relative-path]reference to the composer; after sending, the model resolves it with itsreadtool - 🖱 Drag & drop — drop a file into the composer to insert at the caret (fullscreen dashed hint); dropping elsewhere appends to the end
- 🌓 Theme-aware — built entirely on DSH's
--dsw-alias-*design tokens; adapts to light/dark with a native dialog look (24px radius, lv3 shadow, l3 header rule) - 🔍 Search & filter — filter files by name across loaded directories (flat result list with a match count)
- 👁 Inline preview — peek the first 60 lines of any text file; insert the reference, or paste the full content for small files (≤ 32 KB)
- 🌐 i18n — zh/en dictionaries registered through DSH's locale service; the panel follows the DSH UI language
Quick Start
Installation & usage
Way 1 · Dynamic plugin paste — full UI (recommended) A dynamic Cordis plugin: no build step, no config changes.
- In the DSH web UI, have an agent run
cordis_define(or use the dynamic plugin panel) withidPrefixwsex. - Paste the whole
src/host.jsinto Host code. - Paste the whole
src/client.jsinto Client code. cordis_runto activate; authorize on the Run card when it first appears.- Click the 📁 Files button at the bottom of the sidebar → expand directories → click a file, or drag it into the composer, then send.
Way 2 · npm source package
npm install @jiyr0119/dsh-workspace-explorer — the package ships src/host.js / src/client.js for the Way-1 paste flow, with semver releases.
Way 3 · Storefront (dsh plugin add / dsh-market) — listed, but no UI yet
The repo declares a dsh.bundle manifest so the awesome-dsh-plugin list and dsh-market can list it and offer a one-click install. Such an install mounts the host entry cleanly, but the browser panel does NOT appear yet — the browser half needs the native @Remote bridge (conversion in progress; see docs/native-package.md).
⚠️ Common misconception: a plugin-market listing does not mean the plugin automatically shows up in every user's browser. A listing only lets users browse it and run the install command. Until the native conversion lands, only Way 1 provides the full interactive panel.
See docs/install.md for details.
Usage
- Click the 📁 "Files" button at the bottom of the sidebar to open the panel.
- Expand directories to browse files.
- Click a file, or drag it into the composer, then send.
Project Structure
dsh-workspace-explorer/
├── README.md # Docs — English (default)
├── README.zh.md # Docs — 中文
├── LICENSE # MIT
├── CHANGELOG.md # Release notes
├── manifest.json # Plugin metadata
├── package.json # Repo metadata (not an npm package)
├── demo/
│ ├── index.html # Interactive mock preview (GitHub Pages)
│ └── preview.gif # Demo animation (README)
├── .github/
│ └── workflows/
│ └── pages.yml # Deploys demo/ to GitHub Pages
├── docs/
│ ├── install.md # Install guide
│ ├── native-package.md # Native DSH package roadmap (upstream PR sketch)
│ └── publish.md # Publishing workflow (GitHub + npm)
└── src/
├── host.js # Host half: fs listing + ws-tree.list RPC
└── client.js # Client half: panel + icons + drag & drop
Implementation Notes
| Capability | Mechanism |
|---|---|
| Directory listing | Host fs.resolve / fs.listDir |
| Host→Client RPC | harness.handle('ws-tree.list' / 'ws-tree.peek') ↔ host.call(...) |
| Panel | shell.overlay slot (useWorkspaces / useSessions) |
| Toggle button | sidebar.footer.action slot |
| Composer write | conversation.input.dock → inputActions.setDraft |
| Drag & drop | HTML5 DnD; native caret insert in the textarea, append elsewhere |
| Theming | --dsw-alias-* CSS variables (light/dark) |
Version
Current version v0.1 — first usable release; features and visuals aligned with DSH's native UI. See CHANGELOG.md for release notes.
Roadmap
Done ✅
- v0.1 core: right-side file tree, click / drag-to-composer references, native DSH look
- Search & filter; inline preview (first 60 lines); content insertion for small files (≤ 32 KB)
- i18n (zh/en via the DSH locale service, follows the DSH UI language)
- Demo language toggle, GitHub Pages preview, demo GIF, storefront screenshots
- npm source package +
dsh.bundlecontract + awesome-dsh-plugin PR (#1158, pending merge)
Track A — UX polish
- Multi-select & batch insert file references (Shift / Cmd)
- Draggable / resizable panel that remembers position & width
- Full keyboard navigation (↑↓ to move, Enter to insert, Esc to close)
- Path actions: copy path, reveal in the OS file manager
Track B — Productivity
- Content search across loaded dirs (host-side grep)
- Recent files / favorites
- Paginated preview for large files (next / previous page)
- File operations (rename / delete / new, under the fs permission fence)
Track C — Ecosystem & distribution
- npm
@jiyr0119/dsh-workspace-explorer(v0.1.1 publishing) - awesome-dsh-plugin listing (PR #1158)
- Native DSH package (
@Remotenamespace; needs upstream support) — seedocs/native-package.md - dsh-genie hardened install (host-side persistence)
- CI: lint + e2e + automated release
Track D — Quality & maintainability
- Virtual scrolling (huge directories)
- Light / dark theme regression checks
- Playwright e2e for the demo and the real plugin
License
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 3362
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 1600
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 1519
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/dsh-at-file★ 262
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
huiliyi37/dsh-tianshu-tui★ 190
A terminal UI (TUI) for DeepSeek Harness.
Nagi-ovo/dsh-visualize★ 159
In-conversation generative UI: the model renders interactive HTML cards into the chat stream, with streaming preview and sandboxed rendering.