dsh-files-manager
DeepSeek Harness(DSH)Web 界面的文件管理插件。在右侧栏增加一个页签,用来浏览、排序、上传和下载会话工作区里的文件。
English | 中文
功能
- 树形表格:显示文件名(含扩展名)、修改时间、大小。跟随 DSH 的浅色和深色主题,窄栏时自动调整。
- 排序:可按名称、修改时间、大小排序。每个文件夹各排各的,不会把不同文件夹的文件混在一起;文件夹始终在文件之前。名称按首字母排序,中文按拼音首字母。排序选择会被记住。
- 下载:单个文件(保留原名,支持断点续传)、多选、整个文件夹都可以。多选和文件夹边读边打包成 ZIP,大小不受服务器和浏览器内存限制,已用 2 GB 测试。
- 多选:复选框、按住 Shift 连选、全选本层。选择栏显示文件数和总大小。
- 上传:可传文件或整个文件夹,可用菜单,也可拖到面板或某个文件夹上。分块上传(8 MiB),有进度、速度和取消按钮,网络出错自动重试,遇到同名文件会询问。保留原文件的修改时间。
- 管理:新建文件夹、重命名、删除,输入名称时即时校验。
- 点击文件,用 DSH 自带的预览打开。
安装
dsh plugin --profile web add github:NoelJudeNoel/dsh-files-manager
如果 pnpm 提示 ERR_PNPM_ADDING_TO_ROOT,加上 -w:
dsh plugin --profile web add -w github:NoelJudeNoel/dsh-files-manager
然后重启 dsh web。打开右侧栏,在开始页选择文件管理,或者点自带“文件”页签标题栏里的管理。
需要 Node.js 22.5 或更高版本。已在 DSH 0.2.1-rc.2 上测试。没有运行时依赖。
配置
可选,写在 profile 的 cordis.patch.yml 里:
- id: files-manager
config:
maxUploadBytes: 10737418240 # 单个上传文件的上限,默认 10 GiB
安全
- 所有操作都限制在会话的工作区内。工作区根目录取自宿主的会话记录,不取自请求。
- 路径既做字面检查,也在解析符号链接后再检查。指向工作区外的链接不显示详情,下载时跳过。
- 工作区根目录不能删除或重命名。
- 请求走 DSH 的认证连接,且要求是所有者身份。下载使用绑定会话的短期凭证(10 分钟)。
- 上传先写临时文件,完成后再改名,不会出现写了一半的文件。
需要了解的行为
- 按大小排序时,文件夹按直接子项数量比较,因为每次列目录都递归计算大小在大目录上会很慢。选中内容的总大小显示在选择栏。
- 页面可见时每 15 秒刷新一次列表,每次操作后也会刷新。
- 符号链接、套接字等特殊文件不进压缩包,状态栏会提示跳过了多少个。
HTTP 接口
两条路由都经过 DSH 的连接认证。
| 路由 | 用途 |
|---|---|
POST /api/files-manager?sessionId=&op= |
list、mkdir、rename、delete、conflicts、measure、prepare、upload、upload-abort |
GET /api/files-manager/download?sessionId=&ticket= |
按 prepare 签发的凭证流式下载文件或 ZIP;单文件支持 Range |
开发
npm test # 需要 python3,用标准 ZIP 读取器校验压缩包
试本地改动:dsh plugin --profile web add -w /path/to/dsh-files-manager。
许可
MIT