mabaoguo9527/dsh-file-explorer ↗★ 0
dsh-plugin-file-explorer
Workspace file explorer docked in the DeepSeek Harness sidebar: a lazy directory tree of the current session's working directory, a Settings on/off switch, and drag-to-resize.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:mabaoguo9527/dsh-file-explorer说明文档
阅读完整 README ↗使用方式
| 操作 | 结果 |
|---|---|
| 点击目录行 | 展开或收起该层,首次展开时才读取 |
| 点击文件行 | 选中它,底部显示它相对工作目录的路径 |
筛选文件… | 按名称过滤已加载的层级;目录仍可继续展开 |
↻ | 重新读取根目录以及所有已展开的层级 |
| 标题行的箭头 | 把面板收起到只剩标题行,或再次展开 |
| 拖动上边缘 | 调整高度;不会超过侧边栏脚部,也不会低于 120px |
| 设置 → 通用 → 文件浏览器 | 整块开关 |
标题行显示工作目录的末级目录名,悬停可看到绝对路径。
面板在运行中的应用里就是这样一块:
配置
插件不接受任何插件配置。它唯一的偏好就是那个开关,而且该状态刻意保持在内存中:
它存在于插件 fiber 里,插件(重新)加载时重置为开,不会写入 settings.yaml。动态插件
本身就是进程内的,而一个布尔值不值得单开一个 settings 命名空间,所以这个开关是有意做成
会话级的。
高度同理,保存在内存中,重新加载后回到默认高度。
3. 若 profile 使用 patchReload: startup,重启 dsh web
动态插件方式则在侧边栏 `设置` 上方的 Cordis 面板里停止或移除该插件。
## 开发
dsh-file-explorer/ ├── lib/ │ ├── index.js # 宿主半 —— 目录列举路由 │ └── client.js # 浏览器半 —— 停靠面板与设置行 ├── cordis.patch.yml # 挂载插件的 composition 行 ├── dynamic-plugin/ # 同一功能的单会话动态插件版 ├── test/ # node:test 冒烟测试(不需要浏览器) └── .github/workflows/ # CI:语法检查 + 测试
**没有构建步骤**:`lib/client.js` 本身就是 bundle,直接按客户端模块系统提供的格式编写。
检查命令:
```sh
npm run check # 对两半执行 node --check
npm test # node:test 冒烟测试
验证状态
-
动态插件版本已在
0.1.5-rc.1的真实 Web GUI 中端到端使用过:加载目录、展开、 筛选、设置开关、宽度跟随与拖动调整高度。 -
profile 插件包由
npm test覆盖——宿主半针对真实临时目录运行(列举、越界拒绝、404、405),浏览器 bundle 会被实际求值并断言其两处注册;另外还把package.json与内置dsh.client解析器的规则做了交叉核对(dsh-client-modules:platform必须是 字符串、Loader row 名必须是裸包名、exports["./client"]必须是字符串或{ default: string }、 不得声明external请求)。 -
profile 插件包已在隔离实例(独立
DSH_HOME)上、对本包进入dsh.profile.bundles的真实服务端做了端到端验证:组合树里有file-explorer行; 路由返回200与正确目录列表(越界路径400、不存在404、非 GET405); 浏览器 bundle 由/plugins/??dsh-plugin-file-explorer/client.js正常提供。 要对活的 GUI 迭代开发,把本地检出作为本地依赖安装 (dsh plugin --profile web add /absolute/path/to/dsh-file-explorer),启动命令里保留--patch,改完lib/client.js后刷新页面即可。
参与贡献
欢迎提 issue 与 PR。请保持本插件赖以成立的两条不变量:浏览器半除了基线 react 模块之外
不得依赖任何东西;宿主半必须严格只读,并且被限制在工作目录内。提交 PR 前请先跑
npm run check && npm test。
如果你愿意为这个 README 补一张真实会话里的面板截图,非常欢迎。
许可证
MIT © 2026 mabaoguo9527
致谢
- DeepSeek Harness 以及本插件所接入的 Cordis 插件框架。
- 插件遵循 harness 自身的约定——
apply(ctx)模块、基于座位的 UI 注册、ctx.locale字典、ctx.effect清理——参见官方教程 Your first plugin。 - 面板样式对齐内置工作区浏览器(
ui-workspace)的度量:36px 分区标题行、28px 圆形图标按钮、 28px 行高与 8px 圆角。