#[cfg(feature = "mcp")]
pub trait CommandResponse {
fn into_mcp(self) -> McpResponseItem;
}
#[cfg(feature = "mcp")]
#[derive(Debug, Clone)]
pub enum McpResponseItem {
Media(crate::mcp::tool::ContentBlock),
JSONL(serde_json::Value),
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::agent::completions::message::ImageUrl {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::Media(self.into())
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::agent::completions::message::InputAudio {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::Media(self.into())
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::agent::completions::message::VideoUrl {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::Media(self.into())
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::agent::completions::message::File {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::Media(self.into())
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::agent::completions::message::RichContentPart {
fn into_mcp(self) -> McpResponseItem {
use crate::agent::completions::message::RichContentPart;
match self {
RichContentPart::Text { text } => text.into_mcp(),
RichContentPart::ImageUrl { image_url } => image_url.into_mcp(),
RichContentPart::InputAudio { input_audio } => input_audio.into_mcp(),
RichContentPart::InputVideo { video_url } => video_url.into_mcp(),
RichContentPart::VideoUrl { video_url } => video_url.into_mcp(),
RichContentPart::File { file } => file.into_mcp(),
}
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for String {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(serde_json::Value::String(self))
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for serde_json::Value {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(self)
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for schemars::Schema {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(serde_json::to_value(self).unwrap())
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::RemotePath {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(serde_json::to_value(self).unwrap())
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::cli::command::ResponseSchema {
fn into_mcp(self) -> McpResponseItem {
self.0.into_mcp()
}
}
#[cfg(feature = "mcp")]
impl<T: CommandResponse> CommandResponse for Option<T> {
fn into_mcp(self) -> McpResponseItem {
match self {
Some(v) => v.into_mcp(),
None => McpResponseItem::JSONL(serde_json::Value::Null),
}
}
}
#[cfg(feature = "mcp")]
impl<T: CommandResponse> CommandResponse for Result<T, crate::cli::Error> {
fn into_mcp(self) -> McpResponseItem {
match self {
Ok(v) => v.into_mcp(),
Err(e) => e.into_mcp(),
}
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::agent::completions::message::AssistantToolCallDelta {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(
serde_json::to_value(self).unwrap(),
)
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::agent::completions::message::AssistantToolCall {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(
serde_json::to_value(self).unwrap(),
)
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::agent::completions::response::Logprobs {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(
serde_json::to_value(self).unwrap(),
)
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::Remote {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(
serde_json::to_value(self).unwrap(),
)
}
}
#[cfg(feature = "mcp")]
impl CommandResponse for crate::vector::completions::request::VectorCompletionCreateParams {
fn into_mcp(self) -> McpResponseItem {
McpResponseItem::JSONL(
serde_json::to_value(self).unwrap(),
)
}
}