dsh-web-ui
zhu1090093659
Plugin and skin collection for DeepSeek Harness (DSH) Web UI - task board, git graph, right-side panel, remote mobile UI, pet, live token stats, and skin center.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:xianyu-ya/dsh-imgpt
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
English · 中文
Image to Path:让任何模型都能发送图片。粘贴/拖拽图片 → 自动保存到工作目录 → 输入框插入文件路径文本 → 纯文本发送,绕开非视觉模型拦截。
imgpt(image-to-path)是 DeepSeek Harness(DSH)Web GUI 的插件。DSH 底层在发送 type: 'image' 内容块时会检查当前模型的 inputModalities——DeepSeek 等非视觉模型被声明为仅支持文本,消息一旦含图片就会被拒绝(MODEL_DOES_NOT_SUPPORT_IMAGES,提示"当前模型不支持图片")。imgpt 不改动任何底层代码,而是改变图片的传递形态:把图片落盘成文件,消息里只带文件路径。
| 功能 | 说明 |
|---|---|
| 🖼️ 粘贴图片 | 输入框 Ctrl+V 粘贴截图/图片 → 自动保存 + 插入路径 |
| 🎯 拖拽图片 | 拖入图片 → 自动保存 + 插入路径(无原生遮罩残留) |
| 📎 启用开关 | 输入框工具行开关,随时切换「路径转换」与「原生图片通道」 |
| 🗑️ 清除缓存 | 双击确认后清空 .dsh-images,徽标显示清除数量 |
| 📋 状态徽标 | 输入框下方实时显示:启用状态 / 保存进度 / 失败原因 / 清除结果 |
| 👁️ 视觉看图 | 配合视觉模型辅助,发送路径 + "识别这张图片"即可读图 |
粘贴/拖拽图片 ──► capture 阶段拦截 ──► 保存到 工作目录\.dsh-images\ ──► 输入框插入:
D:\Work\xx\.dsh-images\m5x2k9a-截图.png
──► 正常发送(任何模型)
Client 半体(浏览器,client/imgpt-web)
document 捕获阶段监听 paste / dragenter / dragover / droppreventDefault + stopPropagation(拦截 DSH 原生图片通道,同时抑制原生拖拽遮罩)FileReader 把图片读为 base64,fetch POST 到 Host 端点paste 事件把路径文本插入输入框(复用 InputBar 原生文本插入链路)Host 半体(服务端,plugins/imgpt-host)
webServer 注册两个 HTTP 端点:POST /imgpt-save — 校验会话 → 用 node:fs 把 base64 解码写为二进制图片到 .dsh-imagesPOST /imgpt-clear — 递归统计并删除 .dsh-imagescwd为什么这样设计:常驻插件无法使用动态插件专用的 harness.handle/host.call RPC,且 fs 服务的沙盒策略对非会话上下文会拒绝写入——因此采用「Client fetch + Host webServer 路由 + node:fs 直接落盘」,最简且随 DSH 启动自动加载。
imgpt/
├── README.md # 本文件
├── LICENSE # MIT
├── .gitignore
├── package.json # 仓库元信息
├── plugins/
│ └── imgpt-host/
│ └── index.js # Host 半体(webServer HTTP 端点 + node:fs 落盘)
└── client/
└── imgpt-web/
├── package.json # Client 包声明(dsh.client + exports)
└── lib/
├── index.js # Node 半体(空插件,满足 Loader 装载)
└── client.js # 浏览器 bundle(拦截/上传/插入路径/开关/清除)
需要把仓库文件放到 DSH profile 目录(默认
~/.dsh/profiles/web/,即C:\Users\<你>\.dsh\profiles\web\)。
复制 Host 半体
Copy-Item -Recurse plugins\imgpt-host "C:\Users\<你>\.dsh\profiles\web\plugins\imgpt-host"
复制 Client 包
Copy-Item -Recurse client\imgpt-web "C:\Users\<你>\.dsh\profiles\web\node_modules\imgpt-web"
注册组合补丁:在 C:\Users\<你>\.dsh\profiles\web\cordis.patch.yml 的 insert 列表中追加两行:
- insert:
# ... 已有条目
- id: imgpt-host
name: './plugins/imgpt-host/index.js'
- id: imgpt-web
name: 'imgpt-web'
重启 DSH。输入框工具行出现 📎 开关 + 🗑️ 清除、下方出现状态徽标即安装成功。
⚠️ 不要在该 profile 目录下运行
pnpm install,会清掉手动放置的imgpt-web包。
Ctrl+V 粘贴截图 或 拖入图片文件工作目录\.dsh-images\,输入框自动插入绝对路径文本ctx.effect(cb) 会立即执行 cb 并把返回值当清理函数——清理必须写成 ctx.effect(() => () => {...}),否则监听器注册后立即被移除。drop/dragend,而正常 drop 后浏览器不再发 dragend——需在 drop 后合成 dragend 事件清理。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: dsh-plugin-theme。