跳到正文

taxueseek/dsh-files

51最近提交 2026年8月14日

dsh-files DSH 插件

dsh-files 为 Web UI 添加了文件上传按钮和拖拽区,并以彩色卡片展示真实格式。同时提供 read_document 工具,支持解析文本、PDF、DOCX 和 XLSX 文件,具有内容嗅探、编码检测和分页读取功能。

如何安装 dsh-files DSH 插件

dsh plugin --profile web add dsh-files

复制不会执行命令。安装 dsh-files DSH 插件前请核对仓库和版本。

dsh-files DSH 插件数据来源

dsh-files DSH 插件快照日期:2026年8月16日

discovered

dsh-files DSH 插件能做什么

  • 会话隔离存储:文件位于 `.dsh-filess/<sessionId>/` 下
  • 两种上传入口:工具栏回形针按钮和页面任意位置拖拽
  • 浮动彩色卡片:基于字节嗅探的真实格式着色(PDF 红、DOC 蓝、XLS 绿、TXT 灰)
  • 发送联动:卡片挂载后文件路径自动注入输入框
  • 安全护栏:loopback host、同源检查、sec-fetch-site 校验、文件名消毒、未知会话 403、并发限流(默认 4)
  • 生命周期管理:TTL 清扫(默认 7 天)、可选每会话存储配额
  • 内容嗅探:拒绝伪装文件(如 exe 改 .pdf 后缀),支持 UTF-8、UTF-16、GB18030 编码
  • 分页读取:文本带行号,PDF/DOCX/XLSX 不带行号,XLSX 支持按 sheet 读取
  • 扫描件明示:无文本层 PDF 返回提示而非空字符串
  • LRU 解析缓存(条目数 + 字节预算),文件改动自动失效

dsh-files DSH 插件适合哪些场景

  • 上传 PDF 报告,让模型提取关键结论
  • 拖拽代码文件,让模型分析其逻辑
  • 上传包含多个 sheet 的 Excel 工作簿,查询特定 sheet 数据
  • 上传 Word 文档,将其内容翻译成另一种语言
  • 在一次会话中附加多个文件,每个文件存储在自己的会话工作区中

dsh-files DSH 插件适合谁

  • 需要向对话中附加文件的 DSH Web 用户
  • 在 DSH 中构建需要文件读取能力的 AI 助手的开发者

dsh-files DSH 插件的限制

  • 仅适用于 DSH Web 环境(需要 `ctx.fs` 和会话沙箱)
  • 文档读取仅支持文本、PDF、DOCX 和 XLSX 格式,不支持图片、压缩包等
  • 上传文件默认没有格式白名单,安全依赖会话沙箱隔离
  • 解析依赖的第三方库(pdfjs-dist、mammoth、read-excel-file)可能有限制
  • 插件仍在活跃开发中(57 个单元测试),边缘情况可能未完全覆盖

dsh-files DSH 插件的仓库 README 摘录

以下文字摘自 dsh-files DSH 插件的上游仓库 taxueseek/dsh-files 的 README,版权归原作者,仅作引用。

DeepSeek Harness 双面插件(dual-face plugin):一个包、一行 cordis 配置,为 Web UI 提供「文件上传」与「文档读取」两项能力。 - **上传**:输入框工具栏回形针按钮,文件以浮动彩色卡片呈现,发送时自动把路径附入消息;按会话隔离存储到 `<会话工作区>/.dsh-filess/<sessionId>/`,TTL 定期清扫,sha256 内容去重 - **文档读取**:`read_document` 工具读取文本 / PDF / DOCX / XLSX,内容嗅探判定真实格式(不信任扩展名),大小预检,LRU 解析缓存 ## 功能 ### 上传 - 会话隔离存储:文件落在发起会话自己的工作区 `.dsh-filess/<sessionId>/` 下,agent 的 fs 后端一定能读到;会话之间互不可见 - 两种入口:输入框工具栏回形针按钮选择,或直接把文件拖到页面任意位置(拖拽悬停有遮罩提示);多文件横排 - 浮动彩色卡片:按**字节嗅探的真实格式**着色(PDF 红 / DOC 蓝 / XLS 绿 / TXT 灰),伪装文件(exe 改 .pdf)不按扩展名显示;文件名、大小、移除按钮 - 发送联动:卡片挂载后文件路径自动注入输入框,随消息发出 - 安全护栏:loopback host + same-origin + sec-fetch-site 三重校验;文件名消毒(控制字符、路径分隔、点段、前导点全部剥离,并按 UTF-8 字节截断,长中文名不触发 ENAMETOOLONG);未知会话 403;并发限流(默认 4)超限 429 - 生命周期管理:TTL 清扫(默认 7 天),空会话目录自动回收;可选会话存储配额(`maxUploadBytesPerSession`,超限 507) ### 文档读取 - 内容嗅探:PDF 头 / ZIP 中央目录成员 / UTF-8 / UTF-16 BOM / GB18030,全部从字节判定,扩展名伪装(可执行文件、图片改成 .pdf)一律拒绝;上传侧同步嗅探,卡片显示真实格式 - 编码链:UTF-16 BOM → UTF-8(fatal)→ GB18030(fatal),中文 GBK 文件可直接读取 - 分页读取:行号 + offset/limit 分页,长文档按需翻页;窗口总字符预算(`maxOutputChars`)超限时截断并显式标记剩余行数 - 行号策略按格式分化:text(代码/配置)带行号供精确定位;PDF/DOCX/XLSX 段落流不带行号(省 token) - XLSX sheet 级读取:`sheet` 参数指定工作表时返回该 sheet 全量(不受行截断限制),其余 sheet 走合并读取(默认前 5 个),截断显式标记;`list_she

阅读完整 README仓库未声明许可,使用前请先与作者确认。

dsh-files DSH 插件常见问题

如何使用 dsh-files 上传文件?

你可以点击输入框工具栏的回形针图标选择文件,或者直接将文件拖拽到页面任意位置。每个文件会以浮动彩色卡片形式显示,卡片挂载后文件路径会自动注入输入框,随消息一起发送。

文档读取支持哪些格式?

read_document 工具支持纯文本、PDF、DOCX 和 XLSX 格式。它通过内容嗅探判断真实格式,伪装文件(如 exe 改名为 .pdf)会被拒绝。对于无文本层的扫描件 PDF,会返回显式提示而非空字符串。

上传的文件存储在哪里?保留多久?

文件存储在会话工作区的 `.dsh-filess/<sessionId>/` 目录下,每个会话隔离。默认保留 7 天(TTL),之后自动清理。你也可以配置每会话的存储配额(字节数)。

可以读取 Excel 文件的特定工作表吗?

可以。使用 `sheet` 参数指定工作表名称,即可返回该 sheet 的全量数据(不受行数限制)。`list_sheets` 参数可以列出所有工作表名称而不读取单元格。未指定时默认合并前 5 个 sheet。

如何配置上传限制,比如文件大小或并发数?

所有配置都在 DSH 配置文件的插件 config 块中设置。你可以设置 `maxFileBytes`、`maxConcurrentUploads`、`maxUploadBytesPerSession`、`uploadTtlMs` 等参数。完整列表请参考 README 的配置部分。