统一上传按钮 + 拖拽文件直进对话:文件保存到项目 uploads/,路径文本自动进输入框,可配合任意视觉工具看图。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:a903067276-rgb/dsh-file-upload
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
统一上传按钮 + 拖拽文件直进对话 —— DeepSeek Harness(DSH)web 插件。
点击输入框左侧的「📎 上传」按钮选择文件,或直接把文件拖进窗口:文件保存到
当前项目目录 uploads/,输入框自动出现路径文本([上传文件] /项目/uploads/xxx.png),
你按发送即可。
不绑定任何视觉插件:消息里只有本地绝对路径。主模型或任何外挂视觉工具
(如 dsh-vision 的 view_image、其他支持读本地路径的模型)都能按路径识别。
效果截图

输入框工具行里的「📎 上传」按钮;选中文件后路径(截图中已模糊处理)自动进入输入框,可直接发送。
为什么需要它
DSH 原生"拖图片"会被拦截(当前模型不支持图片,提示"当前模型不支持图片, 请切换支持图片的模型")。本插件把文件先落到磁盘、再把路径文本放进对话, 绕开模型图片校验——这是纯文本消息,任何模型/视觉插件都通用。
功能一览
| 操作 | 效果 |
|---|---|
| 点「📎 上传」 | 系统文件选择器(可多选)→ 保存 → 路径进输入框 |
| 把文件拖进窗口 | 图片/任意文件都接管(不再弹"不支持")→ 保存 → 路径进输入框 |
| 发送消息 | 模型/视觉插件按绝对路径读取文件 |
| 切换会话 | 按钮跟随当前会话,文件落在该会话项目的 uploads/ |
- 文件上限:单文件 25MB(前端)/ 30MB(后端)
- 文件名保留中文/空格,自动加时间戳前缀防重名
- 上传中按钮变灰,失败有中文提示
安装
方式一:bundle 一行安装(推送到 GitHub 后可用)
dsh plugin --profile web add "github:a903067276-rgb/dsh-file-upload#main"
装完重启 dsh web(可用 scripts/restart-dsh-web.sh 自动重启)。
方式二:手动挂载(本地开发,macOS 实测)
完整步骤(含验证、卸载、注意事项)见 docs/install.md。概要:
让 web profile 能按包名解析到本仓库:
ln -s ~/Documents/DSH/plugin-dev/dsh-file-upload ~/.dsh/profiles/web/node_modules/dsh-file-upload在
~/.dsh/cordis.patch.yml追加单 entry(示例见examples/cordis.patch.example.yml):- insert: - id: file-upload name: 'dsh-file-upload'单 entry 包名挂载即可,双 entry 会导致路由重复注册崩溃。
重启
dsh web:./scripts/restart-dsh-web.sh
工作原理
- Host(
lib/index.js):一条路由POST /api/file-upload/save—— 接收 base64 文件内容,校验会话与大小,用纯 Node(node:fs,跨平台无系统命令 依赖)落盘到<会话项目>/uploads/,路径由node:path生成、跟随平台分隔符, 返回绝对路径。 - Client(
lib/client.js):conversation.input.left插槽注册「📎 上传」 按钮(与默认「+」命令按钮区分);document 捕获阶段监听拖拽,先于官方 InputBar 的冒泡监听执行,preventDefault + stopPropagation接管文件拖放;FileReader读 base64 上传,完成后路径文本插入输入框草稿(保留已有内容)。 - 错误边界:渲染崩溃只降级为"⚠ 上传组件异常"小字,不会让整个输入框消失。
平台支持
| 平台 | 状态 |
|---|---|
| macOS | ✅ 全功能实测(开发环境) |
| Linux | ✅ 架构上可用(纯 Node 实现),未实测 |
| Windows | ⚠️ 架构上可用(纯 Node 实现;文件名净化已兼容 Windows 非法字符,路径跟随平台分隔符),未实测 |
环境要求
- DSH web(
dsh web运行) - 无需额外 shell/命令:host 半为纯 Node 实现(
node:fs),全平台无系统命令依赖
其他说明
uploads/目录只增不减,不会自动清理(不擅自删用户文件),需要时手动删除。- 修改插件后重启即可生效:
./scripts/restart-dsh-web.sh。
链接
同类插件
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 3649
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
omdsh-dev/DSH-better-sidebar★ 1731
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
ccch1mneyyy/dsh-TUI★ 1646
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/dsh-at-file★ 288
Codex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
huiliyi37/dsh-tianshu-tui★ 194
DeepSeek Harness 的终端 UI(TUI)。
Nagi-ovo/dsh-visualize★ 161
对话内生成式 UI:模型把交互式 HTML 卡片直接画进会话流,带流式预览与沙箱渲染。