Skip to content

v1.2.0 — 密钥来源收敛 + 密钥格式

Choose a tag to compare

@bug-huntter bug-huntter released this 11 Sep 05:49
· 2 commits to main since this release

v1.2.0 — 密钥来源收敛 + 密钥格式

按「密钥只有一个来源」重做设置项:去掉一个会静默换 key 的间接层,并把"没带 key"变成一句能照着做的提示。

破坏性变更(配置项)

项目 v1.1.4 及更早 v1.2.0
密钥来源 apiKeyEnv(环境变量/凭证名)> apiKey > 复用同 Base URL 路由的密钥 只有 apiKey(设置页 API Key 字段)
「密钥来源(变量名)」栏 有 已移除(旧的 apiKeyEnv 值被忽略)
路由复用 兜底生效,会静默换成别的路由的密钥 彻底移除,绝不再替换你填的 key
密钥格式 无(固定 Authorization: Bearer) 新增:openai / anthropic / gemini / azure
未填 key 时 可能复用路由密钥,或收到上游那句看不懂的 401 发请求前就报「未携带 API Key」,并指明去哪个字段填
401/403 提示 只提示"密钥来自路由复用" 点名「已按 <格式> 携带密钥但被拒绝」,指向格式是否匹配
保存前测试 key 为空按"无法验证"放行保存 key 为空直接阻止保存,并给出「未携带 API Key」

新增「密钥格式」

端点始终是 {baseUrl}/chat/completions,只切换鉴权请求头(主机端与浏览器测试共用同一个实现):

格式 请求头 适用
openai(默认) Authorization: Bearer <key> OpenAI、OpenRouter、火山方舟 ARK、DeepSeek 及多数兼容网关
anthropic x-api-key: <key> + anthropic-version: 2023-06-01 Anthropic 风鉴权的网关 / 代理
gemini x-goog-api-key: <key> Google 风鉴权的网关 / 代理
azure api-key: <key> Azure OpenAI 风鉴权的网关 / 代理

本版只切换鉴权请求头,不切换端点与报文(选 anthropic 不会改走 /v1/messages,选 gemini 不会改走 generateContent)。要直连官方 Anthropic / Gemini 原生协议,仍需一个把它们转成 OpenAI 兼容格式的网关。

未携带 API Key 时的提示

主机端在发出请求之前就判定并写日志,浏览器端「测试连接」用的是同一条提示:

[图片转写失败:未携带 API Key:请在 设置 → 识图模型配置 的「API Key」字段填写密钥
(当前密钥格式:openai,如与密钥不匹配请在同页切换)——该图片未传递给模型]

不会再出现"图没送到模型,却只给一句看不懂的 401"。

迁移

升级后打开设置页,确认 API Key 已填、密钥格式与服务商匹配即可。旧行为等价于新版 密钥格式 = openai,OpenRouter / ARK / OpenAI 用户无需改动;settings.yaml 里遗留的 apiKeyEnv 会被忽略(可直接从配置文件中删掉)。

修复与测试

  • 保存可靠性:设置页 keyFormat 走一次原子 mutate 并读回校验是否真的落盘(DSH 契约里被拒的写入不抛异常)
  • 回归测试:test/key-resolution.test.mjs(6)、test/auth-headers.test.mjs(21,新增)、test/commit-settings.test.mjs(20)
  • 同时包含此前仅发布在 GitHub 的两个修复:v1.1.3(显式填写的 API Key 优先于路由复用)与 v1.1.4(保存被拒时不再静默丢弃草稿)

安装 / 升级

# npm
dsh plugin --profile web add @lp181818/dsh-vision-plugin@1.2.0

# 或:设置 → 插件 → 市场 → 更新

已安装旧版的用户:客户端改动刷新页面即可生效;主机端改动需重启 DSH(重启后「未携带 API Key」判定与鉴权头映射才会生效)。

完整变更记录:见 README 的 v1.2.0 章节。