use objectiveai_sdk::mcp;
#[derive(Debug, Clone)]
pub enum Continuation<OPENROUTER, CLAUDEAGENTSDK, CODEXSDK, MOCK> {
Openrouter {
items: Vec<ContinuationItem<OPENROUTER>>,
mcp_connection: Option<mcp::Connection>,
},
ClaudeAgentSdk {
items: Vec<ContinuationItem<CLAUDEAGENTSDK>>,
mcp_connection: Option<mcp::Connection>,
},
CodexSdk {
items: Vec<ContinuationItem<CODEXSDK>>,
mcp_connection: Option<mcp::Connection>,
},
Mock {
items: Vec<ContinuationItem<MOCK>>,
mcp_connection: Option<mcp::Connection>,
},
}
impl<OPENROUTER, CLAUDEAGENTSDK, CODEXSDK, MOCK>
Continuation<OPENROUTER, CLAUDEAGENTSDK, CODEXSDK, MOCK>
{
pub fn push_user_message(&mut self, message: objectiveai_sdk::agent::completions::message::UserMessage) {
match self {
Self::Openrouter { items, .. } => items.push(ContinuationItem::UserMessage(message)),
Self::ClaudeAgentSdk { items, .. } => items.push(ContinuationItem::UserMessage(message)),
Self::CodexSdk { items, .. } => items.push(ContinuationItem::UserMessage(message)),
Self::Mock { items, .. } => items.push(ContinuationItem::UserMessage(message)),
}
}
pub fn push_tool_message(&mut self, message: objectiveai_sdk::agent::completions::message::ToolMessage) {
match self {
Self::Openrouter { items, .. } => items.push(ContinuationItem::ToolMessage(message)),
Self::ClaudeAgentSdk { items, .. } => items.push(ContinuationItem::ToolMessage(message)),
Self::CodexSdk { items, .. } => items.push(ContinuationItem::ToolMessage(message)),
Self::Mock { items, .. } => items.push(ContinuationItem::ToolMessage(message)),
}
}
pub fn upstream(&self) -> objectiveai_sdk::agent::Upstream {
match self {
Self::Openrouter { .. } => objectiveai_sdk::agent::Upstream::Openrouter,
Self::ClaudeAgentSdk { .. } => objectiveai_sdk::agent::Upstream::ClaudeAgentSdk,
Self::CodexSdk { .. } => objectiveai_sdk::agent::Upstream::CodexSdk,
Self::Mock { .. } => objectiveai_sdk::agent::Upstream::Mock,
}
}
pub fn mcp_connection(&self) -> Option<&mcp::Connection> {
match self {
Self::Openrouter { mcp_connection, .. }
| Self::ClaudeAgentSdk { mcp_connection, .. }
| Self::CodexSdk { mcp_connection, .. }
| Self::Mock { mcp_connection, .. } => mcp_connection.as_ref(),
}
}
}
#[derive(Debug, Clone)]
pub enum ContinuationItem<STATE> {
State(STATE),
ToolMessage(objectiveai_sdk::agent::completions::message::ToolMessage),
UserMessage(objectiveai_sdk::agent::completions::message::UserMessage),
}