# 变更记录 本文件记录 dsh-gsv-tts 的所有版本更新。格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 ## [4.1.0] - 2026-08-31 ### Edge 音色体验优化 - 新增云端(Edge)音色试听路由 `/dsh-gsv-tts/provider/preview`:无论当前处于本地模式还是云端模式,都可直接试听云端音色(`voice` = 云端音色 id,强制走 edge 提供方),面板试听云端音色不再依赖当前 provider - Edge 音色显示名本地化:中文音色显示官方中文名(晓晓/云希/云野/晓伊…,方言如 晓北(辽宁)/晓妮(陕西)),主流英文音色显示简写名(Aria/Guy/Emma/Sonia),其余从 FriendlyName 截短(去除 "Microsoft … Online" 前缀) - 单测联动更新:中文/英文音色显示名断言 + FriendlyName 截短行为覆盖 ## [4.0.0] - 2026-08-31 ### 简单模式(Edge 云端第二 Provider) - 双 Provider 抽象:`gsv`(本地克隆/离线专业模式)+ `edge`(微软 Edge 云端简单模式),按 `config.provider` 分发,接口 `{kind, listVoices, stream, health}` - **迁移守卫**:老用户(settings 无 provider 字段)保持 `gsv`、声音不变;全新安装默认 `edge`;切换后写回持久化 - Edge 底层 `edge-tts-universal`(原生流式、token 自动刷新、错误恢复、代理),MP3 块零转码透传(`audio/mpeg`),复用 AudioStore/分段渐进播放/暂停下载 - 音色清单:`listVoices` 按精选序 + zh-CN/en 过滤生成(晓晓/云希/云野等 20+ 中文 + Aria 等英文) - **分层健康**:库内 error-recovery/token 刷新兜底瞬时故障;`health()` = 试合成 1 秒 + 退避(≤1 次/60s,30→60→120s,成功重置) - 设置面板:模式切换 Tab(快速体验/本地专业)+ 品质角标(🌐 云端 / 🖥️ 本地·离线)+ 音色下拉按 provider 换源 + 云端健康行与降级引导 - 新增路由 `/provider/voices` `/provider/health`;`tts_speak`/`tts_list_voices` 按 provider 分发 - `quotaDaily` 配置字段(默认不限量,仅引导文案,硬计数留待 4.x) - 单测并入 CI:迁移双分支、Edge MP3 透传、精选音色过滤、健康退避、TTSService 分发落盘 ## [3.0.0] - 2026-08-30 ### 音色 Registry 一键安装(P2) - 音色市场:包内离线清单(`docs/voices.json`)或自定义远端源(`voiceRegistryUrl`,服务端拉取带 no-cache) - 信任规则:信任 = 随插件发版内置——仅包内清单且 `trusted` 为真免确认;**任何远端清单一律两阶段确认**(即便自报 trusted),阶段 1 不下载任何字节 - 三工具 `tts_voice_registry` / `tts_voice_install` / `tts_voice_remove` + 同源 HTTP 路由 `registry/{list,install,remove}`,共享核心 - 安装:下载 → sha256 强校验 → 大小/后缀白名单 → 原子落盘 `/voices//` → 写回 `Config.voices`(id + source 账本),失败不留半成品、不写配置 - 只读托管:`source:'registry'` 音色在设置面板只读、仅可卸载;卸载按 id 精确匹配,自定义音色拒绝删,`defaultVoice` 悬空一并清空 - 面板新增"音色市场"卡:来源/信任徽标、试听(复用 /preview)、两阶段确认安装、卸载删除文件确认 - 单测并入 CI:清单校验、信任边界、原子写、卸载护栏、路径穿越 ## [2.6.0] - 2026-08-29 ### 设置面板增强(P1-3) - 每条音色新增"试听"按钮:用固定试听文案单次合成并播放(**未保存的草稿音色也能直接试听**,便于"靠耳朵挑") - 新增"全部试听(循环)":批量合成所有音色后循环播放,边听边对比,可暂停/停止;失败音色给出提示 - 面板顶栏的引擎运行状态 + 一键启停自 2.2.0 起已提供,本次无改动 ## [2.5.0] - 2026-08-29 ### 朗读净化补全(P0-1) - 过滤 markdown 表格(数据行与分隔行),只读表格外的正文 - 超长文本保护:`tts_speak` 单段上限 6000 字符,朗读/自动朗读分段上限 30000 字符,超限给出友好提示 - 空文本判断与合成口径统一:清洗后为空(只有代码/链接/表格)的回复返回明确提示 - 新增单元测试(`npm test`,基于 node:test,零新增依赖):净化器与句切分器 ### 渐进分段播放(P1-1) - 服务端新增 `TTSService.synthesizeSegments`:按句切分(中文句末标点、顿号 + 英文句点,单段 ≤ 800 字)逐段流式合成,段间 0 静音 - `/dsh-gsv-tts/speak` 返回可顺序播放的 URL 队列(`segments`),兼容旧单 URL 字段 - 前端播放器按 `