Back to home

yujianjian1013

dsh-codex-media

No description

Stars
0
Language
JavaScript
Created
Aug 14, 2026
Updated
Aug 14, 2026

Introduction

dsh-codex-media

用本机 Codex(ChatGPT Plus 额度)给 DeepSeek Harness 补上「识图 / 生图 / 改图」,并且能在 Web 输入框里直接粘贴图片。

一个包,两个角色:

  1. Host 插件(lib/host.js)——通过 ctx.webServer 的公开 seam 注入粘贴桥:
    • tapIndex 往 SPA 的 index.html 注入 bridge.js;
    • 提供 POST /codex-media/upload,把粘贴的图片字节存进官方附件库(ctx.attachments,即 ~/.dsh/attachments),返回 sha256: 引用。
  2. MCP server(mcp/server.mjs,stdio)——四个工具,经 dsh-mcp-client 注册为 mcp__codexmedia__*:
    工具作用
    identify_image识图:本地路径 / sha256: 引用 / clipboard
    generate_image生图:Codex 托管 image_generation,输出到你传的路径
    edit_image改图:带参考图重绘
    clipboard_to_image剪贴板图片存盘(pwsh -STA 助手)

工作原理(粘贴为什么能发出去)

DSH 的发送门禁在 dsh-host-apiproxyprompt 端点:消息里含图片且当前模型不声明 image 输入(DeepSeek 只有 ["text"])时,直接拒绝发送。

本插件不改这个门禁,而是在更早的一环把图片变成文本:注入的 bridge.js 在捕获阶段拦截带图的粘贴(纯文本粘贴不干预),把图片上传成官方附件,再往输入框插入文本引用 [图片] sha256:…。消息发出时是纯文本,门禁永不触发;模型看到引用后调用 identify_image/edit_image 解析附件文件交给 Codex 识别。

粘贴图片 ──► bridge.js 拦截 ──► POST /codex-media/upload ──► ctx.attachments(sha256)
                                                                        │
模型 ◄── 文本引用 [图片] sha256:… ◄── 插入输入框 ◄──────────────────────┘
   │
   └─► mcp__codexmedia__identify_image ──► 解析附件路径 ──► codex exec -i ──► 文本回答

依赖

  • DSH ≥ 0.1.0-rc.6,Node ≥ 22.19
  • 本机安装并登录 ChatGPT 的 Codex CLI(识图/生图/改图走 Plus 额度)
  • Windows(剪贴板助手用 pwsh -STA;非 Windows 上 clipboard 输入不可用,其余功能正常)

安装

# 1) 把插件装进 profile 并注册为 bundle(参考 dsh-vision-proxy 的安装方式)
dsh plugin --profile web add github:yujianjian1013/dsh-codex-media
# 或手动: profiles/<name>/package.json 的 dependencies 加
#   "dsh-codex-media": "github:yujianjian1013/dsh-codex-media"
#   并在 dsh.profile.bundles 里加 "dsh-codex-media",然后 pnpm install

包内的 cordis.patch.yml 会自动插入 host 插件行。MCP 行是机器相关的,加到你 profile 自己的 cordis.patch.yml:

- insert:
    - id: mcp-codexmedia
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: codexmedia
        transport: stdio
        command: node
        args: !!js '(() => { const { createRequire } = process.getBuiltinModule("node:module"); const home = process.env.DSH_HOME || ((process.env.USERPROFILE || "") + "/.dsh"); return [createRequire(home + "/profiles/web/package.json").resolve("dsh-codex-media/mcp/server.mjs")]; })()'

重启 dsh web,刷新页面。

使用

  • 识图:在输入框 Ctrl+V 粘贴图片(截图 Win+Shift+S)→ 自动出现 [图片] sha256:… → 发送,模型会自己调 identify_image。也支持直接说"识图一下剪贴板"(image: clipboard)。
  • 生图:直接说"画一只……"→ 模型调 generate_image,output_path 按会话工作目录传入。
  • 改图:粘贴参考图 + "把它改成……"→ edit_image 带参考图重绘。

注意

  • 生图/改图消耗 ChatGPT 订阅的图像额度;原图留存在 ~\.codex\generated_images,可定期清理。
  • Codex 连接 chatgpt.com 时 WebSocket 偶发重置(10054)会自动降级 HTTPS 重试,属正常现象。
  • scripts/ 里保留了一个不依赖 DSH 的纯 PowerShell 版(codex-media.ps1,见 scripts/README.md)。

License

MIT