拖拽/粘贴/上传文件和图片,非多模态模型下图片自动调用已配置 VLM 识别。
安装
# npm 包(预构建)
dsh plugin --profile web add @wszhoho/dsh-file-attachment
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:wszhoho/dsh-file-attachment
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
文件附件插件 for DeepSeek Harness (DSH) Web GUI:拖拽 /
Ctrl+V粘贴 / 📎 按钮上传文件或图片,输入框内联缩略图,聊天区可点击放大,自动插入@绝对路径引用;非多模态模型可配置 VLM 生成图片描述。File attachment plugin for DSH web GUI: drag, paste, or upload files and images from the composer; inline thumbnails, clickable previews,
@absolute-pathreferences, and optional VLM-generated image descriptions.
Quick start
dsh plugin --profile web add @wszhoho/dsh-file-attachment
安装后重启 web GUI 即生效。
核心能力
- 三种入口:拖入、
Ctrl+V粘贴、接管 dsh 原生 📎 附件按钮(加号右侧、modes 左侧,可多选);PC 与移动端浏览器均适用。 - 统一落盘管线:图片与文档同走一条链路,保存到
<会话工作区>/.dsh-file-attachment/<日期>/<文件名>;同名冲突追加-N绝不覆盖;单文件上限 50MB。 @绝对路径引用:落盘后在光标处插入 chip,文本模型也能「看懂」附件。- 预览:输入框内联附件条——图片为缩略图、文档为类型图标 + 文件名,条目可移除并同步清除对应引用,发送后自动清空;聊天区图片渲染为可点击放大的缩略图(Lightbox),文件保持芯片样式。
- VLM 识别:当前会话模型不支持多模态时,自动调用 OpenAI 兼容接口生成中文图片描述回填草稿(仅注入模型上下文,不进对话界面);agent 也可主动调用
describe_image工具识别已落盘图片(含历史消息中的@图片引用)。
界面
演示:拖入/粘贴 → 落盘并插入 @ 引用 → 输入框内联附件条待发送状态。


设置页(「设置 → 文件附件」):可上传类型按文档 / 代码 / 配置文件三类增删扩展名(小写不带点,图片恒可发送);VLM 参数 Base URL / API Key / 模型 / 思考模式开关(默认禁用)/ 超时时间(默认 60 秒),未填 API Key 时静默跳过。

行为一览
| 操作 | 行为 |
|---|---|
| 📎 按钮多选 / 拖入 / 粘贴文档、代码、配置文件 | 读全文 → base64 → 落盘 → 光标一次性插入全部 @ 引用;成功不提示,失败简短 toast |
| 一次多个文件 | 批量处理,一次性插入全部引用;部分失败仅提示「N 个已跳过」 |
| 拖入 / 粘贴图片 | 同一管线落盘 + 插引用;附件条缩略图预览,聊天区可点击放大 |
| 当前模型不支持多模态 | 自动调 VLM 生成中文描述回填草稿;agent 可用 describe_image 工具 |
| 拖入目录 | 拒绝,toast 提示「不支持拖入目录」 |
| 粘贴纯文本 | 不改写,完全原生行为 |
| 重复拖入同名文件(同一天内) | 追加 -1、-2 序号,绝不覆盖 |
点附件条 × 移除 |
移除条目并清除该文件路径的全部 @ 引用 chip,其他文件不受影响 |
| 单文件 > 50MB | 跳过并提示 |
存储细节
- 命名:
.dsh-file-attachment/YYYY-MM-DD/<清洗后文件名>(如.dsh-file-attachment/2026-02-11/说明.docx),同日同名在扩展名前追加-N。 - 根目录 = 当前会话工作区(回退顺序:
session.header.cwd→sandboxPolicy.workspaceRoot→process.cwd()),每个项目各自维护自己的.dsh-file-attachment/。 - 跨平台:保存路径用
path.join自适应分隔符;文件名清洗对 Windows / POSIX 均安全;Host 半经node:fs/promises直接写字节,无 shell 依赖。
安装
本仓库是标准 dsh 插件包(声明了 dsh.bundle.patch),已发布 npm 包 @wszhoho/dsh-file-attachment。dsh plugin add 的参数会转发给 profile 目录的 pnpm 执行,三种来源任选其一:
# 从 npm 安装(普通用户推荐)
dsh plugin --profile web add @wszhoho/dsh-file-attachment
# 本地源码安装(开发用,边改边验;相对路径等价 pnpm link,改完 lib/*.js 后重启 GUI 即生效)
cd <parent>
dsh plugin --profile web add ./dsh-file-attachment
# 从 GitHub 安装
dsh plugin --profile web add github:wszhoho/dsh-file-attachment
无论哪种来源,安装后都自动进入 profile 的 dsh.profile.bundles,无需手改 profile package.json;升级:dsh plugin --profile web update dsh-file-attachment。
架构
├── package.json # dsh.client 声明 + bundle patch 指向
├── cordis.patch.yml # bundle 补丁:插入本插件行
└── lib/
├── index.js # Host 半:webServer 路由(/save /config /describe)+ describe_image 工具
└── client.js # Client 半:document 级 capture drop/paste 监听 + 📎 按钮接管 + 槽组件
- Host 半:前缀路由
/dsh-file-attachment——POST/save(base64 解码后用node:fs/promises写盘)、GET/POST/config(读写可上传类型与 VLM 配置)、POST/describe(调 VLM 返回中文描述与思考模式配置);另经tools.register注册describe_image工具。响应信封{ ok, value | error }。 - Client 半:shadow 原生附件条(
conversation.input.attachments)实现内联附件条;shadow 用户消息渲染器(conversation.chat.nodekeyeduser)把聊天区@图片路径渲染为缩略图(经宿主/api/file?path=读取落盘图片);capture 阶段拦截原生fileInputchange 事件接管 📎 按钮,文件进入插件统一管线;纯文本粘贴完全原生不改写。 - 通知与浮层:
shell.overlayframe-wide 浮动 toast(不参与文档流,4 秒自动消失);拖入任何文件时 capture 阶段拦截应用自带的图片 DropOverlay(其文案对文档是误导)。
开发说明
lib/*.js、package.json、cordis.patch.yml、README.md均为 UTF-8 无 BOM,编辑时保持原编码。- 纯 ESM 无构建,不依赖装饰器 / 远程反射。
- VLM 请求按 MiMo 官方格式发送
thinking: { type: "enabled"|"disabled" }(扁平thinkingType会被 API 忽略;mimo-v2.5 默认开启深度思考导致识别极慢——实测 206 秒 vs 关闭后 22~73 秒);超时后明确报错中止而非挂死会话;未填 API Key 时识别静默跳过,不影响落盘。 - 50MB 上限两侧一致(client 跳过 + host 校验)。
Star
如果这个插件帮到了你,欢迎到 GitHub 仓库 点个 ⭐ Star,感谢支持!
English
dsh-file-attachment is a DeepSeek Harness (DSH) web GUI plugin for attaching files and images to the chat composer via drag-and-drop, paste, or the native DSH paperclip button.
Key capabilities: unified storage pipeline under .dsh-file-attachment/; @absolute-path references so text-only models can use attachments; inline attachment previews plus clickable chat thumbnails with a lightbox; multi-file upload with same-name conflict handling and a 50MB guard; optional OpenAI-compatible VLM descriptions for non-multimodal models; works on desktop and mobile browsers.
Install:
dsh plugin --profile web add @wszhoho/dsh-file-attachment
For detailed behavior, settings, architecture, and development notes, see the Chinese documentation above.
License
MIT
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 8978
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 8978
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 5292
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
ccch1mneyyy/dsh-TUI★ 4819
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/DSH-better-sidebar★ 4290
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1478
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。