ADR 0003:拆成三个仓库、存储改 MySQL、STT 首期走 Azure
- 状态:已采纳(2026-09-25)
- 决策者:zhibo li
- 后续:
outbrief-hook已于 2026-09-28(YOUT-200)并入outbrief-daemon(outbrief-daemon hook子命令),仓库删除;两者本来就装在同一台 Agent 电脑上,hook 离开 daemon 也没法单独工作。 - 修订:ADR 0001 第 2、3、6 条(共享
@outbrief/protocol、SQLite、pnpm workspace);ADR 0002 第 2、3 条(packages/voice、本地 SenseVoice 优先)
- 三个独立仓库,本地统一放在
~/work/code/outbrief/,各自独立开发、测试、发布。outbrief-server(asasas234/outbrief-server):Hono 服务端 + MySQL;方案文档与 ADR 也放这里。outbrief-app(asasas234/outbrief-app):Tauri 2 + React 19 客户端。outbrief-hook(asasas234/outbrief-hook):零依赖的 Agent 完成回调脚本。- 原 monorepo
asasas234/outbrief删除。
- 协议以服务端
src/protocol.ts(zod)为准。 客户端、hook 各自在src/protocol.ts手写镜像类型,文件头注明来源;改接口时三处一起改。接口面只有几个字段,不值得为此发 npm 包。 - 存储:MySQL 8(
mysql2/promise)。 本地开发用本机 docker 容器some-mysql;db/bootstrap.sql以 root 建outbrief/outbrief_test两个库和outbrief账号;表结构只由db/migrations/NNN_*.sql定义,pnpm db:migrate或服务启动时按版本顺序执行,记录在schema_migrations。所有时间列存 UTC(DATETIME(3),连接timezone: "Z")。 - 集成测试连真实 MySQL。 测试库 URL 必须以
_test结尾,否则拒绝运行,防止误清空开发库;CI 用 GitHub Actions 的 MySQL 8 service。 - STT 首期用 Azure 路径 B,客户端直连,与 TTS 共用签名和 token;本地 SenseVoice(sherpa-onnx)放二期,作为降低打断延迟的优化。
- 语音代码放客户端
outbrief-app/src/voice/。 服务端兜底POST /v1/tts使用官方AZURE_SPEECH_KEY的标准 REST,不复用路径 B 代码,因此不需要共享包。
- 用户要求按前后端拆分项目、分别上传 GitHub,并在 Multica 中分别关联仓库和本地目录。
- 本机已有 MySQL 实例,现有项目都用 MySQL;服务端部署到服务器后,SQLite 需要单独处理数据文件与备份。
- Azure STT 与 TTS 是同一套签名 / token,首期不用引入 240 MB 模型和原生依赖;实测往返 4.5 s 可接受,瓶颈出现后再换本地。
- 首次在新机器上跑服务端需要先执行
db/bootstrap.sql,再pnpm db:migrate(或直接启动服务)。 - 协议变化没有编译期保护,靠三方各自的测试与联调发现不一致。
- 打断后的识别等待约 4.5 s,UI 需要显示“正在听写”。