# dsh-zai-coding-models

[English](README.md) | 中文

一个 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)（DSH）桥接插件：在自带 pi-ai 目录跟上来之前，把**智谱 / Z.AI coding 套餐的最新模型**——目前是 **GLM-5.3**——补到内置的 `zai-coding-cn` 提供方路由上。

如果你买了智谱 coding / token 套餐，在 DSH 的 Models 页面添加了 API key，但模型选择器里只有上一代的模型（没有 GLM-5.3），这个插件就是为你准备的：你的 token 套餐在智谱发布新模型的第一时间就能用上——不需要升级 DSH、不需要折腾重启、不需要手改 `settings.yaml`。

## 它做了什么

DSH 从打包进依赖树的 pi-ai 目录解析每个提供方的模型列表。智谱发布新模型时（GLM-5.3 于 2026 年 8 月上线 coding 端点），目录会滞后一到两个发布周期。DSH 本身有一等的逃生口——在配置里声明提供方 profile 的 `models` 列表——本插件就是把这个逃生口打包，让 `dsh plugin add` 一步到位：

- 原样保留内置的六个 `zai-coding-cn` 模型（glm-4.5-air、glm-4.7、glm-5-turbo、glm-5.1、glm-5.2、glm-5v-turbo）；
- 新增 **glm-5.3**，按官方能力声明：纯文本、1M 上下文、128K 最大输出，思考档位 Low / Medium / High / Max（GLM-5.3 **不能关闭思考**——Low 就是最轻的档）；
- 设置端点需要的 compat 开关（`thinkingFormat: zai`、`supportsReasoningEffort: true`——少了后者，effort 参数会被静默丢弃）；
- 其他一概不碰：你的 API key、端点、其余提供方仍留在你自己的设置里。

## 安装

```bash
dsh plugin --profile web add github:auuduu/dsh-zai-coding-models   # 从 GitHub 安装
dsh plugin --profile web add dsh-zai-coding-models                  # 从 npm 安装（发布后可用）
```

（把 `web` 换成 `tui`/`headless`/你的 profile）。然后重启一次 DSH——插件 bundle 在启动时读取。你已经存好的 `ZAI_CODING_CN_API_KEY`（Models 页面写入的）原样生效；GLM-5.3 出现在原有 Z.AI Coding CN 提供方下的模型选择器里。

卸载：`dsh plugin --profile web remove dsh-zai-coding-models`。

## 原理

包里声明的 `dsh.bundle.patch` 层定向到内置的 `llm-pi-ai` 组合行，提供一份基础 provider profile：

```yaml
- id: llm-pi-ai
  config:
    providers:
      zai-coding-cn:
        models:
          - id: glm-4.5-air        # 只写 id 的条目
          - id: glm-4.7            #   从已安装目录
          - id: glm-5-turbo        #   继承全部字段
          - id: glm-5.1
          - id: glm-5.2
          - id: glm-5v-turbo
          - id: glm-5.3
            name: GLM-5.3
            contextWindow: 1000000
            maxTokens: 131072
            reasoningEfforts:
              low: low
              medium: high
              high: high
              max: max
            compat:
              thinkingFormat: zai
              supportsReasoningEffort: true
```

DSH 会把你的用户设置按提供方合并到这份 base 之上，所以只存了 `apiKeyEnv: ZAI_CODING_CN_API_KEY` 的 profile（Models 页面写出来的形态）能干净合并。同样的 YAML 也可以直接放进 `~/.dsh/settings.yaml`（不想装插件的话）——见[手动配方](#手动配方不用插件)。

## 已知限制

- **`models` 列表会替换该路由的目录**——这是 DSH 的语义，不是本插件的选择。列表随插件版本钉死，所以 pi-ai 发 `glm-5.4` 时，本插件要发新版本才会带上（而如果它已经收录了你要的模型，卸载本插件即可回到目录）。留意 releases，或者 DSH 升级后看看选择器。
- 如果你的**用户级** `settings.yaml` 已经为 `zai-coding-cn` 声明了 `models`，你的层会覆盖插件的。只保留一个来源。
- patch 替换 `llm-pi-ai` 行的整个 config；内置行目前不带 config，但若未来 DSH 版本给这一行加了 config，本插件可能需要跟进。

## 手动配方（不用插件）

加进 `~/.dsh/settings.yaml`（热生效，无需重启）：

```yaml
llm-pi-ai:
  providers:
    zai-coding-cn:
      apiKeyEnv: ZAI_CODING_CN_API_KEY   # 保留你现有的
      models:
        - id: glm-4.5-air
        - id: glm-4.7
        - id: glm-5-turbo
        - id: glm-5.1
        - id: glm-5.2
        - id: glm-5v-turbo
        - id: glm-5.3
          name: GLM-5.3
          contextWindow: 1000000
          maxTokens: 131072
          reasoningEfforts:
            low: low
            medium: high
            high: high
            max: max
          compat:
            thinkingFormat: zai
            supportsReasoningEffort: true
```

## 上游状态

pi（pi-ai 的上游项目）的 `main` 分支已经收录 glm-5.3（`packages/ai`，由 models.dev 数据库生成）；一旦 pi-ai 发版且 DSH 某个版本采纳，本插件对该模型就 redundant 了。它定位就是桥接，走的也正是 DSH 官方为生态工作推荐的贡献路径。

## 许可

MIT
