www_site/docs/CHANGELOG.md

73 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 改动记录CHANGELOG
本文件按时间**倒序**记录每次改动的**位置**与**内容**,中文注释,便于后续接手的同学快速定位。
---
## 2026-09-18TTS 页面调整 + 真人声音配音模式 + 推送凭据修复
**分支**`feat/chip-resources`
**最新提交**`74110fb`(已推送)
**线上状态**:已发布到 `www.kaotings.com`,服务器 `45.197.145.138` 上的 release 为 `~/releases/74110fb-www`systemd 服务 `kaotings-web`Caddy 反代 `127.0.0.1:3000`
### 1. 删除「减负区」标题与说明文字(提交 `b4c3a99`
- **文件**`app/tts/page.tsx`
- **位置**:原输入卡片下方独立区块的头部
- **删除内容**`03 / Assist`、`减负区`、`把识别、校对和分段交给系统,客户只需要确认内容和听结果。`
- **连带处理**:移除该区块上已失效的 `aria-labelledby="assist-title"`(全站无其它引用)
### 2. 三个功能卡移到「音色清单」文字下方(提交 `d79c6cb`、`12eef4b`
- **文件**`app/tts/page.tsx`(现约 576582 行)
- **改动**:把「图片转文字 / 生成前查错字 / 自动分段」三张 `assist-card` 从页面底部独立区块移入「01 / Input 输入文本」卡片内部,放在 `音色清单已更新 · N 个音色` 这行文字**下方**,用 `md:grid-cols-3` 三列对齐
- **功能保全**:隐藏的图片选择 `input``fileInputRef`)与 OCR 提示 `helperMessage` 一并迁入,行为不变
- **删除**:原底部独立区块(移走卡片后只剩「少打字 · 少校对 · 少返工」徽标,已随区块删除)
- **说明**`d79c6cb` 先放到编辑器下方,`12eef4b` 按反馈修正到「音色清单」下方,最终位置以后者为准
### 3. 新增「真人声音配音模式」(提交 `14bc759`
**前端 `app/tts/page.tsx`**
- 新增状态:`myVoice`(声音样本 `{ name, dataUrl }`)、`recording`(是否正在录音)
- 新增 ref`recorderRef`MediaRecorder 实例)、`voiceFileRef`(音频文件选择)
- 新增函数(约 405470 行):
- `startRecording()``navigator.mediaDevices.getUserMedia` + `MediaRecorder` 录音,停止后转成 data URL 存入 `myVoice`
- `stopRecording()`:停止录音
- `handleVoiceFile()`:上传音频文件(类型校验 + 8 MB 上限)
- `clearMyVoice()`:清除样本,回到内置音色
- `createSpeech()` 改为**双通道**:有 `myVoice` → 调 `/tts-clone`;否则走原 `/tts/v1/audio/speech`
- 面板 JSX约 584600 行):位于三张功能卡下方,包含 `🎙 真人声音配音模式` 标题、使用说明、`● 录制我的声音 / ■ 停止录音`、`上传声音`、`清除样本`、样本试听条与「已就绪」状态
**服务端 `app/tts-clone/route.ts`(新增文件)**
- `POST /tts-clone`,入参 `{ text, reference_audio(data URL), response_format, speed }`
- 读取服务端环境变量 `TTS_CLONE_URL` 转发给克隆引擎;**未配置时返回 501**(前端提示「真人配音引擎尚未接通,请先选择内置音色」,不假装成功);上游失败返回 502
- **路径选择原因**:线上 Caddy 中 `/api/*` 转发到 FastAPI:8000、`/tts/*` 转发到 TTS 引擎,只有 `/tts-clone` 这类路径会落到 Next.js
**样式 `app/globals.css`**
- 新增 `.voice-clone-panel`380 行)与 `.voice-clone-panel.is-ready`388 行):青色描边面板,样本就绪后高亮
**本地联调 `services/mock-tts/server.mjs`**
- 新增 `POST /v1/audio/clone-speech`174 行):校验文本与 `reference_audio` 后返回演示音频
- 配合**未提交**的 `.env.local``TTS_CLONE_URL=http://127.0.0.1:8100/v1/audio/clone-speech`,本地可跑通「录音/上传 → 生成」全流程
**待后续程序员跟进**
- 实测上游 TTS 引擎(`qwen3-tts`129 个固定音色)**目前没有声音克隆接口**:无音色注册端点,未知参数会被静默忽略
- 引擎方提供克隆接口后,只需在服务器为 `kaotings-web` 增加环境变量 `TTS_CLONE_URL`(指向克隆接口)即可启用,**前端零改动**
### 4. 推送凭据问题修复(提交 `438a4d7`、`cee2074`
- **文件**`docs/OPERATIONS.md` §8
- **内容**Gitea 的 OAuth access token 仅 1 小时有效,而 Git Credential Manager 无法感知过期 → 闲置超 1 小时后**第一次推送必失败**`remote: Verify` / `Authentication failed`
- **修复**:新增凭据助手 `C:/Users/kts/.git-credential-kaotings.mjs`,每次用 refresh token 换新 access token全局配置中按「空值重置 + 助手 + manager」排序详见该章节
### 5. 本地配置纳入版本管理(提交 `74110fb`
- `next.config.ts`:新增 `rewrites()`**仅当**设置了 `TTS_MOCK_UPSTREAM` 时把 `/tts/v1/*` 代理到本地 mock TTS生产不设置该变量行为不变
- `AGENTS.md` / `CLAUDE.md`Next.js 16 `next dev` 自动生成的 AI 说明文件
- `next-env.d.ts`:自动生成文件,保持生产路径(`.next/types/...`),未提交 dev 路径的临时改动