wendi-lok/dsh-file-explorer
File directory card in the DeepSeek Harness Web left sidebar: tree browsing with arrow expand, drive-selection page, interactive breadcrumbs, full-screen toggle that tracks the sidebar width.
项目介绍Project Overview
dsh-file-explorer 是 DeepSeek Harness 的 Web GUI 插件,在左侧工作区加入文件目录树。它提供侧栏底部开关、半高/全高卡片、目录展开与进入、单击文件用系统打开、磁盘选择、可滚动面包屑、路径编辑、刷新、显示隐藏文件及跟随会话,并随侧栏宽度调整。需要在网页内浏览本机文件时使用。注意需手动安装到 profile 并配置 cordis.patch.yml,主机路由仅接受 POST JSON。
dsh-file-explorer is a DeepSeek Harness Web GUI plugin that adds a file directory tree to the left workspace. It provides a sidebar footer toggle, a half-height or full-height card, inline tree expansion, folder entry, OS file opening, drive selection, scrollable breadcrumbs, path editing, refresh, hidden-file display, session following, and sidebar-width tracking. Use it to browse local files from the web UI. Caveat: it requires manual profile installation and cordis.patch.yml configuration; the host route accepts only POST JSON.
请帮我了解并安装插件:【dsh-file-explorer】【https://github.com/wendi-lok/dsh-file-explorer】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:wendi-lok/dsh-file-explorer
把 wendi-lok/dsh-file-explorer 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-file-explorer
A DeepSeek Harness Web GUI plugin that shows a file directory tree in the left workspace area.
What it adds
- A 文件目录 / File Explorer toggle button at the bottom of the left sidebar (
sidebar.footer.action). - A bottom-anchored card that slides up the left sidebar (non-linear easing):
- half-height by default (just past the middle); a top bar with a full-expand button covers the whole sidebar, plus restore and close;
- tree browsing: click a row's arrow to expand/collapse subdirectories inline, double-click a folder name to enter it, single-click a file to open it with the host OS;
- a drive-selection page ("此电脑") — "up" from any drive root lands there, so you can switch disks;
- a full interactive breadcrumb path chain (wheel-scrollable when it overflows), plus home / up / path editing / refresh / show-hidden / follow-session;
- clicking the blank sidebar area above the half card collapses it;
- the card's right edge tracks the sidebar column (ResizeObserver + direct DOM write), so dragging the sidebar handle resizes the card with it.
It is fully additive: nothing shipped is shadowed; closing the panel restores the normal session browser.
Architecture
| Half | File | Role |
|---|---|---|
| Host | lib/index.js |
Cordis plugin registering the exact route POST /plugins/file-explorer/fs: one directory level with files and directories (name-sorted, hidden-flagged) plus the {op:"drives"} drive-selection listing. The shipped host.listDirectory wire only returns directories, so this route exists. |
| Browser | lib/client.js |
Hand-authored window.__ModuleLoader__.load bundle (no build step): registers the footer toggle + overlay card, renders the tree / drives page / breadcrumbs, fetches listings from the host route. |
Install into a profile
Make the package resolvable from the profile (Node walks
$DSH_HOME/profiles/<name>/node_modules→$DSH_HOME/profiles/node_modules→ …). A junction into this repo works:New-Item -ItemType Junction -Path "$env:DSH_HOME\profiles\node_modules\dsh-file-explorer" -Target D:\Codes\dsh-file-explorerAdd a row in the profile's
cordis.patch.yml:- insert: - id: file-explorer name: dsh-file-explorerRestart the profile (
dsh web) and refresh the page. The browser bundle is picked up by the client-modules scan; subsequent edits tolib/client.jshot-reload through the HMR poll without a server restart.
Development notes
- Client slot targets:
sidebar.footer.action(list, additive) andshell.overlay(list, additive); both are root-scoped, declared by the shippedui-sidebar/ui-layoutentries. - The host route only accepts
POSTwithcontent-type: application/json(cross-origin pages are forced into a CORS preflight the server never answers — the same fence the/apigateway relies on).
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS