# dsh-agent-teams-fish v0.4.1

**厂商识别修复版**：混元（`hunyuan`）在面板里显示不出来 —— 头像与徽标整队回落成内置鲸鱼。查出的是**两类系统性病根**，不是「少写一个别名」，所以除混元外还一并修掉 18 处同类漏命中（`rwkv7`、`seed1.6`、`abab6.5s`、`chatglm3-6b`、`qwq-32b`、`magistral`/`pixtral`/`voxtral`/`ministral`…）。

## 病根一：尾随 `\b` 卡住「名字 + 数字」的 id

`\bhunyuan\b` 匹配不了 `hunyuan3` —— `3` 是词字符，`hunyuan` 与它之间**没有词边界**，于是整个分支不成立。同一类还有：

| 规则 | 匹配不上 | 真实模型 id |
|---|---|---|
| `\bhunyuan\b` | `hunyuan3` / `hunyuan4` | 混元 3 / 4 |
| `\brwkv\b` | `rwkv7` / `rwkv5-world` | RWKV-7 |
| `\bseed\b` | `seed1.6` | 豆包 Seed 1.6 |
| `\babab\b` | `abab6.5s-chat` | MiniMax abab 系列 |
| `\bchatglm\b` | `chatglm3-6b` | 智谱 ChatGLM3 |
| `\bqwen[0-9a-z-]*\b` | `qwen3_max` | 下划线后缀 |

改法：厂商主名一律用 `[\w.-]*` 吸收后缀，不再要求尾部边界。

## 病根二：`\b` 对 CJK **永远不成立**

JS 的 `\w` 只含 ASCII，`\b` 判定的是「词字符 / 非词字符」的交界。`\b混元\b` 两侧都是非词字符，**不存在边界**，所以这条分支从写下的那一刻起就是死代码。中招的不止混元：

`\b通义\b`、`\b智谱\b`、`\b豆包\b`、`\b文心\b`、`\b千帆\b`、`\b混元\b` —— **六条中文别名全部无效**。改法：中文一律不写 `\b`。

这条同时解释了一个现象：模型 id 写成英文 `hunyuan-*` 时正常，写成中文「混元」时怎么都不显示。

## 本版改动

- **`VENDOR_ART`**（`src/client/artwork.ts`）：
  - 厂商主名统一 `[\w.-]*`（`deepseek` / `qwen` / `glm` / `kimi` / `claude` / `gemini` / `grok` / `gpt` / `hunyuan` / `minimax` / `mistral` / `rwkv` / `seed` / `ernie`）；
  - 混元补 **`hy` 家族**：`hy3` / `hy-3-preview` / `hy_1.5` / `hy-1.8b` / `hy-mt2-pro`，另加 `腾讯`；
  - 中文别名去掉 `\b`：`混元` / `通义` / `智谱` / `豆包` / `文心` / `千帆`；
  - minimax 补 `abab[\w.-]*` 与 `hailuo`；mistral 家族**逐个列名**（`mistral` / `mixtral` / `magistral` / `ministral` / `codestral` / `devstral` / `pixtral` / `voxtral`）；qwen 补 `qwq`；glm 补 `chatglm[\w.-]*`。
- **为什么 `hy` 不做成裸 `\bhy`**：那样 `hypothesis`、`hybrid-1`、`hyperbolic`（真实存在的推理服务商）都会被吞成混元。本版只认 `hy-…` 与 `hy` + 数字两种形态，这三个词仍不命中。
- **同理 mistral 不用 `\w*stral`**：宽形态会把 `orchestral` 之类吞进来，所以家族成员逐个列名。
- **单测**（`scripts/artwork-role-match.test.mjs`）：厂商矩阵新增 20 条正例（覆盖上面每一处），并新增一条「放宽后不吞无关词」用例；测试数 28 → 30。
- **文档**：`README.md` 的「厂商识别」说明与「本版新增了什么」表格同步；顺带修掉两处版本引用未进 release-notes 链接（`verify:readme` 门禁此前是**红的**）。

## 验证

```bash
node scripts/artwork-role-match.test.mjs   # 30 pass / 0 fail
node scripts/custom-artwork.test.mjs       # 20 pass / 0 fail
node scripts/git-artifacts.mjs             # 戳与源码一致
node scripts/readme-version.mjs            # README 版本引用与 package.json 一致
```

除仓库自带用例，另用**独立探针**跑了 77 条真实模型 id（15 个厂商）：漏命中 0、误伤 0。

## 已知边界

- 只改**识别与展示**，不动素材、降级链与宿主路由；`lib/client.js` 已同步重建。
- 若你的模型 id 仍不显示，请把**完整的 `provider` + `model` 字符串**发来 —— 面板取的是这两段拼起来的路由（如 `tencent hy3`），只要两段都没命中已知 alias，就会回落成岗位通用图。

## 升级

```bash
pnpm update dsh-agent-teams-fish
```

装完**重启 DSH**。若撞上 pnpm 的供应链静置期（新发布 24h 内），升法见 [v0.3.1](v0.3.1.md) 里的说明 —— 重建 lock 后 `pnpm install --config.minimumReleaseAge=0`。