From 6edb826324599455c650d31cd26e6b9a3dcf8a05 Mon Sep 17 00:00:00 2001 From: kvtodev Date: Mon, 13 Jul 2026 14:29:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=97=A7=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=AD=97=E6=AE=B5=20`id`=20?= =?UTF-8?q?=E7=9A=84=E5=8F=8D=E5=BA=8F=E5=88=97=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shared-contracts/src/editor_agent.rs | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/server-rs/crates/shared-contracts/src/editor_agent.rs b/server-rs/crates/shared-contracts/src/editor_agent.rs index ffa18e562..da29519d1 100644 --- a/server-rs/crates/shared-contracts/src/editor_agent.rs +++ b/server-rs/crates/shared-contracts/src/editor_agent.rs @@ -1,7 +1,7 @@ //! 画布Agent对话契约:与 packages/shared/src/contracts/editorAgent.ts 保持同形。 //! 会话元数据存 SpacetimeDB,消息正文整体存 OSS(editor-agent/{conversationId}.json)。 -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Deserializer, Serialize}; pub const EDITOR_AGENT_MAX_ATTACHMENTS: usize = 9; pub const EDITOR_AGENT_TITLE_MAX_CHARS: usize = 20; @@ -155,10 +155,29 @@ pub struct EditorAgentToolCall { #[serde(default)] pub error: Option, } +fn deserialize_id_or_zero<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + #[derive(Deserialize)] + #[serde(untagged)] + enum IdOrZero { + Num(usize), + Str(String), + Other(serde_json::Value), + } + + match IdOrZero::deserialize(deserializer)? { + IdOrZero::Num(n) => Ok(n), + _ => Ok(0), + } +} #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct EditorAgentMessage { + // to compatible for legacy version + #[serde(deserialize_with = "deserialize_id_or_zero")] pub id: usize, pub role: EditorAgentMessageRole, pub text: String,