FrostLeafKEE/dsh-image-unlock

FrostLeafKEE★ 0JavaScriptLast synced: 2026-08-15

Open on GitHub

DeepSeek Harness 插件:解除 Web GUI 图片输入限制,图片附件文本化后交给 vision skill 识图 | dsh plugin that lifts the image-input gate and hands attachments to a vision skill

README excerpt

🐳 dsh-image-unlock 解除 DeepSeek Harness Web GUI 的图片输入限制,让图片附件在不支持图片的上游(Console Go)下可用。 ✨ 一张图看懂 🧩 问题 Harness 在 API 层( dsh-host-apiproxy )、LLM 层( dsh-llm-pi-ai )都根据模型的 inputModalities (来自 llm-pi-ai 的模型 input 声明)判断能否接收图片。 默认声明只有 text ,因此未声明 input 的模型(如 deepseek-v4-flash )在发图时 会被拒绝( "Model does not support image input" )。 但只放行还不够: dsh-llm-pi-ai 会把 durable 图片块转成 { type: "image", data: base64 } 部件,pi-ai SDK 序列化为 image url 发送给 上游。Console Go 上游协议只接受 text ,于是报: 也就是说: 声明图片能力是"准入",但上游根本不收图片 。正确做法是准入后把 图片块转成带附件路径的文本标记,识别交给 vision skill。 ⚙️ 方案(两部分) 1. Bundle patch:准入( cordis.patch.yml ) 给 llm-pi-ai 的 opencode-go provider 加上 defaultInput: [text, image] , 让未显式声明 input 的模型继承 image 输入能力,从而通过 API 层 / LLM 层的 图片闸门。显式声明 input: [text] 的模型保持原样(用户层优先)。 2. 代码 patch:图片文本化( scripts/patch-pi-ai.mjs ) dsh-llm-pi-ai 的序列化没有配置开关,请求对象又是深度冻结的( llm/stream waterfall 无法改写),所以对本地安装的包做一次代码补丁(已用 [dsh-plugin-image-unlock] 标记注释标注): - 在 stream() 中,对 opencode-go 路由先调用 textifyImageBlocks() : 把 durable 图片块(含 tool-result 内嵌套的)替换为文本标记;是否执行由 运行时开关 globalThis. dsh image unlock textify 控制(见下节)。 - 附件对象文件没有扩展名, claude-vision-skill/vision.js 已支持按魔数嗅探 MIME(png/jpeg/webp/gif),可直接识读该路径;剪贴板回退仍然可用。 这样:上传不再被拒(第 1 部分)、请求不再 400(第 2 部分)、agent…

View full README on GitHub →
Media / Contentdeepseek-harnessdsh-pluginpluginskillvisionagent

Category