From a6ad896db07c223de757fd156bba32105ed73af0 Mon Sep 17 00:00:00 2001 From: Jason Date: Fri, 23 Jan 2026 20:42:50 +0800 Subject: [PATCH] fix(opencode): preserve extra model fields during serialization Add `extra` field with serde flatten to OpenCodeModel struct to capture custom fields like cost, modalities, thinking, and variants that were previously lost during save operations. --- src-tauri/src/provider.rs | 5 +++++ src/types.ts | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src-tauri/src/provider.rs b/src-tauri/src/provider.rs index c1bcf3040..d13020737 100644 --- a/src-tauri/src/provider.rs +++ b/src-tauri/src/provider.rs @@ -596,6 +596,11 @@ pub struct OpenCodeModel { /// 模型额外选项(provider 路由等) #[serde(skip_serializing_if = "Option::is_none")] pub options: Option>, + + /// 额外字段(cost、modalities、thinking、variants 等) + /// 使用 flatten 捕获所有未明确定义的字段 + #[serde(flatten, default, skip_serializing_if = "HashMap::is_empty")] + pub extra: HashMap, } /// OpenCode 模型限制 diff --git a/src/types.ts b/src/types.ts index 007674302..14c32e02c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -310,6 +310,8 @@ export interface OpenCodeModel { output?: number; }; options?: Record; // 模型级别额外选项(provider 路由等) + // 支持任意额外字段(cost、modalities、thinking、variants 等) + [key: string]: unknown; } // OpenCode 供应商选项