From 603650fbf47024d3587427348a9e786dff84b86f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sat, 19 Sep 2026 03:21:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20AGC=20=E8=B5=84=E6=BA=90?= =?UTF-8?q?=20kind=20=E6=94=B6=E6=95=9B=E5=90=8E=E7=9A=84=20Rust=20?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=E4=B8=8E=E5=B7=A5=E5=85=B7=E6=A0=8F?= =?UTF-8?q?=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - agent/runtime_tools/media.rs:asset_kind 只在入参未声明(空白)时落通道默认值,显式认不出的值保持 Unknown 交给下游失败关闭。 - tests/project.rs:规范图 / 图集用例的入参改传 canonical kind(icon-spec / icon-spritesheet),用例名与断言同步。 --- .../src-tauri/src/agent/runtime_tools/media.rs | 7 ++++++- .../src-tauri/src/tests/project.rs | 15 ++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) 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"],