sun
ec82e895c3
chore(ci): 删除 ci.yml workflow
...
该 workflow 没有实际价值:
- 仓库按策略不提供测试源码(*_test.go 被 .gitignore 屏蔽),因此其中的
go test 步骤在干净克隆上只是空转(打印 no test files 后通过),它连
"测试是否存在"都不会告诉你,自然守不住行为回归。
- 剩下的 go build / go vet 收益也很有限 —— 真正会用到编译产物的 docker.yml
在发版打 tag 时本就会完整构建一次。
删除后仓库只保留 docker.yml(打 tag 时构建并推送镜像),不再有多余的自动化。
同步清理对它的引用:
- CHANGELOG 的"新增 CI 校验"条目(改述为"没有自动化质量门")
- .gitignore 里测试策略注释中指向 ci.yml 的那句
- docs/UPSTREAM_ADAPTER_GUIDE.md 第 7 节(原表述"CI 跑不到你的测试"已不准确,
改为"没有任何自动化会跑你的测试")
2026-10-04 16:26:32 +08:00
sun
ad342ec8f1
ci: 新增 build/vet/test 质量门
...
CI / build-and-test (push) Canceled after 0s
此前仓库唯一的 workflow 只在打 tag 时构建 Docker 镜像,不做任何编译或测试校验,加上测试源码不入库,导致 go test 全绿从来没有被自动化校验过。
新增 ci.yml:push / PR 到 develop、main 时跑 go build ./... / go vet ./... / go test ./... -count=1,再单跑一遍集成测试并输出明细。版本以 go-version-file 跟随 go.mod;-count=1 禁用测试缓存。
2026-10-03 16:18:54 +08:00
sun
24f8accf71
chore: 测试源码不入库,订正过期的 UI handoff 文档与 CHANGELOG
...
.gitignore 恢复整体屏蔽 *_test.go:测试只保留在本地磁盘供开发者执行,不作为交付物外流。因此仓库内不提供自动化测试。
docs/UI_HANDOFF.md 标注为历史文档:它是改造两个单文件 .html、admin <= 35KB 的外包任务书,而 admin 后台此后已重构成多页 SPA(admin-shell.js / admin.css + 登录/音色/设置三页),原约束与验收标准全部失效。补上当前真实文件结构与新的验收清单。
2026-10-03 16:13:47 +08:00
sun
3f18f85925
fix(ui): setup 默认 resource_id 改 seed-icl-2.0
...
与 admin 同一类问题 (见 admin 修复 commit):
项目是豆包声音复刻大模型 2.0, 资源 ID 必为 seed-icl-2.0。
setup.html 错的默认值有 5 处:
1. form.default_resource_id placeholder: volc.megatts.default
2. v.resource_id placeholder: volc.megatts.icl
3. v.model placeholder: seed-tts-2.0-standard
4. form 默认 (default_resource_id): volc.megatts.default
5. form 默认 voices[0] + addVoice push: volc.megatts.icl / seed-tts-2.0-standard
修法同 admin: resource_id 改 seed-icl-2.0, model 保持 seed-tts-2.0-standard
(用户后澄清模型名独立)。
附带修:
- step 2 hint 文案从 "volc.megatts.icl 用于复刻音色" 改为
"本项目为豆包声音复刻大模型 2.0, 固定使用 seed-icl-2.0"
(避免误导用户填错资源 ID)
未 push (待用户 push)
2026-08-30 15:57:00 +08:00
sun
d22abecf12
fix(ui): store.Voice 加 JSON tag,修「音色是空的」+ UI 整体换皮
...
本次 3 个改动:
1. **【BUG 修复】store.Voice 加 JSON tag** — 用户报「进入系统音色是空的」。
实际:DB 里有数据,API 也返了。Bug 在 store.Voice 结构体没加 json tag,
Go 序列化为大写("Name"/"Speaker"/"ResourceID"/"Enabled"),而所有
admin.html 用 v.name/v.speaker/v.resource_id/v.enabled 拿,全是 undefined。
表渲染了但每格空。修复后 API 返小写,前端能正常读。
写 store/voices_test.go 加 TestVoice_JSONTags 防退化。
2. **【UI 换皮】Codex 改造 admin.html + setup.html**
- admin.html: 31KB → 58.8KB (1075 行)
加: 侧边栏 + 品牌 + 4 步导航、toast 通知系统、grid 卡片、
搜索/筛选/状态分页、stat-card 带 pill、modal + 过渡动画、
按钮大小/颜色变体、响应式字体缩放
- setup.html: 13KB → 23KB (428 行)
加: 4 步向导 + 进度条 (步骤 1: 上游凭证 / 2: 默认路由 /
3: 音色列表 / 4: 确认)、语音行 hover、确认页打码展示
- 功能完全保留: API 路径/字段/hash 路由/401 拦截都未改
3. **【小修】setup.html 装完跳转回退用 /admin 不是 /dashboard**
Codex 改的版本回退写成 /dashboard,是回归。已改回 /admin。
测试:
- 已有 store/installer/middleware/router/telemetry 测试全绿
- 新增 store/voices_test.go: TestVoice_JSONTags + TestVoice_UnmarshalTags
E2E 验证(本机):
- install 2 voices → DB 写入 ✓
- GET /api/voices 返小写 id/name/speaker/resource_id/enabled 等 ✓
- PATCH /api/voices/qian/toggle → 200 + lowercase 回包 ✓
- POST /api/voices → 201 + lowercase 回包 ✓
- GET /api/voices 再次列 3 条(原 2 + 新 1)✓
未 push (等用户测试「音色终于显示出来」)
二进制大小: ~18MB → ~18.5MB (admin.html +27KB embed)
2026-08-30 00:51:23 +08:00
sun
7984c1880a
feat(installer): M1 安装流程 + /setup 引导页
...
新增:
- installer/lock.go: lock 文件检测/创建/删除(原子写入);ErrLockExists sentinel
- installer/bootstrap.go: Detect() 启动期判定 ModeSetup/ModeNormal,
损坏自愈(自动备份 db.corrupt-<ts> + 删 lock + 回退安装模式)
- middleware/installguard.go: 安装模式白名单(/setup /api/setup /health /metrics),
中间件顺序: SecurityHeaders → InstallGuard → RateLimit → ...(避免限流计数污染)
- controller/setup.go: GET /api/setup/status + /api/setup/prefill + POST /api/setup;
token 校验用常量时间比较防计时攻击;安装后端点永久 404
- router/setup.html: Vue3 + axios CDN,4 字段表单 + 动态音色行,
调用 /api/setup/prefill 自动从旧 env 预填(API key 永不预填)
改造:
- main.go: 启动期 store.Open → installer.Detect → 注入 setup 控制器
- controller/tts.go: 安装模式双保险(/v1/audio/speech 即便漏过中间件也 503)
- controller/health.go (via dto): 加 installed + mode 字段,部署探针可识别
- router/router.go: 挂载 /setup + /api/setup/*,根路径安装模式跳 /setup
- setting/config.go: InitSetupToken 读 TTS_ADMIN_KEY 或随机生成 32 字符 hex
(公网部署建议设 env;空时启动日志一次性打印)
删除:
- router/dashboard.go: 内容并入 router/router.go
.gitignore: tts.db / tts.db-* / installed.lock 加入(运行时产物)
验收(端到端跑通,见 scripts/ 已删除):
1. 删 lock → /v1/audio/speech 503 + /setup 200 HTML
2. POST /api/setup 错 token → 401;对 token → 200 + 写 lock + 写 db
3. 重复 POST → 404(端点永久关闭)
4. /health: 安装期 installed=false,装后 installed=true
5. 损坏 db header: 自动备份 tts.db.corrupt-<ts> + 删 lock + 回安装模式
测试:
- installer: 6 个 test, 覆盖 lock 生命周期 + Detect 三态 + 损坏自愈
- middleware: 3 个 test, 覆盖白名单/denylist/自定义
- store(M0): 仍 27/27 绿, 70.7% 覆盖率
二进制大小: 9.77 → 15.87 MB (+6MB,大部分是 setup.html embed + 新包)
2026-08-29 20:44:33 +08:00
sun
dc3248d11c
chore: 转移前备份 — cleanup + project book
...
- 删 VULNERABILITY_REPORT.md(已审完,合并到 commit 历史)
- 删 middleware/ratelimit_test.go(单测延后)
- .gitignore 加 *_test.go 规则(防误提交)
- README XFF 验证段措辞更新
- 新增 PROJECT_BOOK.md(v0.1 待评审)
基线备份:目录迁移到非云盘路径前的快照。
2026-08-29 18:40:36 +08:00
sun
8be40ae6dc
chore: embed health.html 到 binary,单文件分发
...
把 health.html 从外部依赖改为 //go:embed 内嵌,
实现真正的"单 exe 分发"。
- 新建 router/dashboard.go,用 //go:embed 嵌入 health.html
- router/router.go:/dashboard handler 改为 w.Write(dashboardHTML)
- setting/config.go:删 CheckStaticFiles(无需文件检查)
- main.go:删 setting.CheckStaticFiles() 调用
- Dockerfile:删 COPY health.html 步骤(已嵌入)
- .gitignore:加 release/(build 产物不入 git)
- 物理移动 health.html 到 router/(embed 限制:同包或子包)
效果:
- 之前: release 包 = tts-api.exe + health.html (2 个文件)
- 之后: release 包 = tts-api.exe (1 个文件,~7 MB)
- 用户部署无需额外文件,/dashboard 路由直接工作
2026-08-27 11:44:44 +08:00
sun
a238e5c2a4
chore: 忽略本地 TODO.md,避免误提交
...
TODO.md 是本地待办清单,通过任务看板追踪更合适,不入 git 仓库。
2026-08-26 00:37:15 +08:00
sun
72d0d6a3a9
VUL-001 (中): aac/flac 响应 Content-Type 与真实数据不一致
...
controller.tts.go:contentTypeFor 对 aac/flac 返回 audio/aac/flac,
但 adapter/volcano/synthesis.go 在上游降级时仅修改 opts.Format,
finalFormat 仍保留 clientFormat,导致响应头与字节流不符。
修复:finalFormat 改为反映真实输出格式(非 wav 时取 opts.Format),
客户端按 AAC/FLAC 解码 MP3 流的失败场景消除。
VUL-004 (高): .env 凭据泄露
README 引导用户 cp .env.example .env 填密钥,但 .gitignore
未忽略 .env,任何 git add . 都会把含 BYTEDANCE_TTS_API_KEY
的文件提交进 git 历史,不可逆。
修复:
- .gitignore 新增 Secrets section,拦截 .env 与 .env.* 变体,
保留 .env.example 作为模板追踪
- .dockerignore 升级为同名规则模式,覆盖未来 .env.local /
.env.production 等变体,保证 git 与 docker 两通道一致
详见 VULNERABILITY_REPORT.md
"
2026-08-25 23:09:47 +08:00
sun
15b0470cc8
feat(volcano-tts): add support for v3 model parameter
...
1. 新增BYTEDANCE_TTS_MODEL环境变量支持,为火山TTS v3 API配置子模型版本
2. 为复刻音色添加默认兜底模型,修复55000000报错问题
3. 更新文档说明v3 API调用规则与环境变量配置
4. 修正语速转换的范围限制,匹配官方文档规范
2026-06-27 14:09:46 +08:00