DeepSeek Harness plugin

dsh-file-browser

DSH plugin: right-side whole-disk file browser panel with name/size/mtime sorting and drag-into-chat

Jump to install

Source facts

Repository
Clearchenpro/dsh-file-browser
Latest update
Aug 16, 2026
Category
Tools & Capabilities
GitHub stars
1
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/Clearchenpro/dsh-file-browser
Plugin: dsh-file-browser
Author: Clearchenpro

Check the source files

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

File explorer3 files
README.mdSource · read only

dsh-file-browser

DSH(deepseek-ai/deepseek-harness)插件:在聊天界面右端加一个全盘文件浏览栏

  • 逐层浏览所有盘符(Windows 枚举 A:Z:,POSIX 为 /)与主目录,面包屑导航
  • 名称 / 大小 / 修改时间 排序,支持升/降序,文件夹默认分组置顶
  • 服务端流式扫描 + 有界 Top-K 截断(默认每层 1000 条),大目录不卡顿
  • 拖文件进聊天框

- 图片(png/jpg/jpeg/gif/webp,≤ readMaxBytes)→ 变成真正的图片附件 - 其他文件/目录 → 在草稿中插入绝对路径(反引号包裹)

  • 行内快捷操作:插入路径 / 直接发送路径给 Agent / 复制路径 / 用系统默认应用打开
  • 会话头部“文件”按钮开合面板;面板可拖宽(280–560px)
  • 文案中/英双语(通过 harness locale 服务注册 file-browser 命名空间,无服务时回退中文)

兼容性

按 harness **@deepseek-ai/*@0.1.0-rc.6** 的实际 API 编写(slot 插槽 shell.overlayconversation.session.header.actionsctx.webServer 路由;dsh.client 客户端插件机制)。

安装(在你的目标环境执行)

推荐用 file: 协议安装,保证依赖提升进 profile(link: 会让 ESM 从插件工程 目录解析依赖,工程自身没有 node_modules 时会报 Cannot find package '@deepseek-ai/schemastery'):

dsh plugin --profile <目标profile> add "dsh-file-browser@file:<本目录绝对路径>"
# 或先 pnpm pack,再安装 tarball(依赖同样提升进 profile)
dsh plugin --profile <目标profile> add ./dsh-file-browser-0.1.0.tgz

dsh plugin --profile <目标profile> list          # 应看到 dsh-file-browser
dsh --profile <目标profile> --dump-config        # 应看到 file-browser 行
dsh --profile <目标profile>                      # 重启后生效(已运行的实例需重启)

开发期用 --patch 指向构建产物时注意:源码路径条目没有可解析的 package.jsonclient 半不会加载;本地联调 client 半请用上面的 dsh plugin add

配置(cordis.yml,全部有默认值)

- insert:
    - id: file-browser
      name: dsh-file-browser
      config:
        maxEntries: 1000          # 单层返回条目上限(隐藏项计入)
        statConcurrency: 32       # 扫描时并发 stat 数
        readMaxBytes: 16777216    # 拖入图片的字节上限(16 MiB)
        allowedRoots: []          # 空 = 全盘;非空 = 只允许这些根(如 ["C:\\work"])
        trustedHosts: []          # 除 loopback 外额外信任的 Host,如 ["192.168.1.20"]
        defaultPath: ""           # 面板初始目录;空 = 用户主目录

HTTP API(host 半,只读 GET + JSON)

| 路由 | 说明 | |---|---| | GET /file-browser/roots | { roots, home, defaultPath } | | GET /file-browser/list?path=...&sortKey=name\|size\|mtime&direction=asc\|desc | { path, crumbs, entries, truncated, total } | | GET /file-browser/read?path=... | { name, path, size, base64 }(普通文件,≤ readMaxBytes) |

错误统一 { code, message, path? }。安全:该路由不在 /api 信任围栏内,因此自守 Host 头 loopback 校验127.0.0.1/localhost/[::1],可用 trustedHosts 扩展),只接受 GET、不设 CORS、Cache-Control: no-store

开发与测试

npm run build    # 零依赖构建:host ESM 复制到 lib/,client 包 __ModuleLoader__ 壳
npm test         # node --test,15 个用例(含执行构建产物 client.js 的冒烟测试)

目录

src/index.js         host 入口(Config schema + /file-browser 路由注册)
src/fs.js            roots / 排序截断列表 / base64 读取(纯函数,可单测)
src/http.js          路由 handler(Host 校验、参数校验、错误映射、abort)
src/client/index.js  client 单文件 bundle 源(面板/按钮/拖拽/草稿写入)
scripts/build.mjs    构建脚本
types/               手写 d.ts

为什么不是 TS + esbuild

计划阶段原定 TS + esbuild;实施时发现 npm registry 上的 dsh 类型包只发布到 0.0.1-rc.1,而 harness 实际运行 0.1.0-rc.6,按 npm 类型编译会得到错误的 API 契约。最终改为 host 纯 ESM JS + client 手写 module-loader bundle (与本机已装外部插件 @dsh-external/dsh-plugin-tts 同款落地方式),零构建依赖, 产物直接适配 rc.6;types/ 提供手写 .d.ts 供消费者类型检查。

已知限制

  • 仅对 web 版 harness 有意义,且浏览的是 host 进程所在机器 的磁盘。
  • 单层截断:超出 maxEntries 时按当前排序保留最靠前的条目,请用排序/导航缩小范围。
  • 目录大小不递归统计(显示 ),目录在大小排序时按名称排。
  • 隐藏文件按 dot 前缀判断(与 harness 既有约定一致),面板内可开关显示。
  • 拖拽默认把路径写进草稿,而不是把任意二进制上传为附件(DSH 会话只有图片附件

语义;其他文件由 Agent 的 fs 工具按路径读取)。

  • 若 harness 以 LAN 地址访问且 Host 头不是 loopback,需在 trustedHosts 中列明,

否则该面板返回 403(这是刻意的 DNS-rebinding 防护)。

验收清单(目标环境)

1. --dump-config 出现 file-browser 行,启动日志无 FAILED。 2. 会话头部出现“文件”按钮,点击后右端出现文件栏。 3. 盘符/主目录芯片、面包屑、上/下级导航正常。 4. 名称/大小/时间排序与升降序正确;大目录出现截断提示且不卡。 5. 拖 txt/py → 草稿插入 ` 路径 `;拖 png → 出现图片附件;无会话时拖拽有提示。 6. 行内“发送”按钮 → Agent 收到路径消息;“复制”“打开”可用。 7. 面板宽度可拖,刷新/隐藏文件开关生效,关闭面板不丢排序偏好。