wanglijie34
dsh-upload-plus
No description
- Stars
- 1
- Language
- TypeScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
dsh-upload-plus
DeepSeek Harness (DSH) 的 Web 插件:输入框文件上传 + 预览。支持附件上传、整页拖拽、可移除附件卡片和右侧文件预览面板。
在 conversation.input.left 槽位注册附件按钮,在 conversation.input.dock 槽位注册附件卡片行与预览面板。
功能特性
- 📎 输入框左侧附件按钮(
conversation.input.left),菜单选择文件 - 🖱️ 整页拖拽上传:任意类型文件拖入窗口即可上传(capture 阶段监听,不干扰页面内其他拖拽)
- 🗂️ 附件卡片行(
conversation.input.dock):文件名 + 大小,可单独移除;宽度与输入框对齐(--dsh-composer-card-max-width) - 👁️ 右侧预览面板:
- 文本类(txt / md / json / tsx / py 等 40+ 扩展名,≤256 KiB)
- Markdown 渲染为 HTML
- 图片(png / jpg / gif / webp / bmp / svg,≤5 MiB,dataURL 内联)
- PDF / 音频 / 视频(走
/raw流式接口,浏览器原生播放,无 base64 膨胀) - 其他文件显示元数据(名称 / 大小 / 类型说明)
- 💾 上传文件持久化到
$DSH_HOME/uploads(UUID 容器目录,文件名消毒防穿越) - ⚖️ 单文件上限 50 MiB
架构
| 端 | 职责 |
|---|---|
| Host(node) | 三个路由:上传 / 预览 / 原始流式 |
| Client(browser) | 附件按钮、拖拽、卡片行、预览面板 |
路由
| 路由 | 方法 | 说明 |
|---|---|---|
/dsh-upload/files | POST | { name, size, data(base64) } → 持久化到 $DSH_HOME/uploads/<uuid>/<name>,返回 { path, name, size } |
/dsh-mypg-upload/preview | GET | ?path=<绝对路径> → { kind: text|image|pdf|audio|video|meta, ... } |
/dsh-mypg-upload/raw | GET | ?path=<绝对路径> → 流式返回 PDF / 音视频,带正确 Content-Type |
安装(web profile)
-
将插件链接到 profile 的 node_modules(junction,Windows):
New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-upload-plus" -Target "(本仓库路径)" -
在 profile 组合文件
cordis.patch.yml追加:- insert: - id: dsh-upload-plus name: dsh-upload-plus -
重启 DSH 桌面应用 / 刷新 Web 界面(客户端 bundle 仅在重启时重新加载)。
使用
- 点击输入框左侧 📎 按钮选择文件,或直接把文件拖进窗口
- 文件出现在输入框上方的附件卡片行,可点击 ✕ 移除
- 点击卡片打开右侧预览面板(文本 / 图片 / PDF / 音视频 / 元数据)
- 发送消息时附件文件路径随消息一起使用
构建
在 deepseek-harness 仓库内(本插件依赖其 workspace 构建链):
pnpm run build # tsc -b && tsdown,产出 lib/client.js 与 lib/index.js
目录结构
src/
├── index.ts # Host:上传 / 预览 / 原始流式路由(raw node:fs,不依赖 @deepseek-ai 包)
└── client/index.ts # Client:附件按钮、拖拽、卡片行、预览面板
package.json
tsconfig.json
tsdown.config.ts
说明
- 本插件在 deepseek-harness 仓库内开发,
package.json使用workspace:^的 peer 依赖、tsdown.config.ts引用仓库内的clientBundle工具;脱离该仓库独立使用时需相应调整。 - 上传文件存放在本机
$DSH_HOME/uploads,不会上传到任何远程服务器。
License
MIT