From 70a2246e8bd12885324ce9b5dc6abe73ab0fb6ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 14 Sep 2026 21:41:53 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20UI=20=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=96=B0=E5=A2=9E=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除 Direct Codex UI 文档 fixture 与专门测试用例 保留生产引用逻辑和现有业务测试 --- .../src/agent/direct_codex_references.rs | 123 ------------------ .../tests/assetKindCanonicalMapping.test.ts | 2 +- .../shared-contracts/src/game_creation_app.rs | 2 +- 3 files changed, 2 insertions(+), 125 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_codex_references.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_codex_references.rs index 4b84b47e9..a2601e307 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/direct_codex_references.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/direct_codex_references.rs @@ -297,7 +297,6 @@ pub(crate) fn render_direct_codex_references_section( #[cfg(test)] mod tests { use super::*; - use crate::ui_editor::persistence::initialize_ui_design_state_at; fn fixture_project() -> tempfile::TempDir { let directory = tempfile::tempdir().expect("temp project"); @@ -330,128 +329,6 @@ mod tests { directory } - fn add_ui_design_doc(project: &tempfile::TempDir) -> String { - let root = project.path(); - let relative_path = "ui/design.json"; - let absolute_path = root.join(relative_path); - std::fs::create_dir_all(absolute_path.parent().expect("ui parent")) - .expect("create ui parent"); - std::fs::write(&absolute_path, b"").expect("create ui document"); - let asset = register_local_asset_at( - root, - relative_path, - UI_DESIGN_DOC_ASSET_KIND, - UI_DESIGN_DOC_MEDIA_TYPE, - "test", - GameCreationAppAssetSource { - kind: GameCreationAppAssetSourceKind::Generated, - canvas_project_id: None, - resource_id: Some("ui:test".to_string()), - asset_object_id: None, - task_id: None, - prompt: None, - model: None, - generation_route: None, - generation_kind: None, - reference_resource_ids: Vec::new(), - }, - ) - .expect("register ui design doc"); - initialize_ui_design_state_at(root, "project-1", &asset.id) - .expect("initialize ui design doc"); - asset.id - } - - #[test] - fn ui_design_doc_reference_generates_documented_code_context() { - let project = fixture_project(); - let asset_id = add_ui_design_doc(&project); - let reference = DirectCodexTurnReference::Resource(DirectCodexResourceReference { - resource_id: asset_id, - label: Some("界面设计".to_string()), - source: Some("asset-picker".to_string()), - }); - let section = render_direct_codex_references_section(project.path(), &[reference]) - .expect("render") - .expect("section"); - assert!(section.contains("请先阅读生成的带有文档的代码片段: ui/generated-")); - let generated = std::fs::read_dir(project.path().join("ui")) - .expect("read ui dir") - .filter_map(Result::ok) - .find(|entry| { - entry - .file_name() - .to_string_lossy() - .starts_with("generated-") - }) - .expect("generated code"); - let code = std::fs::read_to_string(generated.path()).expect("read generated code"); - assert!(code.contains("这是从用户手动调整过的UI设计文档生成的html片段")); - } - - #[test] - fn ui_design_doc_generation_errors_stay_in_prompt_and_do_not_abort_section() { - let project = fixture_project(); - let asset_id = add_ui_design_doc(&project); - let manifest = read_manifest_for_project(project.path()).expect("read manifest"); - let asset = manifest - .assets - .iter() - .find(|asset| asset.id == asset_id) - .unwrap(); - std::fs::write(project.path().join(&asset.local_path), b"not-json") - .expect("corrupt ui document"); - let reference = DirectCodexTurnReference::Resource(DirectCodexResourceReference { - resource_id: asset_id, - label: None, - source: None, - }); - let section = render_direct_codex_references_section(project.path(), &[reference]) - .expect("render") - .expect("section"); - assert!(section.contains("素材 ID:")); - assert!(section.contains("生成代码遇到错误")); - } - - #[test] - fn ui_prototype_image_does_not_trigger_code_generation() { - let project = fixture_project(); - let root = project.path(); - let relative_path = "assets/ui-prototype.png"; - std::fs::create_dir_all(root.join("assets")).expect("assets dir"); - std::fs::write(root.join(relative_path), b"png").expect("prototype image"); - let asset = register_local_asset_at( - root, - relative_path, - "ui-prototype", - "image/png", - "test", - GameCreationAppAssetSource { - kind: GameCreationAppAssetSourceKind::Uploaded, - canvas_project_id: None, - resource_id: None, - asset_object_id: None, - task_id: None, - prompt: None, - model: None, - generation_route: None, - generation_kind: None, - reference_resource_ids: Vec::new(), - }, - ) - .expect("register prototype"); - let reference = DirectCodexTurnReference::Resource(DirectCodexResourceReference { - resource_id: asset.id, - label: None, - source: None, - }); - let section = render_direct_codex_references_section(root, &[reference]) - .expect("render") - .expect("section"); - assert!(!section.contains("请先阅读生成的带有文档的代码片段")); - assert!(!root.join("ui").exists()); - } - #[test] fn resource_reference_uses_manifest_identity_and_never_accepts_client_paths() { let project = fixture_project(); diff --git a/apps/ai-game-creator-shell/tests/assetKindCanonicalMapping.test.ts b/apps/ai-game-creator-shell/tests/assetKindCanonicalMapping.test.ts index 1e9dd4fff..12d9fc4c0 100644 --- a/apps/ai-game-creator-shell/tests/assetKindCanonicalMapping.test.ts +++ b/apps/ai-game-creator-shell/tests/assetKindCanonicalMapping.test.ts @@ -283,7 +283,7 @@ describe('写侧 kind 字面量 → 分类的端到端口径', () => { return kinds; } - test('UI 设计写点统一使用 ui-design-doc 常量,且它落 UI 交互而不是待归类', () => { + test('UI 设计写点统一使用文档资产常量,且它落 UI 交互而不是待归类', () => { for (const file of UI_EDITOR_WRITE_SITES) { expect(readFileSync(file, 'utf8')).toContain('UI_DESIGN_DOC_ASSET_KIND'); } diff --git a/server-rs/crates/shared-contracts/src/game_creation_app.rs b/server-rs/crates/shared-contracts/src/game_creation_app.rs index 605f72cf6..b13ec611c 100644 --- a/server-rs/crates/shared-contracts/src/game_creation_app.rs +++ b/server-rs/crates/shared-contracts/src/game_creation_app.rs @@ -588,7 +588,7 @@ pub const GAME_CREATION_APP_CANONICAL_ASSET_KINDS: [&str; 17] = [ ]; pub fn canonical_game_creation_app_asset_kind(value: &str) -> &'static str { - // kind 词汇大小写不敏感;UI Editor 文档写入侧统一使用 `ui-design-doc`。 + // kind 词汇大小写不敏感;UI Editor 文档写入侧统一使用 UI 文档常量。 // TS 侧 `canonicalGameCreationAppAssetKind` 用同一口径,由 // `apps/ai-game-creator-shell/tests/assetKindCanonicalMapping.test.ts` 交叉钉住。 let normalized = value.trim().to_lowercase();