前言¶
在 DeepSeek Harness(DSH)的 Web GUI 中查看项目文件树时,逐个下载文件需要反复点击或打开外部工具。本地开发中,几百 MB 的文件往往需要完整缓存才能下载,增加了内存开销。本文介绍的插件通过在每一行文件右侧添加 ↓ 下载按钮,将文件按原文件名直接流式下载,无需在页面缓冲。
插件定位¶
- 名称:yingblock/dsh-plugin-files-download
- 维护者:Yingblock
- 分类:客户端
- 核心功能:在 DSH Web GUI 文件树的每一行文件上增加下载按钮,点击后通过 Host 路由流式下载,支持大文件且不占用页面内存。
安装与启用¶
插件以预构建 JavaScript 打包,无需构建步骤。
- 从 GitHub 直接安装:
dsh plugin --profile web add github:Yingblock/dsh-plugin-files-download
- 或从本地路径安装:
dsh plugin --profile web add /path/to/dsh-plugin-files-download
- 或在
cordis.patch.yml中手动添加:
- insert:
- id: files-download
name: dsh-plugin-files-download
安装后重启 dsh web。浏览器端需要硬刷新(Ctrl+Shift+R)以加载新的客户端图。
卸载¶
dsh plugin --profile web remove dsh-plugin-files-download
使用方式¶
- 打开右侧 Sidebar 的 Files 标签页。
- 每行文件右侧显示
↓控制,始终可见;目录行无控制。 - 点击控制,浏览器会以文件原文件名保存到磁盘。
架构说明¶
插件分为 Host 与 Browser 两半:
- Host:
lib/index.js,在连接认证范围内注册GET|HEAD /api/workspace-file.download?sessionId=…&path=…。根据 Session 的 workspace root 查找文件,校验路径有效性,然后通过ctx.workspaceFiles以 1 MiB 窗口流式输出,响应头包含content-disposition: attachment。 - Browser:
lib/client.js,向文件树的sidebar.right.files.row.actions填充一个<a download>,由浏览器下载管理器接管进度与取消。
文件树本身由 @deepseek-ai/dsh-client-ui-sidebar-files 定义,本插件仅填充该插槽。
要求¶
- DSH 版本:任何声明了
sidebar.right.files.row.actions插槽的构建(ui-sidebar-files)。 - Node:>= 22(Host 使用
AbortSignal.any和 WHATWGReadableStream)。 - 浏览器:任意现代浏览器;下载为普通导航,不依赖客户端专属 API。
验证¶
- 服务器端验证未认证请求返回 401:
curl -s -o /dev/null -w '%{http_code}\n' \
'http://127.0.0.1:3080/api/workspace-file.download?sessionId=x&path=y'
-
认证后,正常文件返回 200 并流式输出字节;参数缺失返回 400;未知会话返回 404;文件不存在或非常规文件返回 404 或 422。
-
浏览器控制台可检查诊断对象:
JSON.stringify(globalThis.__DSH_FILES_DOWNLOAD__)
// {"apply":true,"registered":true,"renders":9,"version":"single-seat"}
renders 为当前渲染的文件行数。
限制¶
- 仅支持文件下载,不支持目录或打包下载。
- 路由基于当前 Session 的 workspace root,冷会话会回退到持久层 header-only stat。
- 下载权限与
ctx.fs一致,可下载文件树可读的路径。 - 保存名称为文件自身的 basename,由浏览器处理非法或冲突的名称。
- 控件设计为始终可见,如需改为悬停显示,需在树组件样式表恢复
.actions { opacity: 0 }并添加.item:hover .actions规则。
许可证¶
MIT,详见 LICENSE。
参考资料¶
- GitHub:https://github.com/Yingblock/dsh-plugin-files-download
- SkillHub 目录页:https://www.skillhub.cn/plugins/Yingblock/dsh-plugin-files-download