dsh-file-resource:DeepSeek Harness Web 的本地文件输入插件

前言

在 DeepSeek Harness Web 里,图片附件有原生流程,文档则没有现成入口。想让模型看一份 PDF 报告或一个 XLSX 表格,常见做法是把文本复制出来粘进输入框:长文档容易被截断,表格结构和排版也会丢失;自己搭一套上传解析管线,又要处理存储、格式支持和上下文占用等问题。

DSH 的理念是「一切皆插件」,文件输入这件事同样可以交给插件。下面介绍的 dsh-file-resource 做的就是这件事:在输入框原有 + 菜单顶部增加 attach 入口,文档在本机解析为会话隔离的私有资源,模型通过一个受限读取工具按需读取。

这是什么

dsh-file-resource 是 DeepSeek Harness Web 的本地文件输入插件,由 liznee 维护,许可证为 MIT。仓库 package.json 中的版本号为 0.4.9,更新日志最新条目为 v0.4.9(2026-08-29)。

它解决的问题可以概括为三件事:

1、给 Web 输入框一个统一入口,图片、文档、文本和常见代码文件都能选;
2、文档在本机解析为会话隔离的私有资源,模型只在需要时通过受限工具读取;
3、每次读取的字符数有默认值和硬上限,上下文占用可控。

核心功能

attach 入口与文件选择

插件不再单独增加一个按钮,而是在输入框原有 + 菜单顶部增加 attach。一个文件选择器同时接收图片、文档、文本和常见代码文件,可多选;也支持全局拖拽(把文件拖到窗口任意位置)和在输入框 Ctrl+V 粘贴文件。

文档以卡片形式显示在圆角输入框内部,显示真实上传进度与本地解析状态;卡片右侧的灰色圆形 × 可取消上传或移除文件。

图片与文档分开处理

图片仍由 Harness 原生的预览、删除、持久化和多模态模型流程处理,插件不接管这条链路。文档解析则完全在本机完成,上传或解析本身不调用模型、无遥测。

@文件名 引用与分栏预览

发送消息(包括只传文件、不输入文字)时,插件自动在消息末尾附上 @文件名 引用:聊天记录里能直接看出这条消息带了哪些文件,模型按文件名对应到资源 ID 再读取。

点击聊天中的蓝色 @文件名,右侧以分栏方式预览文件内容,Excel/CSV 显示带格线的表格,×Esc 关闭。发送过的文件即使已从输入框移除附件卡,本会话内仍可预览。

受限读取工具 read_uploaded_resource

插件固定增加一个读取工具 read_uploaded_resource。模型不是一次性拿到文档全文,而是在需要时调用这个工具;默认每次最多返回 8,000 字符,硬上限 24,000 字符。

支持格式与限制

类别 格式
文档 PDF、DOCX、XLSX、PPTX、ODT、ODS、ODP、RTF、EPUB
文本与代码 常见文本与代码文件

使用前注意两条限制:

  • 旧二进制 DOCXLSPPT 不支持,需先另存为 DOCXXLSXPPTX
  • PDF 只读取文字层,纯扫描件不会自动 OCR。

本地存储与缓存

容量与缓存规则:

  • 单文件上限 50 MiB;单次选择上限 20 个文件、合计 200 MiB。
  • 总缓存上限 1 GiB,按内容 SHA-256 去重;达到上限按 LRU 只清理已发送的旧资源。
  • 已解除引用的对象保留最多 7 天。

默认缓存路径:

$DSH_HOME/resources/dsh-file-resource/v1

未设置 DSH_HOME 时为:

~/.dsh/resources/dsh-file-resource/v1

安全与隐私

  • 浏览器接口要求同源请求与插件专用请求头。
  • 扩展名、声明类型、文件魔数交叉验证,拒绝伪装文件。
  • ZIP/Office 文件做防解压炸弹处理。
  • PDF.js 固定为已修复版本,并关闭脚本与动态求值。
  • 插件不包含统计、遥测或第三方上传;只有用户发送消息后,模型提供方才按正常 Harness 流程收到内容。

安装与启用

环境要求与当前 DeepSeek Harness 一致:Node.js 22.19+24+;README 标注 v0.1.1 已在 DeepSeek Harness 0.1.1-rc.1 上验证。

从 npm 安装:

dsh plugin --profile web add dsh-file-resource

也可以直接安装对应的 GitHub Release:

dsh plugin --profile web add github:liznee/dsh-file-resource#v0.4.9

安装完成后先验证配置是否写入,再重启服务:

dsh --profile web --dump-config

输出中应出现 # == dsh-file-resource。随后重启 dsh web,从输入框左下角的 + 选择 attach

不再使用时卸载:

dsh plugin --profile web remove dsh-file-resource

本地开发与验证

如果修改了源码,可在本地构建并安装:

npm install
npm run build
dsh plugin --profile web add C:\absolute\path\to\dsh-file-resource

仓库自带测试,改动后建议完整跑一遍:

npm test
npm run test:coverage
npm audit --omit=dev
npm run pack:check

典型用法

经过上面的步骤,插件已启用。一次完整的使用流程如下:

1、点击输入框左下角的 +,选择顶部的 attach,一次选择多个文件;也可以把文件拖到窗口任意位置,或在输入框按 Ctrl+V 粘贴。
2、等附件卡片上的上传进度与解析状态完成;期间可用卡片右侧的 × 取消上传或移除文件。
3、正常发送消息,也可以只传文件不写字;消息末尾会自动附上 @文件名
4、点击聊天中的蓝色 @文件名,在右侧分栏查看内容;不需要时按 ×Esc 关闭。

适用场景与注意

适合的场景:经常需要把 PDF、DOCX、XLSX 等文档交给模型,又不想手动复制粘贴文本;希望文档解析留在本机、附件链路上没有遥测。

使用前注意:

  • 插件以当前 dsh 进程的权限运行,安装前建议自行检查源码与许可证(MIT)。
  • 旧格式文件先转换,扫描版 PDF 不会自动识别文字。
  • 发现安全问题请按仓库 SECURITY.md 私下报告,不要在公开 Issue 中披露细节。

小结

dsh-file-resource 做的事情不复杂:把本地文档变成会话内可引用、可预览、模型可按需读取的资源,并把解析过程留在本机。如果你在用 DeepSeek Harness Web 处理文档,值得一试。

  • GitHub 仓库:https://github.com/liznee/dsh-file-resource
  • 社区目录页:https://www.skillhub.cn/plugins/liznee/dsh-file-resource (社区目录为独立站点,与 DeepSeek、幻方无官方从属关系)
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜