add status field for persistence result in chat doc

This commit is contained in:
2026-07-13 19:57:17 +08:00
parent 2128bb109c
commit 5c67bc7714
@@ -23,6 +23,20 @@ pub enum EditorAgentAttachmentSource {
LibraryAsset,
}
#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum EditorAgentToolCallStatus {
#[serde(alias = "pending_confirmation", alias = "executing")]
NotCompleted,
Completed,
Failed,
Cancelled,
}
fn default_editor_agent_tool_call_status() -> EditorAgentToolCallStatus {
EditorAgentToolCallStatus::NotCompleted
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct EditorAgentAttachmentRef {
@@ -140,13 +154,13 @@ pub struct EditorAgentToolCallImageRef {
#[serde(rename_all = "camelCase")]
pub struct EditorAgentToolCall {
pub tool_name: String,
#[serde(default = "default_editor_agent_tool_call_status")]
pub status: EditorAgentToolCallStatus,
pub args: serde_json::Value,
pub display_args: EditorAgentToolCallDisplayArgs,
#[serde(default)]
pub external_job_id: Option<String>,
#[serde(default)]
pub cancelled_at: Option<String>,
#[serde(default)]
pub images: Vec<EditorAgentGeneratedImage>,
#[serde(default)]
pub videos: Vec<EditorAgentGeneratedVideo>,
@@ -267,6 +281,7 @@ mod tests {
let tool_call = EditorAgentToolCall {
tool_name: "generate-video".to_string(),
status: EditorAgentToolCallStatus::Completed,
args: json!({}),
display_args: EditorAgentToolCallDisplayArgs {
string_args: vec![EditorAgentToolCallStringArg {
@@ -292,7 +307,6 @@ mod tests {
},
},
external_job_id: Some("task-editor-agent-1".to_string()),
cancelled_at: None,
images: Vec::new(),
videos: vec![EditorAgentGeneratedVideo {
resource_id: Some("resource-video-1".to_string()),
@@ -314,7 +328,7 @@ mod tests {
let payload = serde_json::to_value(tool_call).expect("tool call should serialize");
assert_eq!(payload["videos"][0]["videoSrc"], "/generated-video.mp4");
assert_eq!(payload["externalJobId"], "task-editor-agent-1");
assert!(payload.get("status").is_none());
assert_eq!(payload["status"], "completed");
assert_eq!(payload["audios"][0]["audioSrc"], "/generated-audio.mp3");
assert_eq!(
payload["displayArgs"]["stringArgs"][0]["value"],
@@ -332,7 +346,7 @@ mod tests {
}
#[test]
fn legacy_tool_call_status_is_ignored_on_read() {
fn legacy_tool_call_status_maps_to_not_completed_on_read() {
let tool_call = serde_json::from_value::<EditorAgentToolCall>(json!({
"toolName": "generate-image",
"status": "executing",
@@ -347,6 +361,6 @@ mod tests {
.expect("legacy status should not break persisted OSS documents");
let payload = serde_json::to_value(tool_call).expect("tool call should serialize");
assert!(payload.get("status").is_none());
assert_eq!(payload["status"], "not_completed");
}
}