🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

文生图 merlotqi/dsh-image

DeepSeek Harness
merlotqi19 天前有提交已提供中文文档扫描:未发现敏感能力

用斜杠命令或智能体工具生成图片并展示

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add merlotqi/dsh-image
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · vision
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 19 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 3 处,展示前 3 条)
  • 发起网络请求
    client.js:84
    const response = await fetch(SETTINGS_PATH + method, {
  • 发起网络请求
    lib/relay.js:91
    response = await fetch(url, {
  • 发起网络请求
    lib/relay.js:164
    downloaded = await fetch(item.url, { signal });
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

为 DeepSeek Harness 提供图像生成,走 OpenAI 兼容中转(已配置 `api.ykh.ai` / `gpt-image-2`)。

README

由 DeepSeek 最新模型翻译生成
dsh-image 通过 OpenAI 兼容的中转服务为 DeepSeek Harness 生成图片(已配置为 api.ykh.ai / gpt-image-2)。 无依赖,无需构建。 注册了什么 | 入口 | 名称 | 由谁启动 | | 斜杠命令 | /image <prompt> | 你 | | 智能体工具 | generate_image | 模型 | 两者调用同一个共享操作(lib/generate.js),遵循 DSH 对用户操作和智能体工具的指导:「不要在 UI 路径和工具路径里各维护一套操作逻辑。」 命令的结果留在 UI 侧,不会进入模型历史,所以 /image 不消耗 token。工具的结果会进入对话,模型因此能展示图片并继续工作。 安装 用 file: 安装,不要用 link:。 这是唯一会让插件悄悄失效的地方。 dsh plugin --profile <profile> add file:C:/abs/path/to/dsh-image 重启一次 DSH。之后 / 会列出 image,下一个智能体也会拿到 generate_image。 为什么用 file: 而不是 link: link: 的包会从链接目标的真实路径解析自己的导入。
展开完整文档(README 剩余 1 节)
dsh-image

通过 OpenAI 兼容的中转服务为 DeepSeek Harness 生成图片(已配置为 api.ykh.ai / gpt-image-2)。

无依赖,无需构建。

注册了什么

| 入口 | 名称 | 由谁启动 |
| 斜杠命令 | /image <prompt> | 你 |
| 智能体工具 | generate_image | 模型 |

两者调用同一个共享操作(lib/generate.js),遵循 DSH 对用户操作和智能体工具的指导:「不要在 UI 路径和工具路径里各维护一套操作逻辑。」

命令的结果留在 UI 侧,不会进入模型历史,所以 /image 不消耗 token。工具的结果会进入对话,模型因此能展示图片并继续工作。

安装

用 file: 安装,不要用 link:。 这是唯一会让插件悄悄失效的地方。

dsh plugin --profile <profile> add file:C:/abs/path/to/dsh-image

重启一次 DSH。之后 / 会列出 image,下一个智能体也会拿到 generate_image。

为什么用 file: 而不是 link:

link: 的包会从链接目标的真实路径解析自己的导入。当这个路径在配置档之外——比如某个工作区——宿主的安装范围解析器就覆盖不到,于是每个裸 @deepseek-ai/ 导入都会失败,条目被丢弃并报:

dsh: warning: 1 entry did not activate
dsh-image (@local/dsh-image): failed to import

这条消息是加载器在无法创建 fiber 时抛出的裸字面量,没有别的地方会报告它:--dump-config 只做组合(从不导入),插件市场读的是组合状态,不是加载结果。所以这个失败在 UI 里完全无声。

file: 会在配置档内安装一份真实副本,那些包在那里能正常解析。(那些用 link: 也没事的零依赖插件,是因为它们只导入 node: 内置模块。)

改完代码之后

file: 是副本,所以装好的插件不会跟着你的改动走:

dsh plugin --profile <profile> remove @local/dsh-image
dsh plugin --profile <profile> add file:C:/abs/path/to/dsh-image

只重跑 add 可能被报成「Already up to date」并跳过复制,所以要先 remove。

API key

配置里只存凭据引用的名字。值在每次操作时通过 DSH 的凭据服务解析,所以轮换 key 不需要重启。解析顺序(由 DSH 固定,越靠前优先级越高):

1. 启动 DSH 时的环境变量
2. ~/.dsh/.credentials.yaml
3. <project>/.env,然后是 $DSH_HOME/.env

要持久设置,把它加到 ~/.dsh/.credentials.yaml——存储会在变更时重新加载:

version: 1
refs:
YKH_API_KEY: <your key>

有两种情况会悄悄变成「没有 key」:

- 空值(YKH_API_KEY: 后面什么都没有)——DSH 把空白视为不存在,也把空值列在它拒绝的东西里;
- 冒号后少了空格(YKH_API_KEY:sk-… 会被解析成一个普通字符串,而不是映射)。
密钥绝不会写进这个插件的配置,绝不会记进日志,也绝不会发往别处,只会发给配置好的中转服务。

来自 DSH 官方文档的提醒: 内置的凭据服务商是文件存储的,而文件权限挡不住智能体拿到密钥——智能体的工具进程以你的操作系统用户身份运行。keyring 或 KMS 服务商目前只是一处未实现的接口预留。如果这让你在意,就别把密钥放进凭据文件。

配置

这些都在配置档补丁里改,不要改代码——用户的补丁层能挺过升级:

- id: dsh-image
name: '@local/dsh-image'
config:
baseUrl: https://api.ykh.ai/v1
model: gpt-image-2
apiKeyRef: YKH_API_KEY
defaultSize: 1024x1024
requestTimeoutMs: 180000
outputDir: images

baseUrl 是到 /images/generations 之前为止的全部内容,所以换中转服务只需改配置。

响应形态

中转服务的响应格式不做假设。客户端根据 content-type 分支处理,实际见过的三种形态都能应付:

| 形态 | 处理方式 |
| 原始字节,image/* | 直接写入磁盘 |
| JSON data[0].b64_json | base64 解码(OpenAI 对 gpt-image 的默认行为) |
| JSON data[0].url | 先下载,再写入 |

实际用到哪种形态,会写进工具结果、日志行和命令摘要,所以跑一次就能确定,不用我们猜。test/relay.test.mjs 覆盖了这三种形态以及各种失败情况。

输出

图片写入 <session workspace>/<outputDir>/<timestamp>-<slug>.<ext>。

会报告两个路径:

- path —— 绝对路径,给需要真实文件系统路径的工具用
- relPath —— 工作区相对路径,用正斜杠,给 markdown 的 description 用

markdown 图片引用里放绝对 Windows 路径,既是转义隐患,转录加载器也解析不了——它是按会话工作区解析的。

开发

index.js wiring: identity, config schema, caller registration
client.js browser half: the command row's label/description/icon
lib/generate.js the one operation both callers use
lib/command.js /image adapter
lib/tool.js generate_image adapter
lib/relay.js HTTP client (three response shapes)
lib/credentials.js API-key resolution
lib/config.js defaults + the config merge
lib/context.js service lookup helper
lib/errors.js error type + logging
test/relay.test.mjs relay tests (stubbed fetch; no host, no network, no key)

跑测试:

npm test # node --test test/
node test/relay.test.mjs # same tests, in-process

有意不包含的部分

- 没有客户端 bundle。 / 入口只靠宿主侧注册就能工作(input.hint 让它成为 leadingInput 命令)。client.js 是手写的普通 JS,符合 DSH 模块加载器期望的形态——没有 rolldown/tsdown 构建步骤。
- 没有尺寸/质量弹窗 —— 这会是第一个需要真正客户端贡献的功能。
- 没有成本防护。 DSH 可以等待 tools/pre-execute 监听器返回 ask 来确认;这属于模型发起的调用。
- 没有批量 / 多图 —— 只处理 data[0]。
预览分享卡片长什么样 ↓merlotqi/dsh-image
分享 · DeepSeek Harness Hub
merlotqi/dsh-image

用斜杠命令或智能体工具生成图片并展示

这是你的仓库?认领条目

回到顶部