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

会话文件库 seeingrain/dsh-upload-file

DeepSeek Harness
seeingrain60 天前有提交已提供中文文档扫描:含敏感能力

上传文件到会话,@ 引用即可让模型直接读取

28.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add seeingrain/dsh-upload-file
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · tool
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/10/06·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 60 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(dependency_conflict · 2026/10/6) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 34 处,展示前 27 条)
  • 读取本地文件
    lib/index.js:931
    return readdirSync(dir);
  • 读取本地文件
    lib/index.js:975
    pipeline(createReadStream(absPath), res).catch(() => {
  • 执行外部命令来自配置/变量
    lib/index.js:1006
    execFile(cmd, args, { timeout: timeoutMs }, (err) => resolve(err ? null : true));
  • 读取本地文件
    lib/index.js:1069
    sz = (await stat(dst)).size;
  • 删除本地文件
    lib/index.js:1072
    await rm(dst, { force: true }).catch(() => {});
  • 执行外部命令固定命令
    lib/index.js:1080
    execFile("ffprobe", [
  • 读取本地文件
    lib/index.js:1124
    sz = (await stat(p)).size;
  • 删除本地文件
    lib/index.js:1129
    await rm(p, { force: true }).catch(() => {});
  • 写入本地文件
    lib/index.js:1134
    await rename(last, dst);
  • 删除本地文件
    lib/index.js:1136
    for (const f of readdirSyncSafe(thumbsDir).filter((x) => x.startsWith(`${base}-`))) await rm(join(thumbsDir, f), { force: true }).catch(() => {});
  • 读取本地文件
    lib/index.js:1153
    const info = await stat(dst);
  • 写入本地文件
    lib/index.js:1156
    await mkdir(thumbsDir, { recursive: true }).catch(() => {});
  • 删除本地文件
    lib/index.js:1158
    await rm(dst, { force: true }).catch(() => {});
  • 写入本地文件
    lib/index.js:1199
    await mkdir(tmpDir, { recursive: true });
  • 写入本地文件
    lib/index.js:1220
    const sink = createWriteStream(upload.tmpPath);
  • 删除本地文件
    lib/index.js:1234
    await rm(upload.tmpPath, { force: true }).catch(() => {});
  • 删除本地文件
    lib/index.js:1252
    await rm(upload.tmpPath, { force: true }).catch(() => {});
  • 写入本地文件
    lib/index.js:1263
    await mkdir(dir, { recursive: true });
  • 写入本地文件
    lib/index.js:1266
    await rename(upload.tmpPath, finalPath);
  • 读取本地文件
    lib/index.js:1294
    const info = await stat(join(dir, n));
  • 发起网络请求
    lib/client.js:147
    const resp = await fetch("/api/host.openPath", {
  • 发起网络请求
    lib/client.js:291
    return responseJson(await fetch(`${API}/uploads/prepare`, {
  • 发起网络请求
    lib/client.js:338
    return responseJson(await fetch(url, {
  • 发起网络请求
    lib/client.js:346
    await fetch(url, {
  • 发起网络请求
    lib/client.js:352
    return responseJson(await fetch(`${API}/sessions/${encodeURIComponent(sessionId)}/attachments?name=${encodeURIComponent(name)}`, {
  • 发起网络请求
    lib/client.js:358
    return (await responseJson(await fetch(`${API}/sessions/${encodeURIComponent(sessionId)}/attachments`, { credentials: "same-origin" }))).attachments ?
  • 写入剪贴板
    lib/client.js:588
    await navigator.clipboard.writeText(text);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-session
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 上传文件到会话
  • @引用供模型读取
  • 按会话隔离文件

DSH 插件:paperclip 文件库,支持按会话隔离、缩略图和重新下载。

README

由 DeepSeek 最新模型翻译生成
dsh-upload-file CI License: MIT 🇬🇧 English: README.en.md 这个插件允许你将任意文件上传给 DSH,上传后的文件是工作区+会话隔离的。 尤其适合:DSH 运行在单独服务器上的用户——聊天里直接上传文件到服务器,后续直接 @ 引用。 | 文件库弹层(上传 / 列表 / 行内动作) | 右键操作菜单(6 个动作) | | 文件库弹层 | 右键操作菜单 | 功能 - 输入框工具行(加号旁)多了个 📎 按钮,角标显示本会话文件数,点开就是本会话的文件库 - 上传:一次可以选多个文件,上传中有进度条 - 列表:一个文件一行——缩略图(图片 / 视频 / PDF)或类型图标 + 名字 + 大小,最新上传的在最上面 - @ 文件:在输入框里提及这个文件,模型就能直接用它,不用你报路径 - 右键一个文件(手机上长按)做 6 件事: - @ 提及文件 - 用系统默认程序打开(装了 Better Sidebar 就在侧栏打开) - 复制文件名 / 复制完整路径 - 重新下载一份到本地 - 删除文件(确认后真删,没有回收站) - 隔离:每个会话各存各的,互不干扰;同会话重传同名文件自动加数字后缀,不会覆盖 存储(文件系统即注册表,无 JSON 索引) - 每个会话一个子目录:/.uploaded_files//(隐藏目录)
展开完整文档(README 剩余 1 节)
dsh-upload-file

CI
License: MIT

🇬🇧 English: README.en.md

这个插件允许你将任意文件上传给 DSH,上传后的文件是工作区+会话隔离的。

尤其适合:DSH 运行在单独服务器上的用户——聊天里直接上传文件到服务器,后续直接 @ 引用。

| 文件库弹层(上传 / 列表 / 行内动作) | 右键操作菜单(6 个动作) |
| 文件库弹层 | 右键操作菜单 |

功能

- 输入框工具行(加号旁)多了个 📎 按钮,角标显示本会话文件数,点开就是本会话的文件库
- 上传:一次可以选多个文件,上传中有进度条
- 列表:一个文件一行——缩略图(图片 / 视频 / PDF)或类型图标 + 名字 + 大小,最新上传的在最上面
- @ 文件:在输入框里提及这个文件,模型就能直接用它,不用你报路径
- 右键一个文件(手机上长按)做 6 件事:
- @ 提及文件
- 用系统默认程序打开(装了 Better Sidebar 就在侧栏打开)
- 复制文件名 / 复制完整路径
- 重新下载一份到本地
- 删除文件(确认后真删,没有回收站)
- 隔离:每个会话各存各的,互不干扰;同会话重传同名文件自动加数字后缀,不会覆盖

存储(文件系统即注册表,无 JSON 索引)

- 每个会话一个子目录:/.uploaded_files//(隐藏目录)
- 文件名就是唯一身份(无 displayName 间接层);同会话重传同名文件自动加 _1/_2 数字后缀,@UPLOAD: 引用名 = 目录内实际文件名
- 会话间完全隔离:同名文件在不同会话目录互不冲突
- 列表 = readdir + stat(按 mtime 降序,最新上传在最顶上)
- system prompt 按会话注入指向本会话目录的约定文本(目录为空时不注入)

缩略图(服务端抽帧,图片 / 视频 / PDF)

- 图片(png/jpg/gif/webp/bmp/ico)取原图、视频(mp4/webm/mov/mkv/avi)取 5% 处帧(避开片头黑场,上限 60s)、PDF 取首页,统一缩放到最长边 160px 的 JPEG,质量阶梯递减压到 ≤10KB
- 存在会话目录的隐藏子目录 .thumbs/.jpg;列表接口天然跳过点开头目录,不污染文件库
- 原文件名在会话内唯一且永不被覆盖 → 缩略图生成一次即终态,响应带 immutable 长期缓存
- 懒生成 + 并发去重:首次请求缩略图时按需生成(上传 commit 时也会尽力预生成,失败无碍,取图时兜底);同一文件并发请求只生成一次
- 降级友好:依赖系统 ffmpeg(图片/视频)与 pdftoppm(PDF,poppler);缺失或失败时该文件回落为原图(图片)或类型徽章(视频/PDF),不影响上传与列表
- 办公文档(docx/xlsx/pptx)在生成器注册表中预留接口(当前不生成,回类型徽章),后续接 LibreOffice 无头转 PDF 链路即可启用;SVG 为矢量、体积天然小,浏览器原生渲染,不生成

安全

- 上传全程 SHA-256 校验(客户端摘要 → 提交时服务端比对)
- 所有文件路径操作做目录穿越防护(normalize(join()) 必须仍在本会话目录内)
- sessionId 严格校验(UUID 格式),工作区从会话自身 header.cwd 解析,不信任客户端传入的路径

HTTP 接口(前缀 /dsh-upload-file/v1)

- POST /uploads/prepare {sessionId, name, size} → {uploadId, putUrl, commitUrl, deleteUrl}
- PUT /uploads/ 流式上传(application/octet-stream,inline sha256)
- POST /uploads//commit {expectedSha256} → {name, displayName, absolutePath, size, createdAt}
- DELETE /uploads/ 取消(已 commit 的 id 返回 404,客户端吞掉)
- GET /sessions//attachments 目录列表
- GET /attachments/content?sessionId&name 下载 / 打开(防路径穿越)
- GET /attachments/thumbnail?sessionId&name 服务端缩略图(懒生成,image/jpeg + immutable 缓存;不支持的类型 404,客户端回落)
- DELETE /sessions//attachments?name= 删除已提交文件(连带删除缩略图)

构建

pnpm install
pnpm run build

安装

dsh plugin --profile web add github:seeingrain/dsh-upload-file
host 半边需要重启 web;client 半边下次刷新页面即加载

本地开发链接方式:在 profiles/web/package.json 的 dependencies 里加 "dsh-upload-file": "link:",并在 bundles 列表追加 dsh-upload-file,然后 pnpm install。
许可证

MIT — 见 LICENSE。
预览分享卡片长什么样 ↓seeingrain/dsh-upload-file
分享 · DeepSeek Harness Hub
seeingrain/dsh-upload-file

上传文件到会话,@ 引用即可让模型直接读取

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部