Prune stale docs and update .hermes content

Delete a large set of outdated documentation (many files under docs/ and .hermes/plans/, including audits, design, prd, technical, planning, assets, and todos). Update and consolidate .hermes content: refresh shared-memory pages (decision-log, development-workflow, document-map, pitfalls, project-overview, team-conventions) and several skills/references under .hermes/skills. Also modify AGENTS.md, README.md, UI_CODING_STANDARD.md, docs/README.md and .encoding-check-ignore. Purpose: clean up stale planning/audit material and keep current hermes documentation and related top-level docs in sync.
This commit is contained in:
2026-05-15 06:24:07 +08:00
parent 2eded08bc7
commit 3cb3efb4d0
708 changed files with 4033 additions and 142328 deletions

View File

@@ -1,156 +0,0 @@
# VectorEngine 音频生成接入方案 2026-05-08
## 1. 范围
本方案用于把 VectorEngine / Apifox 文档中的 Suno 文生背景音乐与 Vidu 文生音效接入视觉小说结果页。
本次只接入 `visual-novel` 现有场景资产槽位,不新增独立音频系统、不新增 SpacetimeDB 表、不把供应商密钥下发到前端。
## 2. 参考接口
### 2.1 Suno 文生背景音乐
参考文档:
- `https://vectorengine.apifox.cn/api-349239190`
- `https://vectorengine.apifox.cn/api-349239199`
接口:
```text
POST /suno/submit/music
GET /suno/fetch/{task_id}
```
提交请求头:
```text
Content-Type: application/json
Accept: application/json
Authorization: Bearer {VECTOR_ENGINE_API_KEY}
```
自定义模式请求体:
```json
{
"prompt": "音乐描述或歌词",
"mv": "chirp-v4",
"title": "曲名",
"tags": "风格标签",
"continue_at": 120,
"continue_clip_id": "",
"task": ""
}
```
首版只使用 `prompt``mv``title``tags`。返回体按 `code = success``data` 为供应商任务 ID 处理。
### 2.2 Vidu 文生音效
参考文档:
- `https://vectorengine.apifox.cn/api-417728889`
- `https://vectorengine.apifox.cn/api-417728893`
接口:
```text
POST /ent/v2/text2audio
GET /ent/v2/tasks/{id}/creations
```
提交请求体:
```json
{
"model": "audio1.0",
"prompt": "雨滴落在窗户上的声音,伴随着轻柔的雷声",
"duration": 5,
"seed": 0
}
```
约束:
- `prompt` 最长 1500 字符。
- `duration` 范围为 2 到 10 秒,默认 5 秒。
- `model` 首版固定为 `audio1.0`
## 3. 环境变量
```text
VECTOR_ENGINE_BASE_URL=
VECTOR_ENGINE_API_KEY=
VECTOR_ENGINE_AUDIO_REQUEST_TIMEOUT_MS=180000
```
说明:
1. `VECTOR_ENGINE_BASE_URL` 只保存供应商代理 API 基础地址,不在代码中写死私有网关。
2. `VECTOR_ENGINE_API_KEY` 只能进入本地或生产私密环境文件,不提交到 Git。
3. 缺少任一必配项时,后端返回 `503 SERVICE_UNAVAILABLE`,前端沿用现有错误展示。
## 4. 后端路由
视觉小说创作链新增 4 个鉴权路由:
| 方法 | 路由 | 用途 |
| --- | --- | --- |
| `POST` | `/api/creation/visual-novel/audio/background-music` | 提交 Suno 背景音乐任务 |
| `POST` | `/api/creation/visual-novel/audio/background-music/{task_id}/asset` | 查询 Suno 任务,完成后下载并写入平台资产 |
| `POST` | `/api/creation/visual-novel/audio/sound-effect` | 提交 Vidu 音效任务 |
| `POST` | `/api/creation/visual-novel/audio/sound-effect/{task_id}/asset` | 查询 Vidu 任务,完成后下载并写入平台资产 |
生成资产回包写入既有视觉小说字段:
- Suno 背景音乐:`VisualNovelSceneDraft.musicSrc`
- Vidu 文生音效:`VisualNovelSceneDraft.ambientSoundSrc`
## 5. 资产落点
音频文件由后端下载后通过 `OssClient::put_object` 写入平台 OSS并确认 `asset_object``asset_entity_binding`
对象规划:
| 类型 | `assetKind` | `entityKind` | `slot` | 旧路径前缀 |
| --- | --- | --- | --- | --- |
| 背景音乐 | `visual_novel_music` | `visual_novel_scene` | `music` | `generated-custom-world-scenes` |
| 场景音效 | `visual_novel_ambient_sound` | `visual_novel_scene` | `ambient_sound` | `generated-custom-world-scenes` |
确认后的 `audioSrc` 使用 OSS 返回的 legacy public path继续由前端 `resolveAssetReadUrl` 换签播放。
## 6. 前端交互
视觉小说场景编辑弹层新增两类音频能力:
1. `音乐` 保留上传能力,并新增 Suno 生成按钮。
2. `音效` 使用 `ambientSoundSrc`,支持上传和 Vidu 生成。
交互要求:
1. 生成参数放在独立弹层中,不在当前场景面板下方展开。
2. 弹层只保留必要字段、提交、关闭和状态反馈,不展示供应商规则说明。
3. 任务提交成功后前端轮询资产接口;若供应商仍在处理,保持弹层状态。
4. 资产生成完成后自动写回当前场景字段。
## 7. 验收
建议执行:
```bash
npm run check:encoding
npm run typecheck
cd server-rs
cargo test -p shared-contracts visual_novel
cargo check -p api-server
```
涉及真实 API smoke 时:
1. 只在本地私密环境设置 `VECTOR_ENGINE_API_KEY`
2. 使用 `npm run api-server` 重启后端。
3. 确认 `/healthz`
4. 在视觉小说结果页提交背景音乐或音效生成,生成完成后确认场景音频槽位可播放。