灵应
f31858a008
fix: build_release_images.sh 支持 staging/production nginx 配置分离
...
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 26h13m2s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Failing after 26h15m11s
CI/CD Pipeline / Frontend Lint (push) Failing after 26h16m14s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 26h16m14s
- 新增第二个参数 BUILD_ENV (staging|production),默认 production
- staging 构建使用 nginx-staging.conf (proxy_pass → xiaoxia-api-staging)
- production 构建使用 nginx-production.conf (proxy_pass → xiaoxia-api-production)
- CI deploy-staging 调用时传入 staging 参数
修复: web 容器在 staging 环境因 nginx upstream 指向 xiaoxia-api-production
导致 host not found 崩溃重启的问题
2026-07-08 10:38:11 +08:00
灵应
de5483a9b6
fix(ci): deploy-staging runner ubuntu-latest → saas
...
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 26h41m7s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Failing after 26h43m15s
CI/CD Pipeline / Frontend Lint (push) Failing after 26h44m12s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 26h44m12s
上次 ab0bc569 只改了 staging-e2e,漏掉了 deploy-staging。
deploy-staging 需要 Docker 环境(docker build/push),
ubuntu-latest runner 没有 Docker,导致每次构建都失败。
改回 saas runner(有 Docker + REGISTRY_TOKEN)。
2026-07-08 10:10:14 +08:00
灵应
ab0bc56976
fix(ci): revert deploy-staging and staging-e2e runner back to saas
...
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Failing after 26h50m6s
CI/CD Pipeline / Frontend Lint (push) Failing after 26h51m4s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 26h51m4s
ubuntu-latest does not have Docker installed, causing deploy-staging to fail.
The saas runner is now back online (production jobs succeeded on it).
2026-07-08 10:03:27 +08:00
灵应
332d1be41c
fix(ci): change deploy-staging and staging-e2e runner from saas to ubuntu-latest
...
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Failing after 26h53m26s
CI/CD Pipeline / Frontend Lint (push) Failing after 26h54m27s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 26h54m27s
The saas runner is offline, blocking staging deployment.
ubuntu-latest is confirmed working (validate + frontend-lint passed).
2026-07-08 10:00:04 +08:00
灵应
3634167dba
style: fix prettier formatting in 3 frontend files
...
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 26h54m44s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Failing after 27h0m5s
CI/CD Pipeline / Frontend Lint (push) Failing after 27h1m2s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 27h1m2s
- AssetLibrary.tsx
- GeneratePage.tsx
- VoiceLibrary.tsx
This fixes the CI Frontend Lint job failure.
2026-07-08 09:53:24 +08:00
灵应
6057ec18ce
fix: 修复4个单元测试断言 — 中文错误消息适配 + FastAPI路由检查
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 27h6m12s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 27h6m12s
- test_edit_plans_api: 状态校验断言改为包含'无效'关键词
- test_edit_plan_service: can_generate断言适配新错误消息
- test_config_schemas_and_ai_endpoints: AI推荐端点断言适配
- test_video_upload_fix_and_generated_api: 直接检查generated_videos router路由,
绕过FastAPI 0.139.0 _IncludedRouter惰性包装
2026-07-08 09:48:14 +08:00
灵应
8c1d37a24b
fix(P0): 修复4个P0问题 — 标题接真实数据/生成报错/素材删除/配音按钮
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 27h37m17s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 27h37m17s
P0-1: 标题选择接真实数据(GeneratePage.tsx 已调用 getTitles() API)
P0-2: 生成报错修复 — 自动转 editing 状态 + 错误翻译说人话
P0-3: 素材库加删除功能(AssetLibrary.tsx + assets.css)
P0-4: 配音库按钮彻底修复 — 上传音频+AI配音弹窗完整实现
- VoiceLibrary.tsx: 新增上传音频弹窗(拖拽上传+进度条+表单)
- VoiceLibrary.tsx: 新增 AI 配音 TTS 弹窗(文本输入+音色选择+语速+合成+保存)
- GeneratePage.tsx: 导入 updateEditPlan,generate 前自动转 editing 状态
- AssetLibrary.tsx: 新增删除按钮 + Popconfirm + handleSingleDelete
- assets.css: 新增删除按钮样式(hover 显示+红色确认)
2026-07-08 09:17:10 +08:00
灵应
1a2e2d8546
fix: 优化生成接口错误信息,将技术状态机术语改为用户友好提示
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 28h9m33s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 28h9m34s
- edit_plan_service.py: can_generate() 错误信息改为'请先编辑并保存模板后再生成视频'
- edit_plans.py: 7处错误信息改为用户友好中文提示,不再暴露内部状态名和异常类型
- test_edit_plan_generation_api.py: 更新3个测试用例以匹配新的用户友好错误信息
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-08 08:44:52 +08:00
灵应
33876d10a2
fix: voice_clone task tests - patch SessionLocal for full suite compatibility
...
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 35h37m27s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Failing after 35h40m18s
CI/CD Pipeline / Frontend Lint (push) Failing after 35h42m38s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 35h42m38s
- Add @patch('worker_app.tasks.voice_clone.SessionLocal') to all 6 test methods
- Fixes test isolation issue where sys.modules.setdefault was no-op in full suite
- Ensures SessionLocal is mocked regardless of import order
2026-07-08 01:11:54 +08:00
灵应
c74efc6618
fix: rewrite voice_clone task tests — mock CosyVoiceService + fix bind=True call
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 36h4m16s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 36h4m16s
Root causes of 6 test failures:
1. CosyVoiceService was not mocked — production code instantiates it
with real get_shared_settings() + httpx.Client() calls
2. VoiceCloneWorkflowService mocked as MagicMock doesn't execute real
poll_and_process_clone logic — not_found test needs explicit side_effect
3. Celery bind=True task.__call__ auto-passes self — passing mock_self
manually caused 'takes 2 positional arguments but 3 were given'
Fixes:
- Add @patch('worker_app.tasks.voice_clone.CosyVoiceService') to all tests
- Use patch.object(task, 'retry') for timeout retry test
- Use MagicMock for profile return values instead of real dataclass
- Call process_voice_clone(profile_id) without manual self arg
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-08 00:50:09 +08:00
灵应
7ef4b0677a
style: black format test_voice_clone_task.py
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 36h19m6s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 36h19m6s
2026-07-08 00:35:21 +08:00
灵应
ea27360c5f
fix(test): update voice_clone task tests to match actual implementation
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 36h20m20s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 36h20m20s
- Fix bind=True: pass mock self as first arg to process_voice_clone()
- Mock VoiceCloneWorkflowService instead of CosyVoiceService
- Use poll_and_process_clone() instead of poll_clone_task()
- Fix retry test: patch mock_self.retry instead of function attribute
This unblocks CI/CD pipeline so frontend fixes can be deployed to staging.
2026-07-08 00:34:06 +08:00
灵应
6ea650baf5
fix: 修复确认生成报错导致React崩溃 - 递归提取嵌套错误对象
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 36h37m55s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 36h37m55s
- client.ts: safeExtractString 升级为递归版本,处理 {code, message: {code, message}} 嵌套
- GeneratePage.tsx: catch块 extractString 升级为递归版本
- GeneratePage.tsx: 轮询错误路径 safeExtract 递归处理嵌套对象
- GeneratePage.tsx: 渲染处加 typeof 防御,确保不传对象给 React
- 修复 TS2304 变量名错误 (errorMsg → backendMsg)
2026-07-08 00:16:34 +08:00
灵应
d541808ce3
fix: Prettier格式化 + 修复voice_clone测试(mock_self回退)
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 36h54m47s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 36h54m47s
- client.ts/GeneratePage.tsx: Prettier自动格式化长行
- test_voice_clone_task.py: 回退错误的mock_self修改
Celery bind=True的task.run是绑定方法,直接调用task(id)即可
超时测试改用patch.object(process_voice_clone, 'retry')
2026-07-07 23:59:41 +08:00
灵应
8870cc287d
fix: Axios拦截器错误对象直接渲染导致React崩溃
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 37h18m40s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 37h18m40s
根因:后端返回400错误时,error.response.data.message 是对象
{code, message} 而非字符串,拦截器直接传给 antd message.error()
导致 React 渲染崩溃 'Objects are not valid as a React child'
修复:在拦截器中添加 safeExtractString 辅助函数,安全提取
错误消息字符串,如果是对象则递归提取 message/msg/detail 字段
2026-07-07 23:35:49 +08:00
灵应
1cff5d52fd
fix: 标题库API兼容直接数组返回 + 素材上传弹窗闪退修复
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 37h34m9s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 37h34m9s
Issue 2: getTitles() 兼容后端返回直接数组 [...] 和 {items:[...]} 两种格式
Issue 5: beforeUpload 改为同步返回 false(避免 async Promise 不稳定);
上传失败时延迟1.5秒关闭弹窗,让用户能看到错误提示
2026-07-07 23:20:15 +08:00
灵应
fb7ce370ea
fix: 修复生成报错时错误对象被直接渲染导致React崩溃
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 37h44m34s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 37h45m2s
问题1修复:
- 后端返回400错误时,error.message可能是对象{code,message}而非字符串
- 添加extractString辅助函数安全提取错误消息
- 确保传给message.error()和setGenerateError()的永远是string
- 修复轮询失败状态和catch block两处的错误处理
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 23:09:26 +08:00
灵应
6c75c3771e
fix: P0-1 生成接口加错误处理 + P0-2 Celery任务失败更新状态
...
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 37h50m28s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 37h50m28s
P0-1: edit_plans.py generate 端点加 try/except,捕获异常返回明确错误信息和状态码
P0-2: worker.render_edit_plan 失败时更新 GenerationTask 状态为 failed,记录错误信息
- 新增 3 个 P0-1 单测 (TestGeneratePlanErrorHandling)
- 新增 6 个 P0-2 单测 (TestRenderEditPlanFailureUpdatesGenTask)
- 全部 25 个测试通过,black + isort 格式化
2026-07-07 23:03:59 +08:00
CI Bot
5bc3440370
ci: staging部署改为Watchtower自动更新,砍掉SSH部署步骤
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 38h33m15s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Failing after 38h35m28s
CI/CD Pipeline / Frontend Lint (push) Failing after 38h36m58s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 38h37m47s
2026-07-07 22:16:44 +08:00
CI Test
7dc92191e0
test: watchtower自动更新验证(仅加注释)
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Deploy Staging (push) Failing after 38h42m26s
CI/CD Pipeline / Frontend Lint (push) Failing after 38h56m36s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 38h58m34s
2026-07-07 21:55:55 +08:00
CI Test
5028956cea
ci: staging部署接入Watchtower自动更新
...
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Deploy Staging (push) Failing after 39h4m5s
CI/CD Pipeline / Frontend Lint (push) Failing after 39h5m1s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 39h5m1s
- staging构建额外打:staging tag并push到Registry
- staging容器加com.centurylinklabs.watchtower.enable=true标签
- 容器用完整Registry路径+:staging tag启动,供Watchtower监控
- 1分钟轮询,自动检测新镜像并重启
2026-07-07 21:49:28 +08:00
CI Test
d72450f42d
ci: production deploy改为Registry方式,去掉tar/scp/docker load
...
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 39h16m53s
CI/CD Pipeline / Deploy Staging (push) Failing after 39h18m14s
CI/CD Pipeline / Frontend Lint (push) Failing after 39h19m14s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 39h19m14s
- 新增 deploy-production-registry.sh(纯Registry pull + docker run)
- 去掉源码tar打包和scp传输步骤
- nginx-production.conf 添加assets fallback(部署期间缓存用户不404)
- legacy assets自动清理(保留7天)
2026-07-07 21:35:15 +08:00
CI Test
1ed0d5aa75
fix: staging deploy script health-check url missing quotes
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 39h40m42s
CI/CD Pipeline / Deploy Staging (push) Failing after 39h42m13s
CI/CD Pipeline / Frontend Lint (push) Failing after 39h44m9s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 39h44m58s
2026-07-07 21:09:28 +08:00
CI Test
aef4febd1c
ci: fix staging build step, use build_release_images.sh (same as production)
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Production Runtime Images (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 39h49m43s
2026-07-07 21:04:48 +08:00
CI Test
d99ee6fc84
ci: staging deploy改为Registry方式,去掉tar/scp/docker load
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Deploy Staging (push) Failing after 40h1m36s
CI/CD Pipeline / Frontend Lint (push) Failing after 40h2m31s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 40h2m31s
2026-07-07 20:52:01 +08:00
CI Test
bfb11c3526
fix: prettier formatting for v0.1.125
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Deploy Staging (push) Failing after 40h57m0s
CI/CD Pipeline / Frontend Lint (push) Failing after 40h59m41s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 40h59m41s
2026-07-07 19:54:48 +08:00
灵应
9e37c7b73d
fix: 配音库AI配音按钮 + 上传按钮修复 + 多项UI修复
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 41h9m45s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 41h9m45s
- Task #197 : 配音库新增AI配音按钮 + TTS合成面板
- Task #198 : 上传音频按钮事件修复
- Task #199 : 一键生成增加标题库选择
- Task #200 : 模板库报错修复
- Task #201 : 素材库视频上传失败修复
- Task #202 : 素材库去掉配音类型
- Task #203 : 模板卡片名称位置调整
- Task #204 : 一键生成状态反馈完善
- Task #205 : 成片库页面接入真实数据
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 19:44:42 +08:00
灵应
f7a945d417
fix: 视频上传MIME白名单补全 + 成片库N+1查询修复
...
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Deploy Staging (push) Failing after 41h47m31s
CI/CD Pipeline / Frontend Lint (push) Failing after 41h49m12s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 41h49m12s
- chunked_upload.py ALLOWED_MIME_TYPES 从12种扩展到22种,与 upload.py 保持一致
新增: video/mpeg, video/x-matroska, video/3gpp, audio/flac, audio/aac,
audio/x-m4a, audio/webm, image/bmp, image/tiff, image/svg+xml
- generated_video_repository list_by_project/list_by_generation_task
改用 _to_domain() 替代 self.get(),消除 N+1 查询
- 新增 24 个单元测试覆盖以上修复及成片库 API 可用性确认
Closes #172 #173
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 19:05:14 +08:00
CI Test
a28395c318
fix: update schema snapshot and prettier formatting for v0.1.124
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Deploy Staging (push) Failing after 45h15m56s
CI/CD Pipeline / Frontend Lint (push) Failing after 45h18m5s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 45h18m5s
2026-07-07 15:36:26 +08:00
灵应
9f0c064f2a
feat: 任务4 视频查重 — 历史+批次双重去重
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 45h27m46s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 45h27m46s
- Alembic 033: generation_tasks 加 batch_id 列+索引
- Route: count>1 时生成共享 batch_id
- Repository: list_by_batch() 批次内查询
- dedup.py: check_batch_duplicate() 批次内查重
- Worker: 生成视频后创建 GeneratedVideo 记录 + 双重查重
- 单元测试: 6 个批次查重测试用例
2026-07-07 15:26:41 +08:00
灵应
1ea8fd3989
feat: P2 素材库自动匹配 - 支持 all/random/smart 三种素材选取模式
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 45h41m20s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 45h41m20s
- Schema: 新增 asset_select_mode + asset_select_count 字段
- Domain: GenerationTask 新增 asset_select_mode 字段
- Application: Command/UseCase 透传 asset_select_mode
- Route: _select_assets_from_library() 辅助函数 + 创建任务集成
- SQLAlchemy: Model/Repository 映射 asset_select_mode
- Alembic: 032 号迁移
- Worker: _download_library_assets() 支持 asset_ids 过滤
- 单测: 15 个测试覆盖三种模式 + 边界情况
2026-07-07 15:13:05 +08:00
灵应
4fee87c5e8
feat: 素材重复上传检测 + 批量生成视频
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 45h56m35s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 45h56m48s
任务1: 素材重复上传检测
- 上传接口支持 file_hash 参数,通过 MD5+素材库ID 去重
- 命中去重直接返回已有 asset_id,不重复存 OSS
- file_hash 透传: API → IngestJob → Asset 全链路
- 三条上传路径(表单/直传/分片)均支持去重
- Alembic 031: assets + ingest_jobs 加 file_hash 列+索引
- 6 个单元测试覆盖去重命中/未命中/空hash/透传
任务3: 批量生成视频
- POST /generations 支持 count 参数,一次创建多条生成任务
- 每条任务独立状态跟踪,响应返回 task_ids 列表
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 14:57:37 +08:00
灵应
a74d25e414
feat: 完成7个前端修复任务 (#190-#196)
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 45h59m59s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 45h59m59s
- #190 : 素材库视频加缩略图展示
- #191 : 视频上传进度提示(圆形动画+百分比)
- #192 : 一键生成模板名称显示用户自定义名称
- #193 : 确认生成无反应修复(增强错误处理)
- #194 : 素材选择双模式(手动选择/自动匹配)
- #195 : 多条视频生成数量输入
- #196 : 成片库404修复
2026-07-07 14:54:28 +08:00
CI Test
8219d2445d
fix: 移除多余的031 display_name migration(baseline已包含此字段)
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 47h10m46s
CI/CD Pipeline / Deploy Staging (push) Failing after 47h12m27s
CI/CD Pipeline / Frontend Lint (push) Failing after 47h13m22s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h13m22s
2026-07-07 13:41:08 +08:00
CI Test
0d871d9734
fix: 更新schema快照 - 新增tags/asset_tags表 + users.display_name字段
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 47h17m37s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h17m37s
2026-07-07 13:36:50 +08:00
CI Test
608ddbf9f7
fix: 修复migration 030离线模式下_table_exists崩溃问题
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 47h19m6s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h19m6s
2026-07-07 13:35:22 +08:00
CI Test
6cb146693e
fix: 修复TTS路由WebSocketDisconnect未导入问题
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 47h21m52s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h21m52s
2026-07-07 13:32:37 +08:00
CI Test
18571451ed
fix: 修复前端prettier格式 + 增加users.display_name migration
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 47h23m30s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h23m30s
- 修复6个前端文件的Prettier格式问题
- 新增031 migration: users表增加display_name列
2026-07-07 13:31:01 +08:00
灵应
2bcbd54ed7
feat: 最后一公里 — TTS 合成结果保存到配音库接口
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 47h30m9s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h30m9s
- 新增 POST /tts/jobs/{id}/save-to-library 接口
- 自动携带音色名、时长、语速等元信息到 metadata
- 配音库配额检查(429 响应)
- 15 个单元测试全部通过
- 全部 115 个 TTS 测试无回归
2026-07-07 13:24:08 +08:00
灵应
d1c83de698
feat: TTS 生成页加存为素材功能
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 47h32m26s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h32m26s
- 合成完成后显示「存为素材」按钮,点击弹出保存弹窗
- 弹窗支持改名称、选标签(预设标签 + 自定义新增)
- 保存成功后提示「去素材库查看」可跳转配音素材库
- 新增 saveTtsToLibrary API 对接后端 POST /tts/jobs/{id}/save-to-library
2026-07-07 13:21:39 +08:00
灵应
2849123bd7
feat: P2 WebSocket 流式合成
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 47h49m26s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h49m26s
- 新增 TTSStreamingService 流式合成服务
- 实现 /ws/tts/stream WebSocket 端点
- 短文本(≤500字):合成完整音频后分块推送
- 长文本(>500字):分段并发合成,逐段推送
- 通过 asyncio.to_thread 桥接同步 CosyVoiceService
- 二进制帧 4KB 分块推送音频数据
- 10 个单元测试全部通过
2026-07-07 13:04:59 +08:00
灵应
d6ab413dcd
feat: P1 长文本分段合成
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 47h57m37s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 47h57m37s
- 新增 text_splitter.py: 长文本智能分段(句子边界 + 短段合并)
- 新增 audio_merger.py: FFmpeg concat 音频合并器
- workflow.py: 分段合成完整流程(同步合并 / 异步轮询 / 失败处理)
- tts_synthesis.py: 新增 process_tts_segment_synthesis Celery 任务
- tts.py: 路由层自动识别分段任务并分发到对应 Celery task
- 23 个单元测试全部通过,P0 回归测试无退化
2026-07-07 12:56:52 +08:00
灵应
c47aed95fc
feat(tts): P0 音频转存 OSS — 合成完成后下载临时音频上传 OSS 存储永久 URL
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 48h27m21s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 48h27m21s
- TTSWorkflowService 新增 _transfer_audio_to_oss 方法
- start_synthesis 同步路径和 process_synthesis_result 均集成 OSS 转存
- OSS 转存失败时优雅降级,回退到 CosyVoice 临时 URL
- 支持 mp3/wav/pcm/opus 格式 content-type 映射
- 新增 9 个单元测试覆盖转存成功/失败/降级场景
- 向后兼容:storage_service 为可选参数,现有调用方无需修改
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 12:27:06 +08:00
灵应
8e2e1e1357
feat(voice-materials): 标签管理 UI 对接后端标签 API
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 48h32m19s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 48h32m19s
- api/tags.ts: 桩实现替换为真实 API(getTags/createTag/deleteTag/tagAsset/untagAsset)
- api/assets.ts: AssetItem 新增 tag_ids 字段,getAssetsByKind 支持 tag_ids 筛选
- VoiceMaterialLibrary.tsx:
- 移除硬编码 STYLE_TAGS,全面使用 API 返回的标签列表
- VoiceMaterial 接口 tags: string[] → tagIds: string[]
- mapAssetToMaterial 读取 asset.tag_ids 替代 metadata.style
- TagSelector 组件改为 ID 模式(tagId 操作 + tagMap 名称解析)
- MaterialForm 接收 tags/tagMap/onCreateTag props
- VoiceMaterialCard/VoiceMaterialRow 接收 tagMap prop 渲染标签名
- 标签筛选栏使用 API tags + filterTagId 状态
- 批量打标签改用 tagAsset API + handleBatchCustomTag 自定义标签
- 上传/编辑流程调用 tagAsset/untagAsset 管理标签关联
- filtered/tagCountMap 全部基于 tagIds 计算
2026-07-07 12:22:05 +08:00
灵应
b0f2e4712a
feat: P3 配音模块标签体系 — 标签 CRUD + 素材打标 + tag_ids 筛选
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 48h55m59s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 48h55m59s
- 新增 Tag 领域实体 + TagModel/AssetTagModel ORM 模型
- Alembic 迁移 030:tags 表 + asset_tags 关联表
- TagRepository 端口 + SQLAlchemy/InMemory 实现
- Asset.tag_ids 多对多关联替代原 JSON tags
- GET /tags / POST /tags / DELETE /tags/{tag_id} 标签 CRUD
- POST /assets/{asset_id}/tags 打标 / DELETE 取消标签
- GET /assets 新增 tag_ids 筛选参数(逗号分隔,取交集)
- 19 个单元测试全部通过
2026-07-07 11:58:27 +08:00
灵应
d60a963b62
feat(voice-materials): P3 标签体系 UI — 药丸筛选栏 + TagSelector + 溢出处理 + 批量自定义输入
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 48h58m54s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 48h58m54s
- 标签筛选栏:Select 下拉替换为水平可滚动药丸条,显示使用计数
- 编辑弹窗:TagSelector 组件,支持自定义输入回车添加、已选标签可移除、预设快捷选择、自动补全
- 卡片/行标签溢出:卡片最多3个、行最多2个,超出显示 +N Tooltip
- 空标签态:无标签时显示「添加标签」虚线按钮
- 批量打标签 Popover:顶部新增自定义输入框,回车即可批量添加
- 交互走查:全失败时显示 error 消息、键盘可访问、过渡动画
- 新建 api/tags.ts 桩文件,预留后端标签 API 切换点
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 11:55:34 +08:00
灵应
d698d78b35
feat(voice-materials): 配音模块体验打磨 — 批量操作/上传进度/播放器优化
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 49h22m24s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 49h22m24s
- 配音素材库批量操作:多选删除、批量打标签(Popover 选标签)
- 上传配音进度条:XMLHttpRequest 替换 fetch,实时百分比进度
- 试听播放器优化:暂停恢复、进度条拖拽 seek、音量控制
- 整体交互走查:错误处理、空状态提示、动画过渡
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 11:32:03 +08:00
灵应
f8bc252ded
feat(assets): 批量删除接口 + 分页性能优化
...
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Failing after 49h30m34s
CI/CD Pipeline / Deploy Staging (push) Failing after 49h34m18s
CI/CD Pipeline / Frontend Lint (push) Failing after 49h36m48s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 49h36m54s
- 新增 POST /assets/batch-delete 批量删除素材接口
- 仓储层: abstract/SQLAlchemy/InMemory 均实现 batch_delete()
- API层: 逐项校验项目权限后批量删除
- Schema: BatchDeleteRequest/BatchDeleteResponse
- GET /assets 分页优化: 无 keyword/gender/style 过滤时走 DB 级 skip/limit
- 素材上传 duration 字段已全链路支持(domain/schema/ORM/repository)
- 新增 4 个批量删除单元测试,全量 1030 测试通过
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 11:06:24 +08:00
CI Test
d1970bd44b
fix: prettier formatting for voice material module files
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Production Runtime Images (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
2026-07-07 11:04:30 +08:00
灵应
734d7eb377
feat: 配音素材库统一入口 + 搜索筛选 + 剪辑编辑器配音体验优化
...
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 50h14m10s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 50h14m10s
1. 全局收敛硬编码配音/音色数据到配音素材库 (Task #170 )
- CloneVoiceModal: 替换硬编码音色列表为素材库 API
- GeneratePage: 配音选择改为从素材库选取
- MyVoices: 统一展示素材库中的配音
2. 配音素材库增加搜索框和筛选 (Task #171 )
- 关键词搜索、性别筛选、风格标签筛选
- 对接后端 getAssetsByKind 筛选参数
3. 剪辑编辑器配音选择体验优化 (Task #172 )
- 共享 React Query 缓存 (queryKey: ['assets','voice'])
- 新增试听播放/暂停按钮
- 下拉选项显示性别标签
- 加载状态 + 刷新按钮
- 空状态提示
2026-07-07 10:40:16 +08:00