# dsh-ikun-pet · 深潜进度档位表

DSH 每次回答问题的 Deep diving 期间，插件在「Deep diving...」状态行下方的整行区块渲染：

- 坤宠动图（`assets/spritesheet.webp`，沿进度条行走）
- 进度条：`0% → 100%`
- 每 20% 切换一档：动图动作与文案同步变化

## 档位 → 动作 → 文案

| 进度区间 | 动图动作（精灵图行） | 文案 |
| ---: | --- | --- |
| 0% – 20% | waiting（第 6 行 · 期待） | 深潜启动！准备出发… |
| 20% – 40% | runRight（第 1 行 · 向右跑） | 正在收集线索… |
| 40% – 60% | working（第 7 行 · 专注干活） | 埋头苦干中… |
| 60% – 80% | review（第 8 行 · 思考审阅） | 认真思考中… |
| 80% – 100% | wave（第 3 行 · 挥手） | 快好啦！马上见结果~ |
| 100%（完成） | jump（第 4 行 · 跳跃庆祝） | 完成啦！你干嘛~哎哟 |

## 进度策略（v1.2 · 通用自适应模型）

DSH 的回合没有真实百分比总量，插件采用**分层估算**，真实信号优先、时间模型兜底：

| 层 | 信号 | 说明 |
| --- | --- | --- |
| 锚点 | 回合开始 / 结束 | 0% 与 100% 永远真实，100% 只在真正完成那一刻出现 |
| 真实进度 | goal 回合进度 | 目标模式开启时，按 `已进行回合数 / 目标回合上限` 直接给出真实百分比（Host RPC 每 2s 同步） |
| 自适应预期 | 本会话历史回合时长 | 取最近 8 个回合时长的**中位数**作为预期时长（自校准：短任务快跑、长任务慢跑），无历史时默认 45s |
| 活动调速 | 工具调用 / 流式输出 / 等待 | 工具执行 ×1.8、流式输出 ×1.2、等待用户审批/回答 ×0.05（诚实减速，不会在你阅读时涨满） |
| 收缩保留量 | 完成保留量 | 封顶从 88% 起，跑得越久越接近 98%，**永不假 100%**、也永不卡死 |

进度计算（每个 200ms 刻度）：

```
timeP    = 100 × (1 − e^(−workTime / tau))      # tau = expected / 3
workTime += dt × pace                            # pace 随活动信号变化
goalP    = roundsStarted / maxGoalRounds × 100   # 真实信号
reserve  = max(2, 12 × e^(−elapsed / (2×expected)))
progress = min(100 − reserve, max(timeP, goalP)) # 单调不减
```

- 完成后停留 1.8s 播放跳跃庆祝动画（进度条变成功色），随后整块退场
- **完成瞬间**由宿主进程用系统命令播放 `assets/voice.mp3`（「你干嘛~哎哟」），
  与浏览器静音无关；可用 `CONFIG.playVoiceAtDone` / `playCommand` 开关或更换播放器

全部模型参数集中在 `src/client.js` 的 `MODEL` 常量中，可直接修改。
