# Avatar TODO

这份清单记录 Avatar 接下来的产品方向与边界。

## P0：把舞台与桌宠接到同一个会话控制器

- [ ] 实现根级 `AvatarSessionController`，使其成为唯一的语音与表演状态所有者：
  会话事件、ASR/VAD、TTS 队列、打断、Live2D 指令和状态聚合都从 UI 表面中
  抽离。
- [ ] 舞台、Web 桌宠和 Desktop 桌宠只作为三个可切换的投影表面；切换表面时
  不销毁正在进行的语音回合。
- [ ] 保证全局只有一个 TTS 播放权，防止多个窗口或会话同时朗读。
- [ ] 定义并实现会话绑定策略：跟随主窗口当前会话、固定某个会话、自动跟随
  最新发言；界面明确显示当前绑定的会话。
- [ ] 保留普通 DSH Web 的完整降级路径；Desktop 原生窗口、全局快捷键等能力
  只能是运行时可选增强。

## P1：让桌宠成为真正的轻量会话入口

- [ ] 增加快捷文本输入，不打开主窗口即可向当前绑定会话提交内容。
- [ ] 增加快捷麦克风：按键录音和连续对话，并允许直接打断当前生成与 TTS。
- [ ] 展示当前会话名称，支持快速切换会话和跳到下一条未读。
- [ ] 增加紧凑状态指示器：会话运行中、等待工具、等待审批/回答、已完成、失败
  和未读。
- [ ] 将未读定义为“会话最新事件序号大于该客户端的 `lastSeenSeq`”，舞台、
  Web 桌宠和 Desktop 桌宠共享但分别更新可见状态。
- [ ] 支持点击提醒唤起主窗口并定位到对应会话；审批和复杂问题仍在主窗口处理。
- [ ] 增加临时字幕、静音/勿扰以及桌宠名牌开关；尺寸、位置和这些偏好均需持久化。

## P2：完善桌面交互与语音体验

- [ ] 在真实扬声器与麦克风环境验收并增强回声抑制、自适应噪声基线和自动打断，
  避免音乐、系统声音或角色自己的 TTS 被当作用户讲话。
- [ ] 支持主动说话和任务完成提醒：触发权属于 DSH Agent/自动化，Avatar 只
  接收事件并负责 Live2D、字幕和语音投影。
- [ ] 增加独立的“内心想法/舞台动作”频道，可显示短气泡或动作但永不送入 TTS。
- [ ] 增加模型区域点击、拖拽和多种触摸反馈，并允许角色包声明命中区域与动作。
- [ ] Desktop 增加锁定与点击穿透、屏幕边缘吸附、多显示器边界处理和全局快捷键。
- [ ] 把 emoji、括号、星号、尖括号及控制标记的清理实现为独立、可测试的
  “显示文本 → 朗读文本”投影规则。

## P3：可选扩展

- [ ] 视觉输入入口：从桌宠快捷发起截图、屏幕区域或摄像头附件，但复用 DSH
  的附件/工具能力，不在 Avatar 中重建旧视觉 Agent。
- [ ] 抽象角色包：Live2D 模型、角色 profile、动作协议、默认音色，以及对 DSH
  persona preset 的引用；角色包不得接管会话或 Agent。
- [ ] 评估多角色舞台；当前不支持多客户端群聊与广播。
- [ ] 如确有跨语言朗读需求，优先让 DSH 输出目标语言，其次考虑 ModelDeck 的
  无状态翻译能力，不在插件内引入翻译模型。
- [ ] 直播投影（例如弹幕）只作为未来独立适配器研究，不纳入当前核心插件。
