From cebffb9dadcee82a41f443919a1b5761b86a3f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Mon, 5 Oct 2026 17:28:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95(AGC=E6=A8=A1=E5=9E=8B):=20?= =?UTF-8?q?=E8=A1=A5=E9=BD=90=E8=A3=B8=E7=9B=AE=E5=BD=95=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 legacy_raw_catalog_payload_defaults_optional_fields:覆盖无 ok 信封、缺少 agentMode/protocol/unavailableModels 的旧裸目录响应 - 断言缺省按 Codex + OpenAI Responses + 空不可用桶兜底,锁定既有兼容行为 --- .../src-tauri/src/llm_catalog.rs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/apps/ai-game-creator-shell/src-tauri/src/llm_catalog.rs b/apps/ai-game-creator-shell/src-tauri/src/llm_catalog.rs index 620701eb0..eb2d75db9 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/llm_catalog.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/llm_catalog.rs @@ -290,6 +290,32 @@ mod tests { ); } + #[test] + fn legacy_raw_catalog_payload_defaults_optional_fields() { + // 旧 dev 代理 / 本地 fixture 直接返回裸目录(没有 `ok` 信封),且缺少 + // `agentMode` / `protocol` / `unavailableModels`:必须仍能解析,并按 Codex + + // OpenAI Responses + 空不可用桶兼容。 + let body = serde_json::json!({ + "defaultModelId": "quality", + "models": [{ "id": "quality", "displayName": "高质量" }], + "revision": 9 + }) + .to_string(); + + let catalog = parse_catalog_payload(body.as_bytes()).expect("raw catalog should parse"); + assert_eq!(catalog.default_model_id, "quality"); + assert_eq!(catalog.revision, 9); + assert!(catalog.unavailable_models.is_empty()); + assert_eq!( + catalog.models[0].agent_mode, + shared_contracts::llm::AgcAgentMode::Codex + ); + assert_eq!( + catalog.models[0].protocol, + shared_contracts::llm::AgcModelProtocol::OpenAiResponses + ); + } + #[tokio::test] async fn official_catalog_fails_closed_on_http_error_without_accepting_error_as_data() { let listener = TcpListener::bind("127.0.0.1:0").expect("bind fixture");