Commit Graph

77 Commits

Author SHA1 Message Date
小鱼开发 95fa5b6fab fix: 将 /health 路由从根路径移到 /api/v1/system/health
- 原 /health 注册在 FastAPI 根应用上,Nginx 代理 /api/v1/ 前缀无法访问
- 移到 system router 下,外部通过 /api/v1/system/health 访问
- 同步更新 docker-compose.test.yml 和 docker-compose.prod.yml 的 healthcheck 路径
2026-05-15 16:56:28 +08:00
小鱼开发 cb56698836 feat: 应用自动更新系统 + 草稿箱删除 + 分类缓存优化
- 新增 Tauri 自动更新(updater 插件)
  - Rust: 集成 tauri-plugin-updater + tauri-plugin-process
  - 后端: app_releases / release_packages 表 + /update/check API
  - 前端: UpdateDialog 组件 + useUpdater hook + SystemUpdate 手动检查
  - 发版脚本: scripts/publish_release.py(扫描 .sig → 上传七牛云 → 写入数据库)
  - 配置 test 环境域名 dev.tapi.meijiaka.cn

- 草稿箱删除功能
  - DraftListItem 添加删除按钮
  - MyWorks 添加删除确认弹窗 + localProjectApi.deleteProject 调用

- 创作主题分类本地缓存
  - scriptApi.getCategoriesCached() 先读 localStorage 再静默刷新

- TermsModal tab 居中

- 更新应用图标(Big Sur 风格圆角矩形)

- 清理: 删除未使用文件 create_user.py / video-replace-mvp.py / DEPS_*.md
2026-05-15 16:41:57 +08:00
小鱼开发 7330fdd401 fix: 生产安全检查 — 鉴权 + 资金安全 + Slot TTL
1. upload.py: /video /audio 端点添加 get_current_user 鉴权
2. caption.py: /ata/align 端点添加 get_current_user 鉴权
3. points.py: allow_negative 硬编码 False,禁止客户端控制欠费
4. slot_manager.py: TTL 1800s → 1200s,减少异常崩溃后的槽位泄漏时间
5. points.py: 顺手修复 ruff UP017(timezone.utc → UTC)
2026-05-14 23:02:40 +08:00
小鱼开发 d4a13ece17 chore: 清理后端未使用 import(9 处)
ruff --select F401 --fix 自动修复:
- deps.py: user_crud
- caption.py: ApiResponse, VolcengineCaptionService
- points.py: UTC
- tasks.py: json
- voice.py: asyncio
- main.py: init_db
- broll_category.py: Text, ARRAY
2026-05-14 22:40:01 +08:00
小鱼开发 689aef0946 refactor: 统一 sourceId 格式规范
规范: <source_type>_<user_id>_<timestamp_ms>

前端 4 处(projectId → userId):
- VideoGeneration: video_${userId}_${Date.now()}
- SubtitleBurning: subtitle_burn_${userId}_${Date.now()}
- VideoCompose: compose_${userId}_${Date.now()}
- CoverDesign: cover_design_${userId}_${Date.now()}

后端 4 处(浮点秒 → 毫秒整数):
- script.py polish: polish_${userId}_${int(time.time()*1000)}
- script.py title: title_${userId}_${int(time.time()*1000)}
- voice.py TTS: tts_${userId}_${int(time.time()*1000)}
- voice.py voice_clone: voice_clone_${userId}_${ts}_${voice_id}
  (原裸传第三方 voice_id,现包装为规范格式)

Refs: P2-1
2026-05-14 21:18:59 +08:00
小鱼开发 7550559aa0 refactor: 清理未使用IPC命令、修正point_service注释与扣费逻辑、修复camelToSnake正则、优化vidu import
- 删除8个未使用IPC命令,保留validate_media_path
- file.rs返回类型优化为ApiResponse<()>
- point_service.consume()注释与签名一致
- VideoGeneration改为拼接成功后扣费
- 添加漏扣费风险注释
- 删除过时测试文件
- 修复camelToSnake连续大写字母问题
- vidu.py import移至模块顶层

Refs: P1-1~P1-6 技术债务清理
2026-05-14 17:45:28 +08:00
小鱼开发 cf1352ed41 fix: TTS合成成功弹窗显示后端实际扣费积分 2026-05-13 17:28:15 +08:00
小鱼开发 6728f9b012 fix: TTS去掉前置积分检查、扣费允许欠费,避免402打断流程 2026-05-13 16:52:57 +08:00
小鱼开发 4579fa78d4 feat: 操作按钮展示积分消耗提示
后端:
- 新增 GET /points/rules 返回积分计费规则列表

前端:
- 各操作按钮添加积分消耗提示:
  - 固定积分: 生成脚本(5)/润色(1)/标题生成(1)/字幕烧录(2)/封面设计(2)/压制成片(5)
  - 按秒计费: 配音合成/视频生成 显示'按秒计费'
2026-05-13 14:52:09 +08:00
小鱼开发 fc4ebb7de0 feat: 封面背景图迁移到数据库,按script_code分类获取
后端:
- 新建 mjk_cover_backgrounds 表(Alembic e02c96e264d9)
- CoverBackground模型/CRUD/Schema/API(GET /cover-backgrounds?script_code=)

前端:
- ScriptCreation保存categoryCode到store和meta.json
- CoverDesign从API获取背景图,替换bg-config.json
- 修复useEffect不响应categoryCode变化的bug

其他:
- 删除Rust遗留的generate_cover_image命令和burn_ass_subtitle_to_image函数
2026-05-13 11:07:11 +08:00
小鱼开发 4cba598b17 feat: 视频生成积分按总时长一次性扣费 + 错误文案友好化 + 弹窗样式修复
- 视频生成积分规则:从按对口型实际时长计费改为按脚本规划总时长计费
- 前端 VideoGeneration:提交 lipSync 时传 plannedDuration + totalPlannedDuration + batchId
- 后端 video_handler:tick 预检用 planned_duration,扣费改为总时长一次性扣 + batch_id 幂等
- 后端 tasks.py:VideoParams 替换字段,余额检查用 planned_duration
- 前端按钮旁显示预计消耗积分
- 新增 errorMessage.ts:统一错误信息友好化转换
- ScriptCreation/VideoGeneration/VoiceSynthesis/SubtitleBurning/CoverDesign:弹窗错误文案改用友好提示
- ProgressModal.css:错误/成功文案添加折行样式
- ContentManagement.css:补全缺失的 settings-row 样式
- ScriptCreation:删除过时空状态文案和多余 Slider.css import
2026-05-12 12:36:39 +08:00
小鱼开发 dc5d0d4959 fix: TTS/润色/标题/克隆 API 前置积分检查 + 402 异常透传
- voice.py: synthesize/synthesize-batch/synthesize-file/clone/submit 添加前置积分检查

- script.py: polish/generate_title 添加前置积分检查

- 修复 HTTPException(402) 被外层 except Exception 吞掉变成 500 的问题

- 所有端点在执行业务前先检查余额,不足直接返回 402
2026-05-11 22:55:47 +08:00
小鱼开发 367c3d352c fix: 任务创建 API 和 Scheduler 前置积分检查
- tasks.py: create_task 在写入 Redis 前检查积分余额,不足返回 402

- script_handler.py: tick 执行 AI 调用前预检积分

- video_handler.py: 提交 Vidu 任务前预检积分

- 避免余额不足的任务入队,即时反馈给用户
2026-05-11 22:06:01 +08:00
小鱼开发 873db1a26f fix: 禁止积分余额变为负数
- point_service.consume 默认 allow_negative=False
- script.py / voice.py 捕获 ValueError(积分不足) 返回 402
- Scheduler 后置扣费余额不足时静默失败并记录日志
2026-05-11 21:47:26 +08:00
小鱼开发 447f3c2ffe feat: 空镜素材系统数据库化 + 修复积分不足弹窗叠加
后端:
- 新增 BrollCategory/BrollMaterial/BrollTag 模型及表(mjk_categories/materials/tags)
- 新增 Alembic 迁移 69274ce979a5
- 新增 broll_category/broll_material CRUD 层
- 重构 material_service:删除 JSON 配置,改用 PostgreSQL + Redis 去重
- 新增 /materials/batch-match 接口,删除 /materials/reload
- usage_count 原子递增,Redis 失败自动降级

前端:
- materials API 改为 projectId 去重,新增 batchMatch
- VideoGeneration 批量匹配改用 batchMatch,删除 usedUrls 手动维护
- 修复积分不足时进度弹窗与充值弹窗叠加的 bug
- 操作前预检积分,不足时显示提示条+立即充值按钮
2026-05-11 17:40:38 +08:00
小鱼开发 95e55293c6 security: 全面生产安全加固与部署修复
后端安全:
- DEBUG 默认 True → False
- 彻底移除 AUTH_BYPASS 认证绕过
- 验证码不再明文打印到日志
- 上传接口增加大小限制(500MB/20MB/100MB)与魔数校验
- python-jose → PyJWT, 更新 requirements.lock/uv.lock
- Bandit 恢复关键规则(B104/B301/B305/B314/B324/B603/B607)
- 修复 5 处 try_except_pass, 15 处加 nosec 注释
- 启用 Bandit pre-commit 钩子

前端安全:
- 配置完整 CSP 策略
- 收紧 Capabilities(fs:allow-read-file → $RESOURCE/**)
- 移除硬编码 devToken
- 清理前端 TODO(美家卡智影命名统一)

部署修复:
- docker-compose.prod 增加 alembic 迁移步骤
- api + scheduler 增加 Redis 心跳健康检查
- Nginx 添加安全响应头
- Nginx client_max_body_size 100M → 500M
- .env.example 补充 UPLOAD_MAX_* 配置与安全注释

其他:
- /voice/upload 合并到 /upload/audio
- Rust 上传增加文件大小检查
- 清理 Rust 19 处 println! + 前端 21 处 console.info
- 修复 VideoCompose.tsx toast 未导入(已有bug)
2026-05-10 23:31:34 +08:00
小鱼开发 82108fd13c fix(auth): PATCH /auth/me 会话隔离导致修改失败
current_user 来自 get_current_user 的数据库会话,和 update_me
的 db 不是同一个会话。直接修改对象后 commit 找不到变更。
修复:先用当前会话重新查询用户再修改。
2026-05-10 21:13:37 +08:00
小鱼开发 ea1b607aca feat(profile): 拆分个人中心与账户设置,支持昵称编辑
后端:
- 新增 UpdateNicknameRequest schema
- 新增 PATCH /auth/me 修改昵称接口

前端:
- Profile.tsx 精简为纯资产中心(积分统计+最近记录+充值)
- 新建 Account.tsx 账户设置页(昵称编辑、手机号、退出登录)
- App.tsx + Sidebar.tsx 新增 account 路由和导航菜单
- 昵称修改后同步更新 authStore
2026-05-10 08:32:45 +08:00
小鱼开发 edc782b15b fix(points): 积分明细首次加载、自定义Select、名词口径统一
- 修复首次进入积分明细无数据(日期就绪后才触发查询)
- 新增 CustomSelect 组件替换原生 select,绿色主题
- 下拉选项根据后端配置动态过滤(只展示有扣费的业务)
- 后端新增 /points/chargeable-types 接口
- 统一名词口径:消耗→消费、声音克隆→复刻、封面制作→设计、润色→文案润色
- 后端接口支持 source_type 查询参数(修复类型筛选不生效)
2026-05-10 07:39:08 +08:00
小鱼开发 a28a16921d feat(recharge): 过期时间改2分钟 + 刷新图标 + 间距统一 + 骨架屏占位 2026-05-09 22:00:05 +08:00
小鱼开发 04e467e433 feat(points): 积分系统收尾 + 充值弹窗改造 + 命名统一
后端:
- 微信回调 db.commit 失败仍返回 SUCCESS,避免无限重试
- recharge() 加 order_id 幂等保护,防重复充值
- time_expire 使用北京时间(UTC+8),修复时区 bug
- 充值档位后端配置化(points-config.yaml + /recharge-options API)
- 代码审查 20 项修复(认证加固、扣费顺序、错误响应、状态同步等)

前端:
- 充值弹窗:自动轮询 + 【我已支付】手动兜底
- 二维码倒计时显示,过期后遮罩 + 刷新按钮
- 充值档位从后端动态加载
- 去掉 select/qrcode 弹窗标题,金额红色突出显示
- 全项目命名统一(视频生成/压制成片/配音合成/声音复刻等)
- Modal 关闭按钮独立于 title 显示
2026-05-09 21:29:35 +08:00
小鱼开发 0722225c62 feat(points): 积分流水表支持时长显示,说明字段简化
后端:
- PointTransaction 模型添加 duration 字段(float, nullable)
- PointTransactionItem schema 添加 duration
- consume() 新增 duration 参数,写入流水记录
- 各业务 description 统一简化为【脚本生成】【配音合成】等格式
- duration 类业务(tts/video)传入实际秒数
- Alembic 迁移: 95eb1a1c0af9_add_duration_to_point_transaction

前端:
- PointTransaction 类型添加 duration
- UsageDetail: 来源列 → 时长列(有值显示 xs,无值显示 -)
- 说明列直接显示后端返回的简化描述
2026-05-09 17:08:50 +08:00
小鱼开发 368fdfa094 fix(points): 修复积分系统联调 bugs
致命级(扣费不落库):
- /points/consume、/admin/recharge、/recharge/query/{id} 补单路径添加缺失的 db.commit()
- voice.py 三个端点(synthesize/synthesize-batch/clone/submit)consume 后添加 db.commit()
- script.py 两个端点(polish/generate-title)consume 后添加 db.commit()

严重级(运行时错误):
- 清理 points.py 对已删除 schema(ConsumeFreezeRequest 等)的导入
- 修复 schemas.ConsumeRequest 引用为直接导入 ConsumeRequest
- video_handler.py: duration 字符串类型安全转换 float()
- tasks.py VideoParams 添加 duration 字段并写入 Redis params

中等级(体验):
- CoverDesign: consumePoints 移到 exportPng() 成功后
- 三个消费页面 RechargeModal 添加 onRechargeSuccess 刷新余额
2026-05-09 16:00:28 +08:00
小鱼开发 c6eba97b43 feat(points): 积分消耗系统全链路集成
后端:
- 简化积分服务: 删除 freeze/settle/refund, 保留 consume/recharge/expire
- 计费配置化: config/points-config.yaml 驱动 fixed/duration/free 三种模式
- TTS 时长探测: app/utils/audio_utils.py (httpx + mutagen 纯 Python)
- Python 层扣费: script(5)/polish(1)/title(1)/voice_clone(200)/tts(按秒)/video(按秒)
- 字幕 free_services: caption/auto_align 不扣费
- 新增 POST /points/consume 端点(402余额预检)
- 新增 check_balance + /points/cost 返回 sufficient/balance/required
- 新增 expire_batches 定时回收, 接入 scheduler main(每5分钟)
- 删除废弃 tts_handler.py
- Alembic 迁移: 删除 frozen/total_refunded 字段
- 同步 requirements.lock 添加 mutagen

前端:
- Rust/IPC 层扣费: compose(5)/subtitle_burn(2)/cover_design(2)
- 字幕打轴改异步: 走 scheduler subtitle handler
- 对口型传 duration: VideoGeneration 传 actualDuration
- 创建 pointStore: 全局余额 + fetchBalance + 充值弹窗控制
- 402 欠费弹 RechargeModal: VideoGeneration/SubtitleBurning/CoverDesign
- 修复 VoiceDubbing.tsx 类型错误 (alignResult never)
- 同步 PointBalance 类型(删除 frozen/available/totalRefunded)

Refs: 积分消耗集成收尾
2026-05-09 15:42:54 +08:00
小鱼开发 54b3d2b3e7 fix: 创建充值订单后缺少 db.commit() 导致订单未持久化
- create_recharge_order 成功/失败路径均添加 await db.commit()
- 修复轮询 404 和微信支付回调找不到订单的问题
2026-05-08 22:05:45 +08:00
小鱼开发 8e5174c58c fix: 修复轮询接口 CORS 头丢失 + CRUD 类型不匹配
- main.py: 自定义 exception_handler 手动添加 CORS 头,避免 500 响应被浏览器拦截
- crud/base.py: CRUDBase.get 的 id 参数改为 Any,兼容 int/BigInt 主键
- api/v1/points.py: query_recharge_status 去掉 str() 转换,直接传 int order_id
2026-05-08 21:56:56 +08:00
小鱼开发 8fd68fc25e feat: 发送验证码时校验用户是否存在
- /send-code 接口增加用户存在性校验
- 手机号未注册时返回 404 '用户不存在'
- 验证码校验仍 bypass(测试期间)
2026-05-08 18:13:20 +08:00
小鱼开发 caa0327d87 fix(auth): 登录接口优先读取 X-Forwarded-For 头获取真实公网 IP
- 原来 http_request.client.host 获取的是 Nginx 内网 IP
- 现在优先读 X-Forwarded-For → X-Real-IP → client.host 兜底
2026-05-08 16:47:19 +08:00
小鱼开发 43bbb4ea22 fix: FastAPI Request 参数类型回退,修复 Docker 启动失败
FastAPI 0.135.3 无法正确识别 Request | None Union 类型作为注入参数,
回退为 Request = None(运行时 FastAPI 会自动注入 Request 对象)。
2026-05-08 11:34:47 +08:00
小鱼开发 b597d715c8 fix: 认证流程修复 + alembic 迁移补全 + 前端僵尸代码清理
后端:
- 修复 get_current_user 未校验 is_active,被封禁用户仍可用旧 Token
- auth.py 捕获 ValueError 转 HTTPException(验证码错误、账号被封、Token 无效等不再返回 500)
- 修正 SMS 每日上限注释(3次 → 10次)
- 修复迁移脚本外键引用错误:users.id → mjk_users.id
- 新建积分系统 4 张表的迁移(mjk_user_points/batches/transactions/recharge_orders)
- pyproject.toml 补充 alembic + psycopg2-binary 依赖
- ruff 格式修复(import 排序等)

前端:
- 修复 doRefreshToken 成功后不持久化新 Token 的严重 bug
- 修复应用重启后 SSE 不自动重连(收不到踢人通知)
- 修复 App.tsx handleLogout 未 await
- client.ts 统一从 utils/env 导入 isTauri,默认 base URL 兜底 localhost:8000
- 清理 ~20 个未使用的 hooks/utils/api 模块/组件导出
- 修复所有 ESLint 警告(206 → 0)和 TSC 错误
- 测试通过(5/5)

其他:
- 更新 requirements.lock 和 uv.lock
2026-05-08 11:10:48 +08:00
小鱼开发 51521fc0dd feat(payment): 微信支付 APIv2 + 积分充值 + SMS 短信 + 双 Token 认证
- 微信支付从 APIv3 降级为 APIv2(MD5/XML)
- 积分系统:充值下单、微信回调、消费冻结/结算/退款
- SMS B2M 短信验证码服务
- 双 Token 认证(Access 30min + Refresh 30days)
- SSE 单设备踢人
- 用户设备管理、积分账户模型
- Alembic 迁移脚本
2026-05-07 18:43:02 +08:00
小鱼开发 755ecc9abe refactor(config): 统一配置体系,禁用热重载,清理兼容层
- 删除 .gitlab-ci.yml
- 删除 runtime_config.py 兼容层
- Pydantic Settings + YAML 三层配置分离
- 统一 PlatformConfigLoader 加载器
- docker-compose 移除重复 environment 覆盖
- volcengine base_url 从 YAML 读取
- 微信支付/SMS 空值启动时拦截
- 日志仅输出控制台,不写文件
- 更新 model_router 注释
2026-05-07 18:42:47 +08:00
小鱼开发 c45cb02385 fix: 七牛云 SDK 同步 I/O 阻塞事件循环
- QiniuService 新增 async 包装方法(upload_stream_async 等)
- upload.py / voice.py 上传路由改为 await async 版本
- voice.py 改用 get_qiniu_service() 单例
2026-05-06 22:56:23 +08:00
小鱼开发 c79b2323f4 refactor: 删除脚本生成未使用的 duration/style/scriptType/scriptDuration 参数
前端:
- 删除 scriptType 字段及相关 store action、持久化、API 类型
- 删除 scriptDuration 字段及相关 store action、持久化、加载逻辑
- ScriptCreation 不再传 duration/style 参数给后端

后端:
- ScriptParams 删除 duration/style 字段
- ScriptHandler 删除 duration/style 参数读取和传递
- ScriptService.generate_script 签名删除 duration/script_type
- load_script_user_prompt 删除 duration 参数

影响:无,duration/style 在 prompt 模板中未被实际使用
2026-05-06 13:30:40 +08:00
小鱼开发 8f8256ddfb fix: 声音克隆暴露原始错误 + 脚本生成去掉中间进度提示
- voice.py: 异常处理不再吞掉原始错误,直接暴露具体原因
- vidu_service.py: clone_voice 错误消息包含 Vidu 返回的 error_message
- ScriptCreation.tsx: 去掉一闪而过的'任务已创建,等待执行...'中间状态
2026-05-06 11:04:26 +08:00
小鱼开发 a2106cbfb3 feat(log): Vidu 回调增加详细日志
- 记录回调请求体(前500字符,防日志过大)
- 记录 handle_webhook 解析结果(state/result/error)
- 记录反查 internal_task_id 前后的 platform_task_id 和结果
- 更新成功时记录 video_url
2026-05-05 23:03:45 +08:00
小鱼开发 f5268d6077 fix(api): 从 VideoParams 移除 callback_url,不再暴露给前端
- callback_url 是后端和 Vidu 之间的内部配置,不应由前端传入
- VideoHandler 已自动兜底构建(基于 ENV 推断 app_base_url)
2026-05-05 22:57:12 +08:00
小鱼开发 bd6681c454 fix(adapter): VolcengineArkAdapter 转发 reasoning_effort,移除 temperature 传参
- Adapter 之前漏传 reasoning_effort,platform-config.yaml 里配置的
  minimal 未生效,可能导致脚本生成走完整推理链变慢
- 豆包 Seed 2.0 Pro 强制固定 temperature=1,传参无效,全部移除
- 移除 script_service.generate_script/polish_content 和 script.py
  generate_title 中的 temperature 硬编码
2026-05-05 21:52:09 +08:00
小鱼开发 30536276ba refactor(scheduler): 统一异步任务调度架构
核心变更:
- 统一第三方接口架构:所有服务走 PlatformGateway(call_sync/submit_task/query_task/handle_webhook)
- 视频生成(Vidu 对口型)纳入 Async Engine,与 script/subtitle/tts 统一为 POST /tasks/{task_type} 模式
- 新增 VideoHandler、TTSHandler,完善 ScriptHandler/SubtitleHandler
- PlatformGateway 生成 internal_task_id,建立 Redis 双向映射,callback 场景传入 Async Engine task_id 保证映射一致
- SlotManager 新增 acquire_ctx 上下文管理器,所有 Handler 统一使用
- ViduAdapter 状态映射归一化(normalize_state/denormalize_state)
- 移除 ViduService Semaphore 和 tenacity 重试,并发控制完全交予 SlotManager
- nonce 防重放下沉到 CallbackCapable 协议
- Service 层错误统一为 PlatformError,路由层错误信息脱敏
- 废弃 /voice/lip-sync,清理 vidu.py 遗留路由

Bug 修复:
- VideoHandler 轮询阶段后添加 continue,防止已提交任务重复创建
- voice.py synthesize_to_file 变量名冲突(request vs request_body)
- PlatformGateway.submit_task 空 data 防护
- ScriptHandler 动态导入 asyncio 改为模块级导入
- SubtitleHandler 完成时补充 progress=100

文档:
- 更新 AGENTS.md 核心功能、运行时架构、异步调度描述
2026-05-05 20:53:18 +08:00
小鱼开发 f32c1c7703 refactor: 删除 video 任务类型
产品无云端视频生成功能,Scheduler 也未注册 VideoHandler,
删除遗留的 video 任务类型及相关代码:
- tasks.py: VideoParams、video 分支
- schemas/task.py: VideoTaskParams
- schemas/__init__.py: VideoTaskParams 导出
2026-05-05 16:56:49 +08:00
小鱼开发 431c54c258 refactor: 前端脚本生成改为异步任务轮询,精简LLM模型,删除图片生成代码
- 前端:ScriptCreation SSE 流式改为 createTask + pollTask 轮询
- 后端:LLM 仅保留 doubao-seed-2-0-pro,删除降级链及相关模型
- 后端:删除所有图片生成代码(ImageParams/ImageTaskParams/generate_image)
- 更新 platform-config.yaml、model_router、volcengine_provider、tasks 等
2026-05-04 19:58:32 +08:00
小鱼开发 6c0f240369 chore: 删除脚本生成 SSE 流式相关废弃代码 2026-05-04 19:37:30 +08:00
小鱼开发 52ba99e11d refactor: Scheduler 层统一命名 job → task 2026-05-04 19:18:22 +08:00
小鱼开发 82657c2d65 chore: 删除形象克隆相关代码、配置及注释 2026-05-04 19:06:45 +08:00
小鱼开发 e58159fc42 refactor: 第三方平台架构改造(Adapter Protocol + Gateway)
Phase 1: 异常体系统一
- 新增 PlatformError / PlatformErrorType 标准定义
- 改造所有 Provider 异常抛出为 PlatformError
- 注册全局 PlatformError exception handler

Phase 2: Adapter Protocol
- 新增 app/ai/adapters/base.py(PlatformAdapter + SyncCapable + TaskCapable + CallbackCapable)
- 新增 app/ai/adapters/constants.py(Method 常量)
- 新增 PlatformConfigLoader(config/platform-config.yaml)

Phase 3: HTTP Client 统一
- ViduProvider 从 aiohttp 迁移到 httpx(注入方式)
- VolcengineCaptionService 改为注入 http_client
- lifespan 统一管理所有 Client 创建和关闭

Phase 4: Gateway 骨架 + Adapter 实现
- 新增 ViduAdapter / VolcengineArkAdapter / VolcengineCaptionAdapter
- 新增 PlatformGateway(call_sync / submit_task / query_task / handle_webhook)
- 新增 LLMGateway(带 Fallback 降级链)
- lifespan 注册所有 Adapter 和 Gateway

Phase 6: 清理与验证
- 从 Settings 移除 VIDU_BASE_URL / VOLCENGINE_BASE_URL
- Provider 改为从 PlatformConfigLoader 读取 base_url
- 清理 volcengine_caption_service 全局单例
- config_loader 默认路径改为 platform-config.yaml
- Scheduler 注入共享 HTTP client
- vidu.py 回调路由使用 Adapter 验签和解析
- ruff 全量通过,应用启动测试通过
2026-05-04 16:07:16 +08:00
小鱼开发 0c921aca11 chore: 清理废弃代码和文档
- 删除 anytocopy 相关文件(service、handler、文档)
- 删除 KlingAI / MiniMax 开发文档
- 删除 database-design、mvp-lip-sync-replacement 等过时文档
- 删除旧的 docker-compose.yml(已拆分为 dev/test/prod)
- 删除 config/ai_models.yaml(已合并到 platform-config.yaml)
- 从 .env.example 移除 anytocopy 配置
- 从 tasks.py、schemas 移除 copy 任务类型
2026-05-04 16:06:25 +08:00
小鱼开发 e262134148 refactor: 移除 KlingAI 和 MiniMax 相关代码
删除内容:
- KlingAI Provider、MiniMax Provider
- Kling 视频/图片/TTS/语音克隆/形象克隆 Service 和 Scheduler Handler
- 已废弃的 TTSService、VoiceCloneService
- config 中 KLINGAI_*/MINIMAX_* 配置项
- ai_models.yaml 中 klingai 平台和模型配置
- docker-compose 中相关环境变量
- .env.example 中相关配置示例
- deploy-test.sh 中相关检查
- Makefile 中 klingai 语义检查排除规则
- KlingTaskStatus 枚举

修改内容:
- model_router.py 移除 KlingAI 平台分支
- voice.py 重写,修复批量合成/文件保存中 service 未定义的 Bug
- vidu_service.py 移除 MiniMax 相关注释
- script_handler.py 更新注释
2026-05-02 23:16:14 +08:00
小鱼开发 70a87465b5 chore: unregister unused KlingAI/MiniMax handlers and imports
- Remove KlingAI handlers (video, avatar, image, tts) from scheduler registration
- Remove MiniMaxTTSService import from voice.py (deprecated, migrated to Vidu)
- Keep source files for future reference
2026-05-02 22:47:33 +08:00
小鱼开发 ab9962d333 refactor(vidu): reusable session, semaphore, retry, lifespan management
- vidu_provider: single ClientSession with TCP connector pool and explicit timeouts
- vidu_service: Semaphore(10) concurrency limit + tenacity retry (3 attempts, exponential backoff)
- voice/vidu routes: use FastAPI Depends injection instead of new Service() per request
- main.py: initialize Vidu Provider & Service in lifespan, close on shutdown
- add tenacity to dependencies
- remove vidu_tts_service.py
2026-05-02 21:55:20 +08:00
小鱼开发 02b5a89eaf refactor(script): add timeout and error handling for polish/title
- Add 15s asyncio.timeout() to polish_content and generate_title
- Add try/except to /polish route for unified error response
- Add asyncio.TimeoutError handling to /generate-title route
2026-05-02 21:23:50 +08:00