DSH Desktop 对话内联生图插件:模型在对话中调用 generate_image,图片直接显示在对话框内。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:Github-CJX/dsh-tool-imagegen
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness Desktop 对话内联生图插件 — 模型在对话中自动调用 generate_image 工具,图片直接内联显示在对话框里,无需外部面板、无需手动切换。
对接任意 OpenAI 兼容的 /images/generations 接口(默认 gpt-image-2),当前模型是纯文本输入也能正常使用。
特性
- 纯对话触发 — 模型听到「帮我画 / 生图 / 生成插画」等请求时自动调用
generate_image,参数(prompt / size / n)由模型自己组织 - 对话内联显示 — 生成的图片以卡片形式直接出现在对话流中,带 下载按钮;不是外部面板,不弹新窗口
- 双模型兼容 — 通过自定义
generated-image内容块展示图片,模型侧永远看不到图片块(contentHasImage只匹配image块):- 纯文本输入模型:不会触发
UNSUPPORTED_CONTENT,生成后可以继续正常对话 - 图像输入模型:同样正常工作,无需任何配置
- 纯文本输入模型:不会触发
- 设置页可配置 — 设置 → 插件 → 可配置 中的「生图插件」卡片:接口地址、API 密钥、模型名、默认尺寸、默认张数、启用开关
- 零配置迁移 — 复用旧插件
@dickpy/dsh-imagegen的dsh-imagegen设置命名空间,已存在的apiUrl/apiKey自动继承 - 安全设计 —
- API 密钥只在宿主侧保存(settings.yaml),绝不进入浏览器,设置页不回显
- 设置桥与附件桥均为 loopback 围栏,仅本机浏览器可访问
- 附件桥按「会话事件里是否存在引用该附件的
generated-image块」授权,与平台自身的附件授权模型一致
快速开始
# 1. 把插件目录放到 DSH 插件目录
cp -r dsh-tool-imagegen C:/Users/CJX/.dsh/plugins/
# 2. 在 desktop profile 挂载(见 docs/installation.md 的完整步骤)
# package.json 添加依赖 + bundles,然后:
cd C:/Users/CJX/.dsh/profiles/desktop
pnpm install
# 3. 重启 DSH,在对话里说「生成一个猫咪的图片」
完整安装步骤见 docs/installation.md,问题排查见 docs/troubleshooting.md。
工作原理
用户: "帮我画一只戴帽子的橘猫"
│
▼
模型 ──调用 generate_image──▶ 插件宿主侧 execute()
│ │ 读取设置(apiUrl / apiKey / model)
│ ▼
│ OpenAI 兼容 /images/generations
│ │ 返回 b64 图片
│ ▼
│ ctx.attachments.saveImage() 存入本机附件库
│ │
│ ▼
│ render() 产出 { type: 'generated-image', attachment, prompt, ... }
│ │
▼ ▼
模型只看到随附的文本信封 客户端 keyed toolview 卡片
("已生成 1 张图片…") │
▼
<img src="/api/dsh-tool-imagegen/attachment?session=…&id=…">
附件桥做会话引用检查后返回图片字节 → 内联显示 + 下载按钮
三个关键设计:
generated-image块(而非平台惯用的image块) 模型层的图片检测contentHasImage只匹配type: 'image',generated-image块对模型完全不可见 —— 这是 text-only 模型能安全使用的根本原因。插件自带 loopback 附件桥 平台的附件授权(
referencedImage)只扫描会话事件里的image块,而本插件出于上面第 1 点故意不写image块,所以图片字节由插件自己的桥提供:GET /api/dsh-tool-imagegen/attachment?session=<会话>&id=<附件ID>桥会重新扫描该会话的事件,确认存在引用此附件的generated-image块才返回字节 —— 与平台授权同一套信任模型,只是换成了本插件的块类型。工具 schema 使用完整 JSON Schema 形态 注册时
parameters必须是对象根 schema({ type: 'object', properties, required }),平台会原样投影进模型请求,上游网关对缺失type: 'object'的 schema 会直接拒绝。
设置项
| 字段 | 默认值 | 说明 |
|---|---|---|
| 启用 | 开 | 关闭后对话中的生图请求被忽略 |
| 向模型告知能力 | 开 | 写入系统提示,模型更可能自动调用 |
| 接口地址 | https://api.ephone.ai/v1 |
OpenAI 兼容 base URL |
| API 密钥 | (继承旧配置) | 仅存本机设置文件,不回显 |
| 模型 | gpt-image-2 |
上游模型名,可手写修改 |
| 尺寸 | 1024x1024 |
如 1024x1792 / 1792x1024 |
| 张数 | 1 |
一次生成几张(1–4) |
设置保存在本机 settings.yaml 的 dsh-imagegen: 段,保存后立即生效,无需重启。
仓库结构
dsh-tool-imagegen/
├── lib/ # 宿主侧(Node ESM)
│ ├── index.js # 插件入口:设置段、工具注册、附件桥挂载
│ ├── engine.js # 上游 /images/generations 调用
│ ├── routes.js # 设置桥 + 附件桥路由(loopback 围栏)
│ └── protocol.js # 与客户端共享的路径/命名空间常量
├── src/client/ # 客户端(浏览器侧,rolldown 打包)
│ ├── index.ts # 入口:设置卡片 + toolview 注册
│ ├── GenerateImageView.tsx # 内联图片卡片(含下载按钮)
│ ├── SettingsCard.tsx # 设置页卡片
│ └── locales.ts # zh / en 文案
├── build-client.mjs # 客户端构建脚本
├── smoke-client.mjs # 客户端冒烟测试
└── cordis.patch.yml # profile bundle 注册补丁
开发
# 宿主侧改动直接生效(重启 DSH)
# 客户端改动需要重建:
node build-client.mjs && node smoke-client.mjs
兼容性
- 插件工作目录:
C:\Users\CJX\.dsh\plugins\dsh-tool-imagegen - 平台包路径:DSH Desktop
resources/app.asar.unpacked/node_modules/@deepseek-ai/ - 不依赖旧插件
@dickpy/dsh-imagegen(已彻底移除)
License
MIT © 2026 CJX
链接
同类插件
superdesigndev/treg★ 460
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
zhaoolee/notes★ 146
将 DSH 对话导出为锤子便签风格 PNG,或在配置的账号工作区中新建和更新 Markdown 便签。
taxueseek/argo★ 100
专为 agent 打造的搜索工具:多语言,覆盖中文/英文/学术/代码/购物/金融/新闻/百科。
omdsh-dev/dsh-data-agent★ 52
让 AI 帮你连数据库、写 SQL。
heartleo/hn-cli#hacker-news★ 50
用于获取 Hacker News 榜单、讨论串、搜索和用户资料的工具。
geml-spec/geml#integrations/dsh-plugin★ 24
按块寻址的文档读写:MCP server 提供 geml_get / geml_set / geml_check 等工具,Agent 只取回或改写 Markdown、GEML 文档中的某一个块,而不是整篇文件。另带 GEML 写作技能,以及把项目调用图构建为 GEML codemap 并浏览的代码图谱技能。