rmcp upgrade (#4792)
This commit is contained in:
@@ -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,
|
||||
})
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user