# dsh-agent-teams-fish v0.7.0

**第四轮厂商素材版**：厂商命名空间 **17 → 18**，新增 **MiMo（小米 MiMo）**。

MiMo 同样只有「厂商通用图 + 立绘高清」这一档素材（**没有 Q 版岗位图**），与既有的 `meta` / `mistral` / `rwkv` / `seed` / `ernie` / `stepfun` / `jev` 同档：成员请求 `member-<vendor>-<role>-v2.png` 时第 1 跳落空，**第 2 跳命中自家厂商角色**（降级链序自 [0.5.1](v0.5.1.md) 起已是 `vendor+role → vendor → role`），头像照常显示、不破图。

## 本版改动

### 一、厂商命名空间 17 → 18

- `src/artwork-source.ts`：`ARTWORK_VENDORS` 追加 `mimo`。这个数组同时是宿主端的**放行白名单**（`artworkCandidates` 只服务登记在册的 token）与队长图的**可达性判据**（`leadArtUrl` 对未登记 token 会回落），漏登记就是「素材在包里但请求永远 404」或「队长头像不跟随路由」。
- `scripts/verify.mjs`：三处硬枚举同步 —— `ARTWORK_VENDOR_ALT` 正则、`GENERIC_ONLY_VENDORS`、以及 `ARTWORK_VENDORS.length === 17` 这条断言（改为 18）。两档合起来必须恰好等于 `ARTWORK_VENDORS`，多一个少一个都失败。
- `scripts/import-vendor-artwork.mjs`：`VENDORS` 同步，保证以后用 `pnpm import:artwork` 导入 `member-mimo-*.png` 一类文件时不被判成「无法识别」。

### 二、厂商识别规则

| token | 命中 |
|-------|------|
| `mimo` | `mimo` / `mimo-*`（`mimo-v2` / `MiMo-7B` / `mimo-vl`）/ `xiaomi` / 小米 |

**边界是这条规则的主要难点**，两个方向都要守住：

1. **不能吞掉相邻厂商**。`mimo` 与 `minimax` / `mistral` 同以 `mi` 开头，若图省事写成裸 `\bmi[\w.-]*`，这两家会被整片吞成小米。实际规则不含 `minima` / `mistral` 子串，反向也不成立，所以两条互不干扰。
2. **不能吞掉普通英文词**。若写成宽松的 `\bmimo[\w.-]*`，`mimosa` / `mimolette` 会被误判成厂商。所以规则要求 `mimo` 后面**是词边界或分隔符**（`\bmimo\b|\bmimo(?=[\d_.-])[\w.-]*`）。与 `hunyuan3` 那类必须吸收无分隔符后缀的情形不同，MiMo 的真实模型 ID 一律带分隔符（`MiMo-7B` / `mimo-v2` / `mimo-vl`），收紧不会漏掉真实 ID。

`xiaomi` 用 `\b` 收尾，避免 `xiaomian` 之类被误吞。正反两组边界都由单测钉住。

### 三、素材（+3 文件，286 → 289）

| 文件 | 规格 |
|------|------|
| `member-mimo-v2.png` | 256×256 8-bit RGBA（93.8 KB） |
| `member-mimo-full-v2.webp` | 1024×1536，alpha WebP q90（261 KB） |
| `brand-mimo.svg` | 24×24 圆角方底 + 内联 path（309 B） |

素材由用户提供的 1024×1536 透明背景 PNG 生成：头像按正方形居中裁切（**取上部对齐**，让头部与上身进入方框）后 LANCZOS 缩到 256×256；立绘等比缩到 1024 宽并以 WebP q90 保留 alpha。**透明度经逐角点核验**（四角 RGBA 均为 `(0,0,0,0)`），与既有厂商素材一致。

### 四、⚠️ `brand-mimo.svg` 是自制简版字标

仓库门禁 `every vendor ships its own artwork tier` **强制每个厂商都必须有 `brand-<vendor>.svg`**。本版按既有归一化口径自制了一个简版 Mi 字标（小米橙 `#FF6900` 圆角方底 + 白色 `mi` path），**不是官方商标文件**。拿到官方素材后直接替换同名文件即可，命名与尺寸口径都不用改。

## 验证

- `pnpm typecheck` 双半区通过（`tsconfig.json` + `tsconfig.client.json`）；
- `artwork-role-match.test.mjs`：**42/42** 通过（新增 4 条 MiMo 正例 + 1 组防误伤负例，钉住 `minimax` / `mistral` / `mimosa` 三个不得被吞的方向）；
- `custom-artwork.test.mjs`：**21/21** 通过（命名空间断言同步到 18，MiMo 纳入「通用档第二跳可达」名单）；
- `scripts/verify.mjs`：**all checks passed** —— 素材门禁逐张断言全部厂商素材的尺寸、格式、编码与 alpha，并钉住「厂商 + 岗位第一跳」「通用档第二跳」「队长图跟随路由」三条可达性；
- 素材目录 289 个文件。
