diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/media.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/media.rs index 1968de198..c3890466a 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/media.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_tools/media.rs @@ -618,7 +618,12 @@ pub(in crate::agent) async fn observe_agent_runtime_platform_art_asset_generatio } else { requested_options.image_size }, - asset_kind: if requested_options.asset_kind.is_empty() { + // kind 已是枚举,「空串」不再可表达:只有工具入参**没有**声明 assetKind(空白)才落 + // 本通道默认值。显式给了认不出的值仍是 `Unknown`,继续在下游按「不受支持」失败关闭, + // 不做兜底猜测。 + asset_kind: if requested_options.asset_kind == GameCreationAppAssetKind::Unknown + && requested_asset_kind.trim().is_empty() + { defaults.asset_kind } else { requested_options.asset_kind diff --git a/apps/ai-game-creator-shell/src-tauri/src/tests/project.rs b/apps/ai-game-creator-shell/src-tauri/src/tests/project.rs index 7beeb6825..5140233a1 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/tests/project.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/tests/project.rs @@ -3409,7 +3409,7 @@ async fn generate_local_project_asset_command_lands_the_requested_target_categor } #[tokio::test] -async fn generate_local_project_asset_command_maps_spec_onto_the_verified_icon_spec_channel() { +async fn generate_local_project_asset_command_registers_icon_spec_with_the_spec_generation_kind() { let root = unique_project_path(); let config_dir = unique_project_path(); let base_url = spawn_mock_external_canvas_generation_api_server(None); @@ -3436,7 +3436,7 @@ async fn generate_local_project_asset_command_maps_spec_onto_the_verified_icon_s let asset = generate_local_project_asset( root.to_string_lossy().into_owned(), - "spec".to_string(), + "icon-spec".to_string(), "原创收集玩法的统一视觉规范".to_string(), None, None, @@ -3457,7 +3457,7 @@ async fn generate_local_project_asset_command_maps_spec_onto_the_verified_icon_s .iter() .find(|entry| entry["id"].as_str() == Some(asset.id.as_str())) .expect("registered toolbar spec asset"); - // spec 必须收口到客户端验证过的 icon-spec,否则规范图无法作为 UI 原型与透明图集的权威参考。 + // 工具栏直接给 canonical kind;平台请求词汇 `spec` 只出现在 generationKind,不再参与登记。 assert_eq!(entry["kind"], "icon-spec"); assert_eq!(entry["source"]["generationKind"], "spec"); assert_eq!( @@ -3476,7 +3476,8 @@ async fn generate_local_project_asset_command_maps_spec_onto_the_verified_icon_s } #[tokio::test] -async fn generate_local_project_asset_command_generates_art_spritesheet_from_the_registered_spec() { +async fn generate_local_project_asset_command_generates_icon_spritesheet_from_the_registered_spec() +{ let root = unique_project_path(); let config_dir = unique_project_path(); let base_url = spawn_mock_external_canvas_generation_api_server(None); @@ -3504,7 +3505,7 @@ async fn generate_local_project_asset_command_generates_art_spritesheet_from_the // 透明图集必须有权威规范图:没有已登记的 icon-spec 时必须明确失败,不能静默降级成普通图。 let missing_reference = generate_local_project_asset( root.to_string_lossy().into_owned(), - "art-spritesheet".to_string(), + "icon-spritesheet".to_string(), "原创收集玩法素材图集".to_string(), None, None, @@ -3533,7 +3534,7 @@ async fn generate_local_project_asset_command_generates_art_spritesheet_from_the let asset = generate_local_project_asset( root.to_string_lossy().into_owned(), - "art-spritesheet".to_string(), + "icon-spritesheet".to_string(), "原创收集玩法素材图集".to_string(), Some("1:1".to_string()), Some("1K".to_string()), @@ -3555,7 +3556,7 @@ async fn generate_local_project_asset_command_generates_art_spritesheet_from_the .iter() .find(|entry| entry["id"].as_str() == Some(asset.id.as_str())) .expect("registered toolbar spritesheet asset"); - // 平台请求词汇 `art-spritesheet` 登记时收口成正式成员 `icon-spritesheet`。 + // 工具栏直接给 canonical kind;平台请求词汇 `icon-spritesheet` 只出现在 generationKind。 assert_eq!(entry["kind"], "icon-spritesheet"); assert_eq!( entry["source"]["generationRoute"],