dsh-skin-rotation
DeepSeek Harness 智能皮肤轮换 —— 随机 / 顺序 / 加权 / 固定四种策略,可筛选候选池、可查轮换历史、配置写入崩溃安全。纯本地运行,不需要额外 AI API。
English | 中文
--- ## 它做什么 你装了四个皮肤,四个都喜欢,但每次只用其中一个。 `dsh-skin-rotation` 会在每次启动 DeepSeek Harness 时按**你选的轮换策略**启用一个皮肤,控制项都在「设置 → 皮肤」页里: | 策略 | 行为 | | --- | --- | | `random` 随机 | 每次启动换一个,可选避开最近 2 / 3 次用过的 | | `sequential` 顺序 | 按你的顺序依次轮换,重启后从正确位置继续 | | `weighted` 加权 | 按权重比例抽取(权重不必凑成 100) | | `fixed` 固定 | 始终使用指定皮肤,不做自动切换 | 它同时是**可解释、可恢复**的:哪些皮肤在候选池里、其余为什么被排除、什么时候换过什么、上一次成功的皮肤是哪一只(一键恢复)。 ``` 第 1 次启动 → 深海女仆工坊 第 2 次启动 → 虎鲸链路 第 3 次启动 → 鲸鱼娘昼夜工坊 ``` ### 不只是"随便抽一个" - **真正的候选池**:每个已安装皮肤都会被标为 `compatible`(参与)/ `excluded`(你排除的)/ `incompatible`(宿主不兼容)/ `unavailable`(读不到)。**排除 ≠ 卸载**,插件绝不碰你已安装的文件。 - **只抽宿主真能加载的皮肤**:DSH 会拒绝 `@deepseek-ai/dsh*` peer 范围不含当前运行时的插件行(补丁写着启用、但行根本不启动),naive 的随机可能抽到"死皮肤"导致一个皮肤都没有。本插件复刻了这道准入判定,并读取 profile 的 `compatibility.json` 放行记录。 - **可读的轮换历史**:时间、从哪只到哪只、触发原因(`startup` / `manual` / `restore`)、策略、结果。失败会如实记为失败,且不会进入"最近使用"集合。 - **恢复上一皮肤**:一键回到最近一次成功、且当前仍在候选池里的皮肤。 - **崩溃安全的配置写入**:轮换要改两层补丁文件,事务日志保证被中断的写入在下次启动时要么补完、要么回滚;对于"变了但不是它改的"文件,它拒绝覆盖并给出诊断。 - **带版本的状态文件**:`schemaVersion` + 向前迁移,升级不丢偏好。 ## 安装 从 GitHub 一行装: ```sh dsh plugin --profile web add github:luoyuejun9/dsh-skin-rotation ``` 从 npm 装: ```sh dsh plugin --profile web add dsh-skin-rotation ``` 或者用 [最新 Release](https://github.com/luoyuejun9/dsh-skin-rotation/releases/latest) 上的预构建 tarball——不需要构建,也不会触发 `allowBuilds` 授权: ```sh dsh plugin --profile web add https://github.com/luoyuejun9/dsh-skin-rotation/releases/latest/download/dsh-skin-rotation.tgz ``` 重启一次,然后打开「设置 → 皮肤」,轮换卡片就在这个页面底部。 > 装进桌面端而不是 web profile?把 `--profile web` 换成 `--profile desktop` 即可,两边都能用。 ## 设置卡片 ``` 设置 → 皮肤 ├── 已安装皮肤 ← 皮肤管理器自己的页面 └── 🎲 皮肤轮换 ← 本插件 ├── [开关] 启动时自动轮换 轮换模式:[随机 ▾] 近期不重复:[避开最近 2 个 ▾] ├── 当前皮肤:虎鲸链路 · 候选池 2 个 ├── ☑ 虎鲸链路 · 权重 [3] ├── ☐ 深海女仆工坊 (已排除) ├── ☐ 不兼容皮肤 (不兼容,已排除) ├── [立即换一个] [恢复上一皮肤] [重新读取] ├── 最近轮换 │ 2026-10-11 21:04 · 启动 · 官方默认 → 虎鲸链路 · 成功 └── ▸ 高级设置 (权重说明、恢复默认配置) ``` | 控件 | 作用 | | --- | --- | | **启动时自动轮换** | 关闭后启动不改动皮肤;「立即换一个」仍然可用。 | | **轮换模式** | `random` / `sequential` / `weighted` / `fixed`。`fixed` 下你指定皮肤,不再自动切换。 | | **近期不重复** | 优先避开最近 2 / 3 次**成功**轮换用过的皮肤。这只是偏好、不是阻塞:当候选池里全是"最近用过"的,它照样会选一个并如实说明。 | | **皮肤勾选框** | 是否参与轮换。取消勾选 = 排除,不是卸载;不兼容的皮肤不可被勾选。 | | **权重** | 仅 `weighted` 模式显示;填 `0` 表示不参与抽取,留空表示默认权重 `1`。 | | **恢复上一皮肤** | 回到最近一次成功且仍在候选池中的皮肤,并在历史里记为一次 `restore`。 | 在皮肤管理器里手动切换皮肤依然有效——直到下次启动,这正是这个插件的意义。 ## 工作原理 ```mermaid flowchart LR A[宿主启动] --> B{轮换开启?} B -- 否 --> Z[保持当前皮肤] B -- 是 --> C[发现已安装皮肤] C --> D[排除宿主会拒绝的皮肤] D --> E[随机抽一个,且不与上次相同] E --> F[改写 profile patch + home patch 里的