mabaoguo9527/dsh-file-explorer0

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.

包名
dsh-plugin-file-explorer
版本
0.1.2
许可证
MIT
最近更新
2026年9月10日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:mabaoguo9527/dsh-file-explorer

使用方式

操作结果
点击目录行展开或收起该层,首次展开时才读取
点击文件行选中它,底部显示它相对工作目录的路径
筛选文件…按名称过滤已加载的层级;目录仍可继续展开
重新读取根目录以及所有已展开的层级
标题行的箭头把面板收起到只剩标题行,或再次展开
拖动上边缘调整高度;不会超过侧边栏脚部,也不会低于 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 覆盖——宿主半针对真实临时目录运行(列举、越界拒绝、 404405),浏览器 bundle 会被实际求值并断言其两处注册;另外还把 package.json 与内置 dsh.client 解析器的规则做了交叉核对(dsh-client-modulesplatform 必须是 字符串、Loader row 名必须是裸包名、exports["./client"] 必须是字符串或 { default: string }、 不得声明 external 请求)。

  • profile 插件包已在隔离实例(独立 DSH_HOME)上、对本包进入 dsh.profile.bundles 的真实服务端做了端到端验证:组合树里有 file-explorer 行; 路由返回 200 与正确目录列表(越界路径 400、不存在 404、非 GET 405); 浏览器 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 圆角。