Feat/游戏场景需求v1.0 #139

Merged
kdletters merged 31 commits from feat/scene_v1 into master 2026-08-08 10:25:43 +08:00
Member
实现[游戏场景需求v1.0](https://kcnz41bksl1c.feishu.cn/wiki/JSF3wdhduinpqhkrVGKcZFp4nng?psg_id=8477599259997387860&refer_index=1&refer_type=citation)。
suzmii added 12 commits 2026-08-05 17:35:19 +08:00
新增首页与画布工具栏的游戏场景入口和专用生成表单
新增结构化场景请求契约与后端场景提示词组装
复用图片生成任务的计费、队列、资源入库和画布回写
接入多参考图、画幅选项、预设画风及自定义画风
补充场景链路技术方案和前后端定向测试
同步远端 master 至游戏场景功能分支
保留场景自定义画风控件并接入 master 的自适应文本输入组件
解决图片画布基础生成表单的唯一合并冲突
使用类型完备的 Record 集中维护生成模式与画布工具映射
保留未知运行时模式默认回落到普通图片生成工具的历史行为
使用 Mountain 区分游戏场景与普通图片生成入口
为场景生成占位框补充 Mountain 图标、类型标识和轻量主题样式
补充底部工具栏与场景占位框图标测试
删除画风菜单默认操作说明与规则解释文案
画风预览图改为悬停或键盘聚焦时挂载单张图片
补充指针与键盘预览回归测试
补全场景技术方案请求字段边界并加入文档总览
共享包出口导出场景运行时常量与类型
新增场景生成路由鉴权、必填校验与内联媒体拒绝测试
后端重建 generationInputs 字段避免透传客户端伪造内容
补齐 scene 画布素材类型标签并新增回归测试
移除场景图标 Lucide 内部 class 断言
同一参数化测试中的旧图标 class 断言一并改为稳定语义断言
自定义画风与画面内容统一使用可自增长多行输入
移除不再需要的 PlatformTextField 依赖
补充输入类型与自动增长样式回归测试
自定义画风复用主提示词输入样式与占位对齐
删除重复的场景输入框视觉覆盖
删除四套预设画风正文中的重复视觉风格标题
受控比例与画幅方向先替换,用户文本最后一次性拼入
用户输入中的模板占位符保持原文不再二次展开
补充标题唯一性与占位符注入回归测试
场景 Prompt 常量与 builder 移入 prompt::editor_scene
经 api-server::prompt 模块出口统一组织
更新消费方与技术方案文档位置
合并 master 最新修复
Project CI / Repository checks (pull_request) Successful in 1m11s
Project CI / Backend tests (pull_request) Successful in 3m40s
Project CI / Native shell tests (pull_request) Successful in 13m21s
Project CI / Frontend tests (pull_request) Successful in 2m52s
01b31e67ec
同步Runner GUI owner跨重启登记修复
同步开发环境托管MCP访问能力
保留图片画布游戏场景生成与后续修复历史
suzmii added 2 commits 2026-08-05 18:58:58 +08:00
补充场景产物在图片信息与导出元数据中的类型映射
增加场景元数据弹窗与导出清单回归测试
补齐场景必填字段就近错误提示
Project CI / Repository checks (pull_request) Successful in 53s
Project CI / Backend tests (pull_request) Successful in 3m46s
Project CI / Frontend tests (pull_request) Successful in 2m26s
Project CI / Native shell tests (pull_request) Successful in 12m4s
d8838429d0
将场景内容与自定义画风校验错误关联到对应输入框
补充字段错误样式、无障碍状态与提交交互回归测试
suzmii added 1 commit 2026-08-05 20:01:15 +08:00
Merge branch 'master' of ssh://192.168.35.82:2222/GenarrativeAI/Genarrative into feat/scene_v1
Project CI / Repository checks (pull_request) Successful in 58s
Project CI / Backend tests (pull_request) Successful in 3m32s
Project CI / Native shell tests (pull_request) Successful in 13m3s
Project CI / Frontend tests (pull_request) Successful in 2m41s
04c8da648c
kdletters requested changes 2026-08-05 23:48:32 +08:00
Dismissed
kdletters left a comment
Member

基于最新 master 6f181b36a 与当前 head 04c8da648 复审。当前 4 项 CI 均通过,但合并树仍有 6 个内容冲突;非冲突合并结果另有 2 个阻断项和 3 个一般问题,详见 inline comments。请 rebase 最新 master,修复后确保保留 master 的生成幂等、参考图上限与权威持久化契约,再请求复审。

基于最新 master 6f181b36a 与当前 head 04c8da648 复审。当前 4 项 CI 均通过,但合并树仍有 6 个内容冲突;非冲突合并结果另有 2 个阻断项和 3 个一般问题,详见 inline comments。请 rebase 最新 master,修复后确保保留 master 的生成幂等、参考图上限与权威持久化契约,再请求复审。
@@ -2035,0 +2056,4 @@
}),
onWalletBalanceMayHaveChanged,
);
if (
Member

[P2] inline 场景生成会漏掉生成告警。applyQueuedEditorGenerationProject 只覆盖队列终态;inline 响应里的尺寸恢复降级等 generated.warning 在这里没有像普通生图分支那样先调用 notifyEditorGenerationWarning,用户将看不到结果已降级。请在队列处理前转发该 warning,并补 inline 场景告警测试。

[P2] inline 场景生成会漏掉生成告警。`applyQueuedEditorGenerationProject` 只覆盖队列终态;inline 响应里的尺寸恢复降级等 `generated.warning` 在这里没有像普通生图分支那样先调用 `notifyEditorGenerationWarning`,用户将看不到结果已降级。请在队列处理前转发该 warning,并补 inline 场景告警测试。
suzmii marked this conversation as resolved
@@ -2035,0 +2078,4 @@
}
return;
}
addGeneratedResultLayer(generated, {
Member

[P1] 项目写回未完成时不能追加本地图层。最新 master 的普通生图分支在 canvasDialog && projectId 且响应没有权威 project 时会直接返回;场景分支缺少该保护。若生成期间占位被另一端删除等原因导致后端未应用 canvasCompletion,这里仍会把场景结果加入本地并标记完成,造成客户端画布与后端项目分叉。请在本地追加前复用普通生图的保护分支。

[P1] 项目写回未完成时不能追加本地图层。最新 master 的普通生图分支在 `canvasDialog && projectId` 且响应没有权威 `project` 时会直接返回;场景分支缺少该保护。若生成期间占位被另一端删除等原因导致后端未应用 canvasCompletion,这里仍会把场景结果加入本地并标记完成,造成客户端画布与后端项目分叉。请在本地追加前复用普通生图的保护分支。
suzmii marked this conversation as resolved
@@ -900,0 +902,4 @@
export type EditorSceneGenerationInput = EditorSceneGenerationRequest;
export async function generateEditorScene(input: EditorSceneGenerationInput) {
assertStableEditorMediaReferences(input.referenceImageSrcs, '场景参考图');
Member

[P2] 补齐场景参考图上限校验。最新 master 的普通生图客户端会在发请求前调用 assertEditorReferenceLimit(..., 5, ...),这里目前只校验引用是否稳定;历史恢复状态或直接调用可携带超过 5 张参考图,仍会发出注定被后端拒绝的请求。请复用同一上限校验,并补“超限时不发送 HTTP 请求”的测试。

[P2] 补齐场景参考图上限校验。最新 master 的普通生图客户端会在发请求前调用 `assertEditorReferenceLimit(..., 5, ...)`,这里目前只校验引用是否稳定;历史恢复状态或直接调用可携带超过 5 张参考图,仍会发出注定被后端拒绝的请求。请复用同一上限校验,并补“超限时不发送 HTTP 请求”的测试。
suzmii marked this conversation as resolved
@@ -900,0 +928,4 @@
'生成游戏场景失败',
{
timeoutMs: 1_200_000,
retry: EDITOR_REQUEST_RETRY_OPTIONS,
Member

[P1] 场景生成必须使用生成专用重试策略。最新 master 已把生成类 POST 切到 EDITOR_GENERATION_REQUEST_RETRY_OPTIONS:自动合并后本文件只导入新符号,而这里仍引用旧符号,会直接导致 typecheck 失败;若重新导入旧策略,inline 模式下响应丢失又会自动重试 Provider 调用,造成重复生成和持久化。请改用生成专用策略,并补场景请求不重试的测试。

[P1] 场景生成必须使用生成专用重试策略。最新 master 已把生成类 POST 切到 `EDITOR_GENERATION_REQUEST_RETRY_OPTIONS`:自动合并后本文件只导入新符号,而这里仍引用旧符号,会直接导致 typecheck 失败;若重新导入旧策略,inline 模式下响应丢失又会自动重试 Provider 调用,造成重复生成和持久化。请改用生成专用策略,并补场景请求不重试的测试。
suzmii marked this conversation as resolved
suzmii marked the pull request as work in progress 2026-08-06 09:31:18 +08:00
suzmii added 4 commits 2026-08-06 13:53:13 +08:00
保留游戏场景生成链路

接入生成幂等与参考图上限

保留权威画布持久化与完美像素能力

解决图片画布生成相关冲突
补齐触屏画风预览点击开关

转发场景生成告警并保留权威项目写回

限制场景参考图并禁用自动重试

补充场景生成回归测试与技术说明
归一空白场景生成选项

接入场景权威画布素材类型

统一完美像素迁移哈希口径

补充场景后端回归测试
修复游戏场景后端契约旁路
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Repository checks (pull_request) Failing after 10s
Project CI / Frontend tests (pull_request) Successful in 3m2s
Project CI / Native shell tests (pull_request) Successful in 12m32s
447c23840c
阻止通用图片接口绕过场景专用合同

规范场景任务标题与用户可见摘要

修复空白场景素材名称回退行为

补充场景接口和任务投影回归测试

同步场景技术方案与排障约定
suzmii added 2 commits 2026-08-06 14:44:53 +08:00
重读未收口的场景权威快照

补充场景队列完成回归测试

同步场景链路与排障约定
合并 master 最新改动
Project CI / Repository checks (pull_request) Failing after 10m16s
Project CI / Backend tests (pull_request) Failing after 8m40s
Project CI / Frontend tests (pull_request) Successful in 16m17s
Project CI / Native shell tests (pull_request) Has been cancelled
f4d6e2172c
suzmii added 1 commit 2026-08-06 15:08:06 +08:00
调整图像生成合成器导入顺序
Project CI / Repository checks (pull_request) Successful in 4m54s
Project CI / Backend tests (pull_request) Successful in 4m27s
Project CI / Native shell tests (pull_request) Successful in 14m25s
Project CI / Frontend tests (pull_request) Successful in 3m27s
67384dcbe8
- 调整 ImageCanvasBasicGenerationComposerView.tsx 中 import 语句顺序,符合代码风格规范
suzmii marked the pull request as ready for review 2026-08-06 15:56:00 +08:00
suzmii marked the pull request as work in progress 2026-08-06 15:56:14 +08:00
suzmii added 1 commit 2026-08-06 16:02:02 +08:00
合并主分支
Project CI / Repository checks (pull_request) Successful in 56s
Project CI / Frontend tests (pull_request) Successful in 3m2s
Project CI / Backend tests (pull_request) Successful in 3m36s
Project CI / Native shell tests (pull_request) Successful in 14m22s
8034c8249a
suzmii marked the pull request as ready for review 2026-08-06 16:02:43 +08:00
kdletters requested changes 2026-08-06 18:09:58 +08:00
Dismissed
kdletters left a comment
Member

基于最新 master 281c84b7b 与当前 head 8034c8249 复审。上轮 5 项代码问题均已修复,当前 4 项 CI 仍为绿色;本轮确认 1 个 External v1 场景合同旁路,以及 master 前进后产生的 8 个内容冲突,核心冲突位于场景与 BGM 共用提交链路。当前版本不可合并,具体修复点见 inline comments。

基于最新 master 281c84b7b 与当前 head 8034c8249 复审。上轮 5 项代码问题均已修复,当前 4 项 CI 仍为绿色;本轮确认 1 个 External v1 场景合同旁路,以及 master 前进后产生的 8 个内容冲突,核心冲突位于场景与 BGM 共用提交链路。当前版本不可合并,具体修复点见 inline comments。
@@ -1681,6 +1824,22 @@ pub async fn generate_editor_image(
payload: Result<Json<EditorImageGenerationRequest>, JsonRejection>,
) -> Result<Json<Value>, AppError> {
let Json(payload) = parse_editor_generation_json_payload(payload)?;
if payload
Member

[P1] External v1 仍可绕过场景专用合同

这里的拒绝只位于主站 generate_editor_image handler;/api/external/v1/editor/images/generations 在 external_editor_api.rs 中会直接调用 enqueue_editor_image_generation_for_owner,EditorImageGenerationRequest 的 kind 又只是普通字符串,OpenAPI enum 不会形成运行时校验。当前 PR 已让 worker、计费、存储 profile 和画布白名单正式识别 scene,所以持有 editor:image:generate scope 的 API Key 仍可提交 kind=scene、assetKind=scene 和任意 prompt,绕过 sceneContent/stylePreset/customStyle 校验与后端场景 Prompt 组装,最终落成正式场景资产。请在 External handler 或共享的不可信入口边界同步拒绝 scene,并补带有效 scope 与 Idempotency-Key 的 External 路由 400 回归测试。

[P1] External v1 仍可绕过场景专用合同 这里的拒绝只位于主站 generate_editor_image handler;/api/external/v1/editor/images/generations 在 external_editor_api.rs 中会直接调用 enqueue_editor_image_generation_for_owner,EditorImageGenerationRequest 的 kind 又只是普通字符串,OpenAPI enum 不会形成运行时校验。当前 PR 已让 worker、计费、存储 profile 和画布白名单正式识别 scene,所以持有 editor:image:generate scope 的 API Key 仍可提交 kind=scene、assetKind=scene 和任意 prompt,绕过 sceneContent/stylePreset/customStyle 校验与后端场景 Prompt 组装,最终落成正式场景资产。请在 External handler 或共享的不可信入口边界同步拒绝 scene,并补带有效 scope 与 Idempotency-Key 的 External 路由 400 回归测试。
suzmii marked this conversation as resolved
@@ -231,3 +265,2 @@
}: ImageGenerationSubmissionOptions): ImageGenerationSubmissionPlan {
const normalizedPrompt =
dialog.prompt.trim() || getDialogDefaultPrompt(dialog.mode);
const normalizedPrompt = resolveImageGenerationDialogPrompt(dialog);
Member

[P1] 合并最新 BGM 主线时同时保留两套提交契约

最新 master 281c84b7b 在同一函数新增了 canonicalBackgroundMusicPrompt 的前置分支,而当前行引入了场景必填 Prompt 的统一解析;三方合并已在这里形成内容冲突。只取 PR 侧会丢掉 BGM 已确认 Prompt 与专用 generationInputs,只取 master 侧会丢掉 scene plan、空场景必填语义和专用请求。请先合并最新 master:BGM 继续前置消费 canonicalBackgroundMusicPrompt,其他模式再走 resolveImageGenerationDialogPrompt,并同时保留 scene union/plan;补跑场景与 BGM submission model 回归。

[P1] 合并最新 BGM 主线时同时保留两套提交契约 最新 master 281c84b7b 在同一函数新增了 canonicalBackgroundMusicPrompt 的前置分支,而当前行引入了场景必填 Prompt 的统一解析;三方合并已在这里形成内容冲突。只取 PR 侧会丢掉 BGM 已确认 Prompt 与专用 generationInputs,只取 master 侧会丢掉 scene plan、空场景必填语义和专用请求。请先合并最新 master:BGM 继续前置消费 canonicalBackgroundMusicPrompt,其他模式再走 resolveImageGenerationDialogPrompt,并同时保留 scene union/plan;补跑场景与 BGM submission model 回归。
suzmii marked this conversation as resolved
@@ -1783,3 +1781,1 @@
: dialog.mode === 'audio-background-music'
? '游戏背景音乐'
: 'AI 生成图片');
const normalizedPrompt = resolveImageGenerationDialogPrompt(dialog);
Member

[P1] 工作流冲突不能丢 BGM claim 或场景校验

master 已在这里接入 backgroundMusicPromptAssist.beginSubmission、scope version 和提交所有权,当前 PR 则提前计算场景 normalizedPrompt;合并树在该位置冲突。正确整合需要先保留 BGM claim/ownership,再用 backgroundMusicSubmission?.prompt 与 resolveImageGenerationDialogPrompt(dialog) 分流,并继续向 buildImageGenerationSubmissionPlan 传 canonicalBackgroundMusicPrompt,同时保留后面的 scene 队列回读、warning 和权威项目写回。简单选择任一侧都会回退另一条现役生成链路。

[P1] 工作流冲突不能丢 BGM claim 或场景校验 master 已在这里接入 backgroundMusicPromptAssist.beginSubmission、scope version 和提交所有权,当前 PR 则提前计算场景 normalizedPrompt;合并树在该位置冲突。正确整合需要先保留 BGM claim/ownership,再用 backgroundMusicSubmission?.prompt 与 resolveImageGenerationDialogPrompt(dialog) 分流,并继续向 buildImageGenerationSubmissionPlan 传 canonicalBackgroundMusicPrompt,同时保留后面的 scene 队列回读、warning 和权威项目写回。简单选择任一侧都会回退另一条现役生成链路。
suzmii marked this conversation as resolved
src/index.css Outdated
@@ -16796,3 +16844,211 @@ button {
background: #f8fafc;
box-shadow: 0 10px 24px rgba(15, 23, 42, 0.08);
}
.image-canvas-editor__scene-custom-style {
Member

[P2] CSS 冲突必须保留并分别闭合两套面板样式

最新 master 在文件尾新增完整 BGM composer 样式和 max-width:640px 媒体查询,当前 PR 从这里新增场景画风样式与 max-width:760px 查询;合并冲突横跨两个区块。若只删除冲突标记而不重排闭合括号,场景样式会被错误嵌进 BGM 的移动端媒体查询;若选择一侧则另一面板直接丢样式。请保留完整 BGM 区块并先闭合其媒体查询,再接完整场景区块,分别验证桌面与移动布局。

[P2] CSS 冲突必须保留并分别闭合两套面板样式 最新 master 在文件尾新增完整 BGM composer 样式和 max-width:640px 媒体查询,当前 PR 从这里新增场景画风样式与 max-width:760px 查询;合并冲突横跨两个区块。若只删除冲突标记而不重排闭合括号,场景样式会被错误嵌进 BGM 的移动端媒体查询;若选择一侧则另一面板直接丢样式。请保留完整 BGM 区块并先闭合其媒体查询,再接完整场景区块,分别验证桌面与移动布局。
suzmii marked this conversation as resolved
suzmii marked the pull request as work in progress 2026-08-06 18:57:28 +08:00
suzmii added 2 commits 2026-08-06 20:19:42 +08:00
保留结构化游戏场景生成链路
合并背景音乐提示词与共享音频编辑能力
保留角色动作数据约定与相关文档索引
修复外部图片接口绕过场景合同
Project CI / Repository checks (pull_request) Failing after 44s
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
0bbe910d69
统一主站与外部图片生成的场景边界校验
新增场景伪装请求零入队回归测试
同步外部OpenAPI、Skill与场景技术文档
suzmii added 1 commit 2026-08-06 20:28:19 +08:00
修复场景合并后的导入排序
Project CI / Repository checks (pull_request) Successful in 1m31s
Project CI / Frontend tests (pull_request) Successful in 4m2s
Project CI / Backend tests (pull_request) Successful in 4m12s
Project CI / Native shell tests (pull_request) Successful in 13m24s
2fd381fc9e
调整共享契约导出顺序
调整编辑器客户端类型导入顺序
suzmii marked the pull request as ready for review 2026-08-06 21:03:28 +08:00
suzmii added this to the 美术画布 project 2026-08-07 16:40:57 +08:00
suzmii added 1 commit 2026-08-07 16:42:12 +08:00
Merge branch 'master' of ssh://192.168.35.82:2222/GenarrativeAI/Genarrative into feat/scene_v1
Project CI / Repository checks (pull_request) Successful in 53s
Project CI / Frontend tests (pull_request) Successful in 3m47s
Project CI / Backend tests (pull_request) Successful in 4m3s
Project CI / Native shell tests (pull_request) Successful in 15m23s
1bb627e404
suzmii requested review from kdletters 2026-08-07 17:32:10 +08:00
kdletters approved these changes 2026-08-07 18:09:23 +08:00
Dismissed
kdletters scheduled this pull request to auto merge when all checks succeed 2026-08-07 18:09:41 +08:00
kdletters added 1 commit 2026-08-07 18:09:48 +08:00
Merge branch 'master' into feat/scene_v1
Project CI / Frontend tests (pull_request) Successful in 2m49s
Project CI / Native shell tests (pull_request) Failing after 41s
Project CI / Repository checks (pull_request) Successful in 50s
Project CI / Backend tests (pull_request) Successful in 4m46s
d002f07e73
kdletters dismissed kdletters's review 2026-08-07 18:09:48 +08:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

suzmii requested review from kdletters 2026-08-07 19:36:18 +08:00
suzmii added 1 commit 2026-08-07 19:36:47 +08:00
Merge branch 'master' into feat/scene_v1
Project CI / Repository checks (pull_request) Successful in 49s
Project CI / Frontend tests (pull_request) Successful in 3m38s
Project CI / Backend tests (pull_request) Successful in 4m42s
Project CI / Native shell tests (pull_request) Successful in 16m32s
1a741f2358
suzmii removed review request for kdletters 2026-08-07 19:49:36 +08:00
suzmii added 1 commit 2026-08-07 19:55:46 +08:00
合并主线更新内容
Project CI / Native shell tests (pull_request) Successful in 13m36s
Project CI / Backend tests (pull_request) Successful in 4m3s
Project CI / Repository checks (pull_request) Successful in 48s
Project CI / Frontend tests (pull_request) Successful in 4m53s
f3c92d16c3
- 合并外部 MCP 项目选择修复:紧凑项目列表、封面稳定引用、请求体参数提示与回归测试
- 同步 External v1 契约、Skill 与项目记忆
- 解决 external_editor_api.rs 测试模块合并冲突,保留两侧新增测试代码
suzmii requested review from kdletters 2026-08-07 20:49:42 +08:00
kdletters added 1 commit 2026-08-08 10:25:14 +08:00
Merge branch 'master' into feat/scene_v1
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
62e30e2c46
kdletters merged commit 72f268e088 into master 2026-08-08 10:25:43 +08:00
kdletters deleted branch feat/scene_v1 2026-08-08 10:25:43 +08:00
Sign in to join this conversation.