diff --git a/crates/codex-plus-core/src/protocol_proxy.rs b/crates/codex-plus-core/src/protocol_proxy.rs index ee01e3e3d..8605a0a61 100644 --- a/crates/codex-plus-core/src/protocol_proxy.rs +++ b/crates/codex-plus-core/src/protocol_proxy.rs @@ -2361,6 +2361,15 @@ fn responses_content_to_chat_content(_role: &str, content: &Value) -> Value { } } } + "encrypted_content" => { + if let Some(value) = part + .get("encrypted_content") + .and_then(Value::as_str) + .filter(|value| !value.is_empty()) + { + chat_parts.push(json!({ "type": "text", "text": value })); + } + } "refusal" => { if let Some(value) = part.get("refusal").and_then(Value::as_str) { if !value.is_empty() { diff --git a/crates/codex-plus-core/tests/encrypted_content_subagent.rs b/crates/codex-plus-core/tests/encrypted_content_subagent.rs new file mode 100644 index 000000000..5fbb07b47 --- /dev/null +++ b/crates/codex-plus-core/tests/encrypted_content_subagent.rs @@ -0,0 +1,30 @@ +use codex_plus_core::protocol_proxy::responses_to_chat_completions; +use serde_json::json; + +#[test] +fn responses_request_preserves_encrypted_content_for_subagent_tasks() { + let converted = responses_to_chat_completions(json!({ + "model": "deepseek-v4-flash", + "input": [ + { + "type": "message", + "role": "user", + "content": [ + { + "type": "input_text", + "text": "Message Type: NEW_TASK\nTask name: /root/probe_none\nSender: /root\nPayload:\n" + }, + { + "type": "encrypted_content", + "encrypted_content": "请回显标记:PROBE-NONE-7F3A" + } + ] + } + ] + })) + .unwrap(); + + let content = converted["messages"][0]["content"].as_str().unwrap(); + assert!(content.contains("Payload:")); + assert!(content.contains("PROBE-NONE-7F3A")); +}