rmcp upgrade (#4792)

This commit is contained in:
Jack Amadeo
2025-09-30 21:03:50 -04:00
committed by GitHub
parent dee7f79f32
commit a77d13aa88
15 changed files with 139 additions and 94 deletions
+17 -21
View File
@@ -562,6 +562,8 @@ impl ExtensionManager {
input_schema: tool.input_schema,
annotations: tool.annotations,
output_schema: tool.output_schema,
icons: None,
title: None,
});
}
}
@@ -1134,27 +1136,21 @@ mod tests {
use std::sync::Arc;
Ok(ListToolsResult {
tools: vec![
Tool {
name: "tool".into(),
description: Some("A basic tool".into()),
input_schema: Arc::new(json!({}).as_object().unwrap().clone()),
annotations: None,
output_schema: None,
},
Tool {
name: "available_tool".into(),
description: Some("An available tool".into()),
input_schema: Arc::new(json!({}).as_object().unwrap().clone()),
annotations: None,
output_schema: None,
},
Tool {
name: "hidden_tool".into(),
description: Some("A hidden tool".into()),
input_schema: Arc::new(json!({}).as_object().unwrap().clone()),
annotations: None,
output_schema: None,
},
Tool::new(
"tool".to_string(),
"A basic tool".to_string(),
Arc::new(json!({}).as_object().unwrap().clone()),
),
Tool::new(
"available_tool".to_string(),
"An available tool".to_string(),
Arc::new(json!({}).as_object().unwrap().clone()),
),
Tool::new(
"hidden_tool".to_string(),
"hidden tool".to_string(),
Arc::new(json!({}).as_object().unwrap().clone()),
),
],
next_cursor: None,
})
+3
View File
@@ -134,6 +134,9 @@ impl ClientHandler for GooseClient {
client_info: Implementation {
name: "goose".to_string(),
version: env!("CARGO_PKG_VERSION").to_owned(),
icons: None,
title: None,
website_url: None,
},
}
}
+9 -7
View File
@@ -19,14 +19,13 @@ const CALLBACK_TEMPLATE: &str = include_str!("oauth_callback.html");
#[derive(Clone)]
struct AppState {
code_receiver: Arc<Mutex<Option<oneshot::Sender<String>>>>,
code_receiver: Arc<Mutex<Option<oneshot::Sender<CallbackParams>>>>,
}
#[derive(Debug, Deserialize)]
struct CallbackParams {
code: String,
#[allow(dead_code)]
state: Option<String>,
state: String,
}
pub async fn oauth_flow(
@@ -45,7 +44,7 @@ pub async fn oauth_flow(
}
}
let (code_sender, code_receiver) = oneshot::channel::<String>();
let (code_sender, code_receiver) = oneshot::channel::<CallbackParams>();
let app_state = AppState {
code_receiver: Arc::new(Mutex::new(Some(code_sender))),
};
@@ -55,7 +54,7 @@ pub async fn oauth_flow(
let rendered = rendered.clone();
async move {
if let Some(sender) = state.code_receiver.lock().await.take() {
let _ = sender.send(params.code);
let _ = sender.send(params);
}
Html(rendered)
}
@@ -86,8 +85,11 @@ pub async fn oauth_flow(
eprintln!(" {}", authorization_url);
}
let auth_code = code_receiver.await?;
oauth_state.handle_callback(&auth_code).await?;
let CallbackParams {
code: auth_code,
state: csrf_token,
} = code_receiver.await?;
oauth_state.handle_callback(&auth_code, &csrf_token).await?;
if let Err(e) = save_credentials(name, &oauth_state).await {
warn!("Failed to save credentials: {}", e);