前言¶
DeepSeek Harness(DSH)右侧 Sidebar 的文档预览会把文件「渲染成界面」:表格变成网格、PDF 变成分页、图片变成像素。当你不在 Host 本机前——用手机、另一台笔记本,或通过 Tailscale 连到同一台 Host——往往拿不到原始文件:预览区没有下载动作,标题栏里常见的 Open 是在 Host 上用原生程序打开,屏幕并不在你这边。
有人会用 /api/file 凑合,但该路由返回文件自身的 Content-Type 且不带 Content-Disposition,浏览器会继续内联展示;体积还受图片附件上限(约 20 MB)约束,稍大的工作簿或扫描 PDF 会顶到天花板。
下面介绍社区插件 dsh-file-download(维护者 wilsonchengassistant,分类:联网工具)。它在 Host 上增加带鉴权的流式附件路由,并在文档预览标题栏与「无法预览」空状态里加入下载控件,让远端浏览器按原名保存 Sidebar 里能预览或不能预览的各类文件。
这是什么¶
dsh-file-download 是 profile 本地的 DSH 插件(当前 package 版本 1.0.0,MIT 许可证),目标很明确:把 Sidebar 正在预览(或无法预览)的 Host 侧文件,以附件形式下载到你当前使用的浏览器里,支持 PDF、XLSX、DOCX、图片、HTML、文本,以及没有渲染器接管的二进制文件。
插件不经过对话上下文拉取文件内容,也不在浏览器里先整文件缓冲再保存;下载链路由 Connection 载体与 /api 下其它接口共用同一套鉴权边界。
核心功能¶
Host:/api/file-download¶
新增 GET/HEAD /api/file-download?path=<绝对路径>(实现为单文件模块),行为要点如下:
- 以 1 MB 分块流式输出,不整文件读入内存,也不套用图片附件体积上限。
- 始终返回
Content-Disposition: attachment,含 ASCII 回退名与 RFC 5987 的filename*,非 ASCII 文件名(例如投資計劃_2026.xlsx)可按真实名称保存。 - 支持
Range/206/Content-Range/416,中断后可续传。 - 使用
Content-Type: application/octet-stream与nosniff,避免被浏览器当成文档内联打开。 - 路由挂在
/api下,handler 执行前经过与/api/file相同的鉴权与信任边界。
浏览器:两个扩展点上的 Download¶
客户端半部分在两个已有插槽注册控件(依赖 @deepseek-ai/dsh-client-ui-sidebar-documentpreview 声明的 slot;若未来 DSH 改名 slot,启动时会报错而非静默失效):
sidebar.right.tab.document.actions:文档预览标题栏,与各渲染器共用,PDF、XLSX、DOCX、图片、HTML、Markdown、文本等预览均会出现下载入口。sidebar.right.tab.document.unpreviewable:无法预览时的空状态;原版只有 Open,插件在其上方提供带文案的 Download file 按钮。
两者均为普通 <a download> 链接,中键打开或「链接另存为」同样可用。
本地化¶
插件自带英文与简体中文词条,随应用语言设置切换。繁体中文由独立语言包 dsh-zh-hant 从各插件的 zh 表派生;本插件刻意不单独注册 zh-Hant 词典(与 pack 的注册顺序冲突)。未安装该 pack 时,繁体界面会回退到简体文案,属 pack 文档说明的回退行为。
兼容性¶
README 记载在 0.2.0-rc.2 下已验证(headless Chrome、dsh web)。package.json 中 engines.node 要求 >=22。
安装与启用¶
插件尚未发布到 npm,需以本地路径加入 profile。官方 README 给出的方式为:
dsh plugin --profile web add file:/absolute/path/to/dsh-file-download
也可手动写入 profile 的 package.json:
{
"dependencies": { "dsh-file-download": "file:/absolute/path/to/dsh-file-download" },
"dsh": { "profile": { "bundles": [/* … */, "dsh-file-download"] } }
}
然后安装依赖并 重启 Host(dsh web 在启动时构建客户端模块图,浏览器半部分只有重启后才会出现):
cd "$DSH_HOME/profiles/web" && pnpm install
# restart dsh web
安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH Host 进程权限访问文件系统,只应安装你信任的来源。
典型用法¶
Host 运行后,按 README 的手动检查步骤操作:
- 在右侧 Sidebar 的 Files 标签打开一个 PDF 或 XLSX。
- 点击预览标题栏的下载图标;或打开
.zip等无法预览的文件,在空状态点击 Download file。 - 文件应进入当前浏览器的下载目录,文件名与 Host 侧一致;可用校验和与 Host 副本对比。
仓库提供单元测试(22 项,覆盖头编码、Range 语义、路由守卫与两个 UI 组件):
npm test
README 还记录了端到端实测:28.6 MB MP4、带中文文件名的 Markdown、XLSX、ZIP 等经路由与浏览器下载后 SHA-256 与 Host 文件一致——可作为大文件与中文文件名的参考,而非通用 SLA。
适用场景与注意¶
适合谁: 经常通过 dsh web 远程查看 Host 工作区文件、需要在 当前浏览器 留底副本的开发者或运维;尤其当预览够用但 Open 只会动 Host 本机、或 /api/file 无法满足附件与体积需求时。
注意:
- 下载 URL 带绝对路径查询参数,安全依赖 DSH
/api鉴权;勿在不可信网络暴露未保护的 Host。 - 仅扩展 Sidebar 文档预览相关 UI,不改变对话或其它面板的文件策略。
- 社区插件目录(SkillHub 等)与 DeepSeek / 幻方无官方从属关系,安装与审计责任在使用者一侧。
结尾¶
dsh-file-download 用一条流式附件 API 和两个 Sidebar 插槽,补上「预览在远端、文件却在 Host」时的保存路径;实现细节与测试说明以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/wilsonchengassistant/dsh-file-download
- GitHub:https://github.com/wilsonchengassistant/dsh-file-download