🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

本地文件附件 liznee/dsh-file-resource

DeepSeek Harnessv0.4.9
liznee66 天前有提交已提供中文文档扫描:含敏感能力

把本地文档拖进输入框,按需分页读取内容

28.8/100
综合分
1
GitHub 星标
99
npm 周下载
—/5
用户评分

数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-file-resource
npm 源 · dsh-file-resource 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · vision
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 66 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-file-resource @ 0.4.9
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/24 11:30:13

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 40 处,展示前 34 条)
  • 读取本地文件
    lib/index.js:761
    const bytes2 = await readFile(resource.objectPath);
  • 读取本地文件
    lib/index.js:767
    const bytes = await readFile(resource.objectPath);
  • 写入本地文件
    lib/index.js:931
    await mkdir(join(this.root, "objects"), { recursive: true });
  • 写入本地文件
    lib/index.js:932
    await mkdir(join(this.root, "derived"), { recursive: true });
  • 读取本地文件
    lib/index.js:934
    const parsed = JSON.parse(await readFile2(this.indexPath, "utf8"));
  • 写入本地文件
    lib/index.js:962
    await mkdir(dirname(objectPath), { recursive: true });
  • 写入本地文件
    lib/index.js:964
    await writeFile(staging, buffer, { flag: "wx", mode: 384 });
  • 写入本地文件
    lib/index.js:966
    await rename(staging, objectPath);
  • 删除本地文件
    lib/index.js:968
    await rm(staging, { force: true });
  • 读取本地文件
    lib/index.js:1033
    const parsed = JSON.parse((await gunzip(await readFile2(join(this.root, resource.derivedRelative)))).toString("utf8"));
  • 写入本地文件
    lib/index.js:1082
    await mkdir(dirname(target), { recursive: true });
  • 读取本地文件
    lib/index.js:1095
    const parsed = JSON.parse((await gunzip(await readFile2(resource.derivedPath))).toString("utf8"));
  • 删除本地文件
    lib/index.js:1105
    await rm(join(this.root, resource.objectRelative), { force: true });
  • 删除本地文件
    lib/index.js:1106
    if (resource.derivedRelative !== null) await rm(join(this.root, resource.derivedRelative), { force: true });
  • 删除本地文件
    lib/index.js:1153
    await rm(join(this.root, resource.objectRelative), { force: true });
  • 删除本地文件
    lib/index.js:1154
    if (resource.derivedRelative !== null) await rm(join(this.root, resource.derivedRelative), { force: true });
  • 发起网络请求
    lib/client.js:793
    const response = await fetch(RESOURCE_ENDPOINT, {
  • 发起网络请求
    src/client/preview.js:288
    const response = await fetch(RESOURCE_ENDPOINT, {
  • 读取本地文件
    src/resource-parser.js:53
    const bytes = await readFile(resource.objectPath)
  • 读取本地文件
    src/resource-parser.js:59
    const bytes = await readFile(resource.objectPath)
  • 写入本地文件
    src/resource-store.js:42
    await mkdir(join(this.root, 'objects'), { recursive: true })
  • 写入本地文件
    src/resource-store.js:43
    await mkdir(join(this.root, 'derived'), { recursive: true })
  • 读取本地文件
    src/resource-store.js:45
    const parsed = JSON.parse(await readFile(this.indexPath, 'utf8'))
  • 写入本地文件
    src/resource-store.js:76
    await mkdir(dirname(objectPath), { recursive: true })
  • 写入本地文件
    src/resource-store.js:78
    await writeFile(staging, buffer, { flag: 'wx', mode: 0o600 })
  • 写入本地文件
    src/resource-store.js:80
    await rename(staging, objectPath)
  • 删除本地文件
    src/resource-store.js:82
    await rm(staging, { force: true })
  • 读取本地文件
    src/resource-store.js:143
    const parsed = JSON.parse((await gunzip(await readFile(join(this.root, resource.derivedRelative)))).toString('utf8'))
  • 写入本地文件
    src/resource-store.js:199
    await mkdir(dirname(target), { recursive: true })
  • 读取本地文件
    src/resource-store.js:213
    const parsed = JSON.parse((await gunzip(await readFile(resource.derivedPath))).toString('utf8'))
  • 删除本地文件
    src/resource-store.js:224
    await rm(join(this.root, resource.objectRelative), { force: true })
  • 删除本地文件
    src/resource-store.js:225
    if (resource.derivedRelative !== null) await rm(join(this.root, resource.derivedRelative), { force: true })
  • 删除本地文件
    src/resource-store.js:282
    await rm(join(this.root, resource.objectRelative), { force: true })
  • 删除本地文件
    src/resource-store.js:283
    if (resource.derivedRelative !== null) await rm(join(this.root, resource.derivedRelative), { force: true })
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 拖拽本地文档到输入框
  • 按需分页读取内容
  • 菜单顶部增加附件入口
v0.4.92026-08-29
预览分栏视图、电子表格表格、@fileName 提及、发送历史。详见 CHANGELOG.md。
v0.1.12026-08-27
· dsh-file-resource v0.1.1 DeepSeek Harness Web 的本地优先文件附件插件,修复 bug 版本。 · 已修复 · 只发文件不再让输入框发送按钮永久变灰:插件不再改动 React 掌管的 disabled 属性,发送进行中改用 inert,只在 React 语义要求时(草稿为空或机器繁忙阶段)才恢复 disabled。 · 安装 dsh plugin --profile web add dsh-file-resource@0.1.1 从 GitHub 安装: dsh plugin --profile web add github:liznee/dsh-file-resource#v0.1.1
v0.1.02026-08-22
· dsh-file-resource v0.1.0 DeepSeek Harness Web 的本地优先文件附件插件首个公开版本。 · 亮点 · 原生 Harness 图片附件和私有文档资源。 · 本地解析 PDF、Office、OpenDocument、EPUB、RTF、文本和源码。 · 会话隔离、有界读取、缓存配额和压缩包炸弹防御。 · 根据前序人类对话延续中英文回复语言。 · 已在 DeepSeek Harness 0.1.1-rc.1 上验证,Node.js 版本为 22.19 和 24。 · 安装 dsh plugin --profile web add dsh-file-resource@0.1.0 从 GitHub 安装: dsh plugin --profile web add github:liznee/dsh-file-resource#v0.1.0
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-file-resource CI npm license DeepSeek Harness Web 的本地文件输入插件。在输入框原有的 + 菜单顶部增加 attach,并用分隔线与 Harness 原生命令区分;不会再增加一个单独按钮。 选择图片时继续使用 Harness 官方图片附件流程。选择文档时,插件在本机解析并保存为会话隔离的私有资源,模型只在需要时通过一个受限读取工具按页、幻灯片、工作表、分块或搜索结果读取。界面不会伪造或显示“请读取某个文件”的用户消息。 功能 - 一个文件选择器同时接收图片、文档、文本和常见代码文件,可多选。 - 文档以紧凑卡片显示在圆角输入框内部,文件名自动截断,并显示真实上传进度与本地解析状态。 - 卡片右侧的灰色圆形 × 可以取消正在进行的上传或移除文件。 - 只有文件、没有输入文字时,可直接使用 Harness 原有发送按钮。 - 图片仍由 Harness 原生预览、删除、持久化和多模态模型流程处理。 - 文档解析完全在本机完成;上传或解析本身不会调用模型,也没有遥测。 - 支持全局拖拽(把文件拖到窗口任意位置,"松开以添加文件")与文档粘贴(在输入框 Ctrl+V 粘贴复制的文件);图片始终走 Harness 原生流程。
展开完整文档(README 剩余 1 节)
dsh-file-resource

CI
npm
license

DeepSeek Harness Web 的本地文件输入插件。在输入框原有的 + 菜单顶部增加 attach,并用分隔线与 Harness 原生命令区分;不会再增加一个单独按钮。

选择图片时继续使用 Harness 官方图片附件流程。选择文档时,插件在本机解析并保存为会话隔离的私有资源,模型只在需要时通过一个受限读取工具按页、幻灯片、工作表、分块或搜索结果读取。界面不会伪造或显示“请读取某个文件”的用户消息。

功能

- 一个文件选择器同时接收图片、文档、文本和常见代码文件,可多选。
- 文档以紧凑卡片显示在圆角输入框内部,文件名自动截断,并显示真实上传进度与本地解析状态。
- 卡片右侧的灰色圆形 × 可以取消正在进行的上传或移除文件。
- 只有文件、没有输入文字时,可直接使用 Harness 原有发送按钮。
- 图片仍由 Harness 原生预览、删除、持久化和多模态模型流程处理。
- 文档解析完全在本机完成;上传或解析本身不会调用模型,也没有遥测。
- 支持全局拖拽(把文件拖到窗口任意位置,"松开以添加文件")与文档粘贴(在输入框 Ctrl+V 粘贴复制的文件);图片始终走 Harness 原生流程。
- 发送消息(含"只传文件")时会自动在消息末尾附上 @文件名 引用,聊天记录里直接可见本条消息带了哪些文件;模型按名对应资源 ID 再读取。(输入框里的 @ 属于 Harness 自带的工作区文件/会话引用,插件不与之冲突。)
- 点击聊天消息里的蓝色 @文件名,右侧以分栏预览文件内容(Excel/CSV 显示带格线的表格、超长自动换行);× 或 Esc 关闭,左侧滚动/打字/语音输入完全不受影响。

更新日志

- v0.4.9(2026-08-29):预览不再遮挡左侧——关闭改为 × / Esc,左边滚动、语音输入完全不受影响。
- v0.4.8(2026-08-29):预览面板顶部/底部与左边会话列精确对齐(窗口缩放自动重排)。
- v0.4.7(2026-08-29):修复左右分栏错位——只收缩会话滚动容器,消息与输入框作为整体左移、与预览列对齐。
- v0.4.6(2026-08-29):预览只对"本会话真实附件的文件"开放(@邮箱、随手打的 @文字 不再触发),输入框内的点击一律忽略。
- v0.4.5(2026-08-29):Excel/CSV 预览改为带格线的表格(换行显示);预览面板与对话布局对齐。
- v0.4.4(2026-08-29):会话发送历史——发送过的文件在移除附件卡后仍可预览。
- v0.4.3(2026-08-29):预览失败时给出明确原因,不再笼统提示"无法预览"。
- v0.4.0(2026-08-29):点击聊天中的 @文件名 在右侧预览文件内容。
- v0.3.0(2026-08-29):发送消息自动附带 @文件名 引用,聊天记录可见、模型可定位。

完整历史见 CHANGELOG.md。

支持格式

| 类别 | 格式 |
| Harness 原生图片 | PNG、JPEG、WebP、GIF |
| 文档 | PDF、DOCX、XLSX、PPTX、ODT、ODS、ODP、RTF、EPUB |
| 文本与代码 | TXT、Markdown、CSV、TSV、JSON/JSONL、XML、HTML、YAML、日志、配置、SQL,以及常见 JS/TS/Python/Java/C/C++/C#/Go/Rust/Ruby/PHP/Shell/PowerShell/CSS 文件 |

限制:旧二进制 DOC、XLS、PPT 不支持,请先另存为 DOCX、XLSX、PPTX。PDF 读取文字层;纯扫描件不会自动 OCR,避免后台下载识别模型、额外占用 CPU 或把内容发给第三方。

安装

要求与当前 DeepSeek Harness 一致:Node.js 22.19+ 或 24+。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。

升级时,将上述安装命令中的 0.4.9 替换为准备安装的新版本。卸载命令:

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

本地存储与清理默认缓存位于 $DSH_HOME/resources/dsh-file-resource/v1;未设置 DSH_HOME 时位于 ~/.dsh/resources/dsh-file-resource/v1。插件不会把副本或 Markdown 转换文件写进当前项目,也不会改动原文件。

- 单文件上限:50 MiB。
- 单次选择上限:20 个文件、合计 200 MiB。
- 总缓存上限:1 GiB,按内容 SHA-256 去重。
- 派生文本使用 gzip 压缩,并与原文件一起计入缓存上限。
- 达到上限时只按 LRU 清理已经发送的旧资源;正在编辑的文件不会被后台淘汰。
- 已解除引用的对象保留最多 7 天,启动时执行回收;没有常驻扫描器或清理定时器。

Token 与性能

文档全文不会直接塞进系统提示词。插件固定增加一个读取工具;按 Harness 自带的“4 字符约 1 token”估算,它的 schema 约为 188 tokens。文件索引约为:1 个文件 79 tokens、5 个文件 165 tokens、20 个文件 490 tokens。真正的文档内容仅在模型调用 read_uploaded_resource 时进入上下文,默认每次最多返回 8,000 字符,硬上限 24,000 字符。

发布前的小型真实文件基准:Host 冷导入约 12 ms、约 1.6 MiB 堆增量;DOCX/XLSX/PPTX 通常在 3–35 ms 内完成,PDF 第一次加载解析器约 0.1–0.6 秒。主机插件包约 51 KiB;PDF.js 只在第一次处理 PDF 时延迟加载。数据取决于机器和文件复杂度。

安全与隐私

- 浏览器接口要求同源请求和插件专用请求头,资源 ID 与会话绑定。
- 扩展名、声明类型和文件魔数交叉验证,拒绝伪装的可执行文件。
- ZIP/Office 文件限制条目数、展开体积和压缩比,防止解压炸弹。
- PDF.js 固定为已修复版本,并显式关闭 PDF 脚本与动态求值;限制页数与图片像素预算。
- 文件内容中的指令一律被提示为不可信数据。
- 插件不包含统计、遥测或第三方上传。只有用户发送消息后,所选模型提供方才会按正常 Harness 流程收到模型实际读取的内容。

安全问题请按照 SECURITY.md 私下报告;不要在公开 Issue 中披露可利用细节。

验证

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

当前测试覆盖文件选择、真实进度、取消、会话隔离、配额、缓存回收、恶意 ZIP 防护,以及真实 DOCX/XLSX/PPTX/PDF/ODF/EPUB/RTF 解析。

dsh-file-resource 为现有的 DeepSeek Harness Web + 菜单添加了一个统一的 attach 入口。图片继续走 Harness 原生附件管线。文档在本地被解析为会话作用域、内容寻址的资源,并通过一个有界读取工具暴露给模型。附带文档发送时,会在消息中追加 @fileName 提及,因此对话中能直观看到发送了什么,模型也能将名称映射到资源 ID;点击对话中的 @fileName 会在右侧分栏视图中预览该文件。(输入框的 @ 本身属于 Harness 原生工作区文件引用。)将任意文件拖到窗口任意位置,或将复制的文件粘贴到输入框,即可附加它们。

更新日志

完整历史见 CHANGELOG.md。近期亮点:已发送消息带有可见的 @fileName 提及(v0.3.0);点击 @fileName 会在分栏视图中打开右侧预览,电子表格渲染为带边框的表格(v0.4.0–v0.4.5);预览仅限本次对话中实际附加或发送的文件(v0.4.6);分栏与对话列对齐(v0.4.7/0.4.8);预览不再遮挡左侧(v0.4.9);按会话保存的发送历史使已发送文件的预览在草稿卡片移除后仍然可用(v0.4.4)。

支持的文档:PDF、DOCX、XLSX、PPTX、ODT、ODS、ODP、RTF、EPUB,以及常见文本和源代码格式。旧版 DOC/XLS/PPT 文件以及针对纯图片 PDF 的自动 OCR 有意不支持。

安装方式:

dsh plugin --profile web add dsh-file-resource
or: dsh plugin --profile web add github:liznee/dsh-file-resource#v0.4.9
该插件没有遥测功能,也不会上传第三方文件。有关缓存限制、令牌估算、安全控制和性能测量,请参阅上文的中文部分。

许可证

MIT © liznee
预览分享卡片长什么样 ↓liznee/dsh-file-resource
分享 · DeepSeek Harness Hub
liznee/dsh-file-resource

把本地文档拖进输入框,按需分页读取内容

这是你的仓库?认领条目

回到顶部