合并远端主分支更新
Project CI / Repository checks (pull_request) Failing after 54s
Project CI / Frontend tests (pull_request) Successful in 3m30s
Project CI / Backend tests (pull_request) Successful in 4m21s
Project CI / Native shell tests (pull_request) Has been cancelled

同步主分支音效生成与External v1契约更新
保留图标规范与图集生成链路
适配VectorEngine LLM客户端命名并解决前端提交语义冲突
This commit is contained in:
2026-08-08 21:54:30 +08:00
103 changed files with 11863 additions and 1097 deletions
+181 -10
View File
@@ -4564,25 +4564,41 @@
"EditorSoundEffectGenerationRequest": {
"type": "object",
"required": [
"prompt",
"duration"
"prompt"
],
"properties": {
"prompt": {
"type": "string",
"minLength": 1
"minLength": 1,
"maxLength": 2048,
"description": "用户原始语言音效描述。服务端按 ECMAScript String.trim() 语义删除首尾空白和行终止符(包括 U+FEFF,保留首尾 U+0085),再按 Unicode code point 校验 1-2048。"
},
"model": {
"type": [
"string",
"null"
],
"default": "audio1.0"
"default": "eleven_text_to_sound_v2",
"description": "省略、null、空串、纯 Unicode White_Space 或首尾空白包围的 eleven_text_to_sound_v2 均 canonicalize 为 eleven_text_to_sound_v2audio1.0 和其它非空值返回 400。"
},
"duration": {
"type": "integer",
"minimum": 2,
"maximum": 10
"anyOf": [
{
"type": "number",
"minimum": 0.5,
"maximum": 30
},
{
"type": "null"
}
],
"default": null,
"description": "null 或省略表示自动时长;有限数值表示手动时长。服务端不按 UI 0.1 秒步进取整。"
},
"loop": {
"type": "boolean",
"default": false,
"description": "独立 Loop 参数;服务端不从 Prompt 推断、同步或校验。"
},
"projectId": {
"type": [
@@ -4744,6 +4760,22 @@
"background-music"
]
},
"durationSeconds": {
"type": [
"number",
"null"
],
"exclusiveMinimum": 0,
"maximum": 600,
"description": "SFX V2 为 MP3 探测所得实际时长;不是请求时长。BGM 或历史结果可省略。"
},
"loop": {
"type": [
"boolean",
"null"
],
"description": "SFX V2 返回冻结并发送给 provider 的 LoopBGM 或历史结果可省略。"
},
"project": {
"anyOf": [
{
@@ -4789,6 +4821,146 @@
}
}
},
"ExternalEditorGenerationCompactResourceReference": {
"type": "object",
"required": [
"resourceId"
],
"properties": {
"resourceId": {
"type": "string",
"minLength": 1
},
"projectId": {
"type": "string",
"minLength": 1
},
"objectKey": {
"type": "string",
"minLength": 1
},
"assetObjectId": {
"type": "string",
"minLength": 1
},
"sourceResourceId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": true,
"description": "完成态 compact result 中的稳定画布资源引用;不是完整 resource 快照。"
},
"ExternalEditorGenerationCompactAssetReference": {
"type": "object",
"required": [
"assetId"
],
"properties": {
"assetId": {
"type": "string",
"minLength": 1
},
"folderId": {
"type": "string",
"minLength": 1
},
"objectKey": {
"type": "string",
"minLength": 1
},
"assetObjectId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": true,
"description": "完成态 compact result 中的稳定素材库引用;不是完整 asset 快照。"
},
"ExternalEditorSoundEffectCompactResult": {
"type": "object",
"required": [
"audioKind"
],
"properties": {
"audioKind": {
"type": "string",
"const": "sound-effect"
},
"durationSeconds": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 600,
"description": "SFX V2 保存 MP3 后探测得到的实际时长;不是请求时长。历史完成结果可缺少此字段。"
},
"loop": {
"type": "boolean",
"description": "SFX V2 冻结并发送给 provider 的 Loop;历史完成结果可缺少此字段。"
},
"taskId": {
"type": "string",
"minLength": 1
},
"objectKey": {
"type": "string",
"minLength": 1,
"description": "持久化音频对象的稳定引用;需要临时下载或预览 URL 时使用 assets/read-url。"
},
"assetObjectId": {
"type": "string",
"minLength": 1
},
"resource": {
"anyOf": [
{
"$ref": "#/components/schemas/ExternalEditorGenerationCompactResourceReference"
},
{
"type": "null"
}
]
},
"asset": {
"anyOf": [
{
"$ref": "#/components/schemas/ExternalEditorGenerationCompactAssetReference"
},
{
"type": "null"
}
]
}
},
"additionalProperties": true,
"description": "External SFX 完成态的 compact result。仅包含稳定产物引用和可安全消费的 SFX 元数据;不包含完整 project/canvas/asset 快照或脱敏的 Prompt、模型与 provider 字段。"
},
"ExternalEditorGenerationGenericCompactResult": {
"type": "object",
"not": {
"type": "object",
"required": [
"audioKind"
],
"properties": {
"audioKind": {
"const": "sound-effect"
}
}
},
"additionalProperties": true,
"description": "其它生成类型或历史结果的兼容 compact result。背景音乐(audioKind=background-music)与不带 audioKind 的图片、视频、图标序列帧、角色动作和 UI 拆解结果都落在这里。该 fallback 明确排除 audioKind=sound-effect,避免吞掉 SFX 专用分支。"
},
"ExternalEditorGenerationCompletedResult": {
"oneOf": [
{
"$ref": "#/components/schemas/ExternalEditorSoundEffectCompactResult"
},
{
"$ref": "#/components/schemas/ExternalEditorGenerationGenericCompactResult"
}
],
"description": "External v1 轮询 completed 状态的命名 compact result 联合。两个分支已由 audioKind 的 const 与 not 精确互斥,不使用 discriminator:背景音乐返回 audioKind=background-music,图片、视频、图标序列帧、角色动作、UI 拆解与历史结果根本没有 audioKind,它们都无法映射到具名分支,且 fallback 分支不可能把 audioKind 声明为必填,因此任何 discriminator 映射都不可能覆盖全部合法结果。"
},
"ExternalEditorGenerationSubmissionResponse": {
"type": "object",
"required": [
@@ -4873,9 +5045,8 @@
"type": "string"
},
"result": {
"type": "object",
"description": "completed 时返回的 compact 稳定结果引用;不包含完整 project/canvas、Data URL、Blob URL 或临时签名 URL。",
"additionalProperties": true
"$ref": "#/components/schemas/ExternalEditorGenerationCompletedResult",
"description": "仅在 completed 时返回的 compact 稳定结果引用;queued、running 和 failed 不返回该字段。为兼容历史完成结果,此字段不作为无版本迁移的必填约束。"
},
"pollAfterMs": {
"type": "integer",