fix: use a more efficient wire format for ExecCommandOutputDeltaEvent.chunk (#3163)

When serializing to JSON, the existing solution created an enormous
array of ints, which is far more bytes on the wire than a base64-encoded
string would be.
This commit is contained in:
Michael Bolin
2025-09-04 08:21:58 -07:00
committed by GitHub
parent bd4fa85507
commit 0a83db5512
4 changed files with 7 additions and 5 deletions

View File

@@ -17,6 +17,7 @@ mime_guess = "2.0.5"
serde = { version = "1", features = ["derive"] }
serde_bytes = "0.11"
serde_json = "1"
serde_with = "3.14.0"
strum = "0.27.2"
strum_macros = "0.27.2"
tracing = "0.1.41"

View File

@@ -15,7 +15,7 @@ use mcp_types::CallToolResult;
use mcp_types::Tool as McpTool;
use serde::Deserialize;
use serde::Serialize;
use serde_bytes::ByteBuf;
use serde_with::serde_as;
use strum_macros::Display;
use ts_rs::TS;
use uuid::Uuid;
@@ -782,14 +782,15 @@ pub enum ExecOutputStream {
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde_as]
pub struct ExecCommandOutputDeltaEvent {
/// Identifier for the ExecCommandBegin that produced this chunk.
pub call_id: String,
/// Which stream produced this chunk.
pub stream: ExecOutputStream,
/// Raw bytes from the stream (may not be valid UTF-8).
#[serde(with = "serde_bytes")]
pub chunk: ByteBuf,
#[serde_as(as = "Base64")]
pub chunk: Vec<u8>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]