Back to home

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/filesPOST{ name, size, data(base64) } → 持久化到 $DSH_HOME/uploads/<uuid>/<name>,返回 { path, name, size }
/dsh-mypg-upload/previewGET?path=<绝对路径>{ kind: text|image|pdf|audio|video|meta, ... }
/dsh-mypg-upload/rawGET?path=<绝对路径> → 流式返回 PDF / 音视频,带正确 Content-Type

安装(web profile)

  1. 将插件链接到 profile 的 node_modules(junction,Windows):

    New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-upload-plus" -Target "(本仓库路径)"
    
  2. 在 profile 组合文件 cordis.patch.yml 追加:

    - insert:
        - id: dsh-upload-plus
          name: dsh-upload-plus
    
  3. 重启 DSH 桌面应用 / 刷新 Web 界面(客户端 bundle 仅在重启时重新加载)。

使用

  1. 点击输入框左侧 📎 按钮选择文件,或直接把文件拖进窗口
  2. 文件出现在输入框上方的附件卡片行,可点击 ✕ 移除
  3. 点击卡片打开右侧预览面板(文本 / 图片 / PDF / 音视频 / 元数据)
  4. 发送消息时附件文件路径随消息一起使用

构建

在 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