feat: 添加守护进程(daemon)模式

- 实现 TCP Socket 守护进程,支持后台运行
- 添加 daemon 子命令:start/stop/status/logs
- 添加 send 子命令:发送文本到守护进程播放
- 添加日志级别自动检测(INFO/WARN/ERROR)
- 新日志格式:[时间戳] [级别] [PID] 消息
- 支持跨平台 ~/.config/tts/ 配置目录
This commit is contained in:
2026-04-25 05:50:28 +08:00
parent f81d1ab979
commit 19eb313bef
10 changed files with 1202 additions and 5 deletions

View File

@@ -28,6 +28,7 @@
- 4: 文件操作失败
### 文档要求
- 每次不管是从plan切换到build还是开始生成代码都必须先保存上下文到对应的文档防止丢失操作记录
- 每次操作前必须更新对应文档
- 代码变更同步更新 changelog.md
- 踩坑记录及时写入【认知修正】章节
@@ -66,3 +67,27 @@
**解决方案**:在代码中同时设置两个 Header
**经验**:阅读 API 文档时要注意认证方式的特殊性,不能假设与标准 OpenAI API 完全一致
### 2026-04-25 - 守护进程功能开发
#### 问题clap derive 模式参数传递
**现象**`--port` 参数无法传递给 `daemon start` 子命令,报错"unexpected argument '--port' found"
**原因**:在 clap derive 模式中,父命令的参数需要在子命令之前使用,不能放在子命令之后
**解决方案**:修改 `DaemonCommand` 为独立结构体,`--port` 参数定义在父命令级别,使用正确的参数顺序
**正确用法**`mimo-tts daemon --port 9876 start`
**错误用法**`mimo-tts daemon start --port 9876`
**经验**clap derive 模式中,参数位置很重要,父命令的参数应该在子命令之前
#### 问题chrono 依赖缺失
**现象**daemon.rs 中使用 `chrono::Local::now()` 但 Cargo.toml 未添加 chrono 依赖
**原因**:代码中使用了 chrono 库但忘记在 Cargo.toml 中添加依赖
**解决方案**:添加 `chrono = "0.4"` 到 Cargo.toml
**经验**:每次使用新的外部 crate 时,都要检查 Cargo.toml 中是否已添加对应依赖
#### 问题style 参数与文本内标签的并存设计
**现象**:用户要求 style 参数作为宏观场景风格,同时文本内可以包含细粒度风格标签
**原因**Mimo-TTS 官方文档支持两种方式:`<style>...</style>` 标签(宏观)和文本内 `[xxx]` 标签(细粒度)
**解决方案**
- style 参数:按官方文档转换为 `<style>...</style>` 标签放到文本开头
- 文本内标签:保留原有逻辑(`[激动]` 等格式)
- 两者可以并存,互不影响
**经验**:设计 API 时要考虑不同层次的需求,宏观参数和微观标签可以互相补充