# 独立本地唤醒与终端转写显示任务 ## 1. OpenSpec 修正与提交 - [x] 1.1 编写 `proposal.md`;前置条件:用户明确唤醒使用本地模型;验收标准:覆盖功能目标、详细需求、设计方案、风险与权衡、任务分解、Spec Deltas、实施计划、Git 提交规范;测试要点:人工检查不再把 ASR 唤醒作为默认方案;优先级:P0;预计:50 分钟。 - [x] 1.2 编写 `design.md`;前置条件:proposal 完成;验收标准:明确本地 KWS 模型、Runtime 生命周期、接口、错误处理和测试策略;测试要点:设计可映射到代码任务;优先级:P0;预计:35 分钟。 - [x] 1.3 编写 `specs/voice-pet-pipeline/spec.md` delta;前置条件:主 spec 已读;验收标准:修改 Wake word、模型管理、live runtime、终端状态和 testability 要求;测试要点:OpenSpec strict 通过;优先级:P0;预计:35 分钟。 - [x] 1.4 编写 `tasks.md` 原子任务;前置条件:design/spec 完成;验收标准:每项不超过 1 小时,包含前置条件、优先级、验收标准、测试要点;优先级:P0;预计:25 分钟。 - [x] 1.5 校验并提交 OpenSpec;前置条件:1.1 至 1.4 完成;验收标准:`openspec validate separate-wake-and-realtime-transcript --strict` 和 `openspec validate --all --strict` 通过后 commit;测试要点:中文提交信息;优先级:P0;预计:15 分钟。 ## 2. 本地 KWS 模型与配置 - [x] 2.1 扩展 `speech_models.py` manifest 和路径 helper;前置条件:OpenSpec 提交完成;验收标准:包含 KWS URL、目录、tokens、encoder、decoder、joiner、keywords;测试要点:manifest/default paths 测试;优先级:P0;预计:45 分钟。 - [x] 2.2 扩展 `download_speech_models.py` 下载 KWS 模型并写入 keywords 文件;前置条件:2.1 完成;验收标准:脚本幂等,能补齐 `models/wake`;测试要点:真实下载或 skip existing;优先级:P0;预计:60 分钟。 - [x] 2.3 扩展 `AppConfig` 和 `.env.example` wake 配置;前置条件:字段确定;验收标准:默认 `local_kws`;测试要点:配置加载测试;优先级:P0;预计:30 分钟。 - [x] 2.4 扩展 `model-check` 检查 wake 模型并尝试加载;前置条件:2.1 至 2.3;验收标准:完整模型通过,缺模型结构化失败;测试要点:临时目录和真实模型;优先级:P0;预计:45 分钟。 - [x] 2.5 验证并提交“本地唤醒模型”模块;前置条件:2.1 至 2.4 完成;验收标准:compileall、相关 unittest、security-check、model-check、OpenSpec 通过后 commit;优先级:P0;预计:20 分钟。 ## 3. Runtime 独立唤醒与实时转写 - [x] 3.1 实现 `SherpaOnnxKeywordWakeWordProvider`;前置条件:KWS 路径 helper 完成;验收标准:可加载 KWS 模型,缺文件结构化失败;测试要点:missing/fake provider 测试;优先级:P0;预计:60 分钟。 - [x] 3.2 修改 `LiveVoiceRuntime` 注入并使用 wake provider;前置条件:3.1 完成;验收标准:wake 阶段不调用 STT,唤醒命中后录正式问题;测试要点:两轮 runtime STT 调用次数;优先级:P0;预计:60 分钟。 - [x] 3.3 增加 `RuntimeReporter.transcript`;前置条件:3.2 完成;验收标准:转写结果在 LLM 前输出;测试要点:reporter 状态顺序;优先级:P0;预计:40 分钟。 - [x] 3.4 增加唤醒词污染回归测试;前置条件:3.2 完成;验收标准:LLM user message 不含 wake 音频文本;测试要点:fake wake metadata;优先级:P0;预计:30 分钟。 - [x] 3.5 验证并提交“独立唤醒与转写显示”模块;前置条件:3.1 至 3.4 完成;验收标准:compileall、unittest、security-check、OpenSpec 通过后 commit;优先级:P0;预计:20 分钟。 ## 4. 文档、真实验收与归档 - [x] 4.1 更新 README;前置条件:实现完成;验收标准:说明本地 KWS、模型下载、model-check、run-live 输出;测试要点:命令可复制;优先级:P0;预计:30 分钟。 - [x] 4.2 下载并验收 KWS 模型;前置条件:下载脚本完成;验收标准:`python3.11 scripts/download_speech_models.py --dir models` 和 `model-check` 通过;测试要点:输出不泄露 key;优先级:P0;预计:60 分钟。 - [ ] 4.3 执行真实 run-live 验收;前置条件:模型、设备、.env 齐全;验收标准:唤醒命中使用本地模型,终端显示转写结果;测试要点:单轮或两轮状态输出;优先级:P0;预计:60 分钟。 - [x] 4.4 最终门禁;前置条件:全部实现完成;验收标准:compileall、unittest、security-check、model-check、device-check、OpenSpec strict 全通过;优先级:P0;预计:30 分钟。 - [ ] 4.5 归档变更并提交;前置条件:4.4 通过;验收标准:主 spec 更新,archive 完成,最终 commit,`git status --short` 为空;测试要点:中文提交信息;优先级:P0;预计:20 分钟。 ## 5. 唤醒应答与快速端点修正 - [x] 5.1 增加唤醒后本地语音应答;前置条件:本地 KWS 已可唤醒;验收标准:wake 命中后播放“我在”再进入录音;测试要点:fake runtime 播放顺序;优先级:P0;预计:45 分钟。 - [x] 5.2 清理应答播放期间的麦克风缓冲;前置条件:5.1 完成;验收标准:应答音频不进入正式问题 VAD/STT;测试要点:transport flush 测试;优先级:P0;预计:45 分钟。 - [x] 5.3 live 默认改用本地 `sherpa-onnx` VAD 并缩短静音端点;前置条件:模型已下载;验收标准:`.env` 可配置 VAD provider、静音结束时间和最大录音时长;测试要点:配置和 runtime 构造测试;优先级:P0;预计:45 分钟。 - [x] 5.4 验证并提交“唤醒应答与快速端点”模块;前置条件:5.1 至 5.3 完成;验收标准:compileall、unittest、security-check、model-check、OpenSpec strict 通过后 commit;优先级:P0;预计:20 分钟。