Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};

#[derive(Debug)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};

#[derive(Debug)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};

#[derive(Debug)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};

#[derive(Debug)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};

#[derive(Debug)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::content::Content;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};

#[derive(Debug)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};

#[derive(Debug)]
Expand Down
2 changes: 1 addition & 1 deletion crates/goose-bench/src/eval_suites/vibes/flappy_bird.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};
use std::fs;

Expand Down
2 changes: 1 addition & 1 deletion crates/goose-bench/src/eval_suites/vibes/goose_wiki.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};
use std::fs;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::eval_suites::{
use crate::register_evaluation;
use async_trait::async_trait;
use goose::message::MessageContent;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::{self, Value};

pub struct SquirrelCensus {}
Expand Down
6 changes: 3 additions & 3 deletions crates/goose-cli/src/commands/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ fn export_session_to_markdown(

for message in &messages {
// Check if this is a User message containing only ToolResponses
let is_only_tool_response = message.role == mcp_core::role::Role::User
let is_only_tool_response = message.role == rmcp::model::Role::User
&& message
.content
.iter()
Expand All @@ -263,8 +263,8 @@ fn export_session_to_markdown(
// Output the role prefix except for tool response-only messages
if !is_only_tool_response {
let role_prefix = match message.role {
mcp_core::role::Role::User => "### User:\n",
mcp_core::role::Role::Assistant => "### Assistant:\n",
rmcp::model::Role::User => "### User:\n",
rmcp::model::Role::Assistant => "### Assistant:\n",
};
markdown_output.push_str(role_prefix);
}
Expand Down
2 changes: 1 addition & 1 deletion crates/goose-cli/src/session/export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use goose::message::{Message, MessageContent, ToolRequest, ToolResponse};
use goose::utils::safe_truncate;
use mcp_core::content::Content as McpContent;
use mcp_core::resource::ResourceContents;
use mcp_core::role::Role;
use rmcp::model::Role;
use serde_json::Value;

const MAX_STRING_LENGTH_MD_EXPORT: usize = 4096; // Generous limit for export
Expand Down
10 changes: 5 additions & 5 deletions crates/goose-cli/src/session/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1187,7 +1187,7 @@ impl Session {
let tool_requests = self
.messages
.last()
.filter(|msg| msg.role == mcp_core::role::Role::Assistant)
.filter(|msg| msg.role == rmcp::model::Role::Assistant)
.map_or(Vec::new(), |msg| {
msg.content
.iter()
Expand Down Expand Up @@ -1259,7 +1259,7 @@ impl Session {
} else {
// An interruption occurred outside of a tool request-response.
if let Some(last_msg) = self.messages.last() {
if last_msg.role == mcp_core::role::Role::User {
if last_msg.role == rmcp::model::Role::User {
match last_msg.content.first() {
Some(MessageContent::ToolResponse(_)) => {
// Interruption occurred after a tool had completed but not assistant reply
Expand Down Expand Up @@ -1464,9 +1464,9 @@ impl Session {
let msg = Message::from(prompt_message);
// ensure we get a User - Assistant - User type pattern
let expected_role = if i % 2 == 0 {
mcp_core::Role::User
rmcp::model::Role::User
} else {
mcp_core::Role::Assistant
rmcp::model::Role::Assistant
};

if msg.role != expected_role {
Expand All @@ -1480,7 +1480,7 @@ impl Session {
break;
}

if msg.role == mcp_core::Role::User {
if msg.role == rmcp::model::Role::User {
output::render_message(&msg, self.debug);
}
self.push_message(msg);
Expand Down
2 changes: 1 addition & 1 deletion crates/goose-cli/src/session/output.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ fn render_tool_response(resp: &ToolResponse, theme: Theme, debug: bool) {
Ok(contents) => {
for content in contents {
if let Some(audience) = content.audience() {
if !audience.contains(&mcp_core::role::Role::User) {
if !audience.contains(&rmcp::model::Role::User) {
continue;
}
}
Expand Down
2 changes: 1 addition & 1 deletion crates/goose-mcp/src/developer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ use mcp_core::{
use mcp_server::router::CapabilitiesBuilder;
use mcp_server::Router;

use mcp_core::role::Role;
use rmcp::model::Role;

use self::editor_models::{create_editor_model, EditorModel};
use self::shell::{expand_path, get_shell_config, is_absolute_path, normalize_line_endings};
Expand Down
31 changes: 29 additions & 2 deletions crates/goose-server/src/openapi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,36 @@ use goose::session::SessionMetadata;
use mcp_core::content::{Annotations, Content, EmbeddedResource, ImageContent, TextContent};
use mcp_core::handler::ToolResultSchema;
use mcp_core::resource::ResourceContents;
use mcp_core::role::Role;
use mcp_core::tool::{Tool, ToolAnnotations};
use utoipa::OpenApi;
use utoipa::{OpenApi, ToSchema};

/// A wrapper around rmcp::model::Role that implements ToSchema for utoipa
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub enum Role {
/// A human user or client making a request
User,
/// An AI assistant or server providing a response
Assistant,
}

impl From<rmcp::model::Role> for Role {
fn from(role: rmcp::model::Role) -> Self {
match role {
rmcp::model::Role::User => Role::User,
rmcp::model::Role::Assistant => Role::Assistant,
}
}
}

impl From<Role> for rmcp::model::Role {
fn from(role: Role) -> Self {
match role {
Role::User => rmcp::model::Role::User,
Role::Assistant => rmcp::model::Role::Assistant,
}
}
}

#[allow(dead_code)] // Used by utoipa for OpenAPI generation
#[derive(OpenApi)]
Expand Down
5 changes: 3 additions & 2 deletions crates/goose/src/context_mgmt/summarize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::message::{Message, MessageContent};
use crate::providers::base::Provider;
use crate::token_counter::{AsyncTokenCounter, TokenCounter};
use anyhow::Result;
use mcp_core::Role;
use rmcp::model::Role;
use std::sync::Arc;

// Constants for the summarization prompt and a follow-up user message.
Expand Down Expand Up @@ -220,8 +220,9 @@ mod tests {
use crate::providers::base::{Provider, ProviderMetadata, ProviderUsage, Usage};
use crate::providers::errors::ProviderError;
use chrono::Utc;
use mcp_core::{tool::Tool, Role};
use mcp_core::tool::Tool;
use mcp_core::{Content, TextContent, ToolCall};
use rmcp::model::Role;
use serde_json::json;
use std::sync::Arc;

Expand Down
3 changes: 2 additions & 1 deletion crates/goose/src/context_mgmt/truncate.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use crate::message::{Message, MessageContent};
use crate::utils::safe_truncate;
use anyhow::{anyhow, Result};
use mcp_core::{Content, ResourceContents, Role};
use mcp_core::{Content, ResourceContents};
use rmcp::model::Role;
use std::collections::HashSet;
use tracing::{debug, warn};

Expand Down
2 changes: 1 addition & 1 deletion crates/goose/src/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ use mcp_core::content::{Content, ImageContent, TextContent};
use mcp_core::handler::ToolResult;
use mcp_core::prompt::{PromptMessage, PromptMessageContent, PromptMessageRole};
use mcp_core::resource::ResourceContents;
use mcp_core::role::Role;
use mcp_core::tool::ToolCall;
use rmcp::model::Role;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use utoipa::ToSchema;
Expand Down
5 changes: 3 additions & 2 deletions crates/goose/src/permission/permission_judge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ fn create_check_messages(tool_requests: Vec<&ToolRequest>) -> Vec<Message> {
.collect();
let mut check_messages = vec![];
check_messages.push(Message::new(
mcp_core::Role::User,
rmcp::model::Role::User,
Utc::now().timestamp(),
vec![MessageContent::Text(TextContent {
text: format!(
Expand Down Expand Up @@ -270,7 +270,8 @@ mod tests {
use crate::providers::errors::ProviderError;
use chrono::Utc;
use mcp_core::ToolCall;
use mcp_core::{tool::Tool, Role, ToolResult};
use mcp_core::{tool::Tool, ToolResult};
use rmcp::model::Role;
use serde_json::json;
use tempfile::NamedTempFile;

Expand Down
6 changes: 3 additions & 3 deletions crates/goose/src/providers/claude_code.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use crate::message::{Message, MessageContent};
use crate::model::ModelConfig;
use mcp_core::content::TextContent;
use mcp_core::tool::Tool;
use mcp_core::Role;
use rmcp::model::Role;

pub const CLAUDE_CODE_DEFAULT_MODEL: &str = "default";
pub const CLAUDE_CODE_KNOWN_MODELS: &[&str] = &["default"];
Expand Down Expand Up @@ -330,7 +330,7 @@ impl ClaudeCodeProvider {
// Extract the first user message text
let description = messages
.iter()
.find(|m| m.role == mcp_core::Role::User)
.find(|m| m.role == rmcp::model::Role::User)
.and_then(|m| {
m.content.iter().find_map(|c| match c {
MessageContent::Text(text_content) => Some(&text_content.text),
Expand All @@ -354,7 +354,7 @@ impl ClaudeCodeProvider {
}

let message = Message::new(
mcp_core::Role::Assistant,
rmcp::model::Role::Assistant,
chrono::Utc::now().timestamp(),
vec![MessageContent::Text(mcp_core::content::TextContent {
text: description.clone(),
Expand Down
3 changes: 2 additions & 1 deletion crates/goose/src/providers/factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ mod tests {
use crate::message::{Message, MessageContent};
use crate::providers::base::{ProviderMetadata, ProviderUsage, Usage};
use chrono::Utc;
use mcp_core::{content::TextContent, Role};
use mcp_core::content::TextContent;
use rmcp::model::Role;
use std::env;

#[allow(dead_code)]
Expand Down
8 changes: 4 additions & 4 deletions crates/goose/src/providers/formats/anthropic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ use crate::providers::base::Usage;
use crate::providers::errors::ProviderError;
use anyhow::{anyhow, Result};
use mcp_core::content::Content;
use mcp_core::role::Role;
use mcp_core::tool::{Tool, ToolCall};
use rmcp::model::Role;
use serde_json::{json, Value};
use std::collections::HashSet;

Expand Down Expand Up @@ -538,7 +538,7 @@ where

// Yield partial text message
let message = Message::new(
mcp_core::role::Role::Assistant,
Role::Assistant,
chrono::Utc::now().timestamp(),
vec![MessageContent::text(text)],
);
Expand Down Expand Up @@ -573,7 +573,7 @@ where
format!("Could not parse tool arguments: {}", args)
);
let message = Message::new(
mcp_core::role::Role::Assistant,
Role::Assistant,
chrono::Utc::now().timestamp(),
vec![MessageContent::tool_request(tool_id, Err(error))],
);
Expand All @@ -585,7 +585,7 @@ where

let tool_call = ToolCall::new(&name, parsed_args);
let message = Message::new(
mcp_core::role::Role::Assistant,
rmcp::model::Role::Assistant,
chrono::Utc::now().timestamp(),
vec![MessageContent::tool_request(tool_id, Ok(tool_call))],
);
Expand Down
3 changes: 2 additions & 1 deletion crates/goose/src/providers/formats/bedrock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ use aws_sdk_bedrockruntime::types as bedrock;
use aws_smithy_types::{Document, Number};
use base64::Engine;
use chrono::Utc;
use mcp_core::{Content, ResourceContents, Role, Tool, ToolCall, ToolError, ToolResult};
use mcp_core::{Content, ResourceContents, Tool, ToolCall, ToolError, ToolResult};
use rmcp::model::Role;
use serde_json::Value;

use super::super::base::Usage;
Expand Down
3 changes: 2 additions & 1 deletion crates/goose/src/providers/formats/databricks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ use crate::providers::utils::{
};
use anyhow::{anyhow, Error};
use mcp_core::ToolError;
use mcp_core::{Content, Role, Tool, ToolCall};
use mcp_core::{Content, Tool, ToolCall};
use rmcp::model::Role;
use serde::{Deserialize, Serialize};
use serde_json::{json, Value};

Expand Down
2 changes: 1 addition & 1 deletion crates/goose/src/providers/formats/google.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ use crate::providers::errors::ProviderError;
use crate::providers::utils::{is_valid_function_name, sanitize_function_name};
use anyhow::Result;
use mcp_core::content::Content;
use mcp_core::role::Role;
use mcp_core::tool::{Tool, ToolCall};
use rand::{distributions::Alphanumeric, Rng};
use rmcp::model::Role;
use serde_json::{json, Map, Value};

/// Convert internal Message format to Google's API message specification
Expand Down
3 changes: 2 additions & 1 deletion crates/goose/src/providers/formats/openai.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ use anyhow::{anyhow, Error};
use async_stream::try_stream;
use futures::Stream;
use mcp_core::ToolError;
use mcp_core::{Content, Role, Tool, ToolCall};
use mcp_core::{Content, Tool, ToolCall};
use rmcp::model::Role;
use serde::{Deserialize, Serialize};
use serde_json::{json, Value};

Expand Down
Loading
Loading