@@ -630,19 +630,25 @@ impl ToolManager {
630630 let server_name_clone = server_name. clone ( ) ;
631631 tokio:: spawn ( async move {
632632 match handle. await {
633- Ok ( Ok ( client) ) => match client. cancel ( ) . await {
634- Ok ( _) => info ! ( "Server {server_name_clone} evicted due to agent swap" ) ,
635- Err ( e) => error ! ( "Server {server_name_clone} has failed to cancel: {e}" ) ,
633+ Ok ( Ok ( client) ) => {
634+ let client = client. inner_service ;
635+ match client. cancel ( ) . await {
636+ Ok ( _) => info ! ( "Server {server_name_clone} evicted due to agent swap" ) ,
637+ Err ( e) => error ! ( "Server {server_name_clone} has failed to cancel: {e}" ) ,
638+ }
636639 } ,
637640 Ok ( Err ( _) ) | Err ( _) => {
638641 error ! ( "Server {server_name_clone} has failed to cancel" ) ;
639642 } ,
640643 }
641644 } ) ;
642645 } ,
643- InitializedMcpClient :: Ready ( running_service) => match running_service. cancel ( ) . await {
644- Ok ( _) => info ! ( "Server {server_name} evicted due to agent swap" ) ,
645- Err ( e) => error ! ( "Server {server_name} has failed to cancel: {e}" ) ,
646+ InitializedMcpClient :: Ready ( running_service) => {
647+ let client = running_service. inner_service ;
648+ match client. cancel ( ) . await {
649+ Ok ( _) => info ! ( "Server {server_name} evicted due to agent swap" ) ,
650+ Err ( e) => error ! ( "Server {server_name} has failed to cancel: {e}" ) ,
651+ }
646652 } ,
647653 }
648654 }
@@ -1595,6 +1601,37 @@ fn spawn_orchestrator_task(
15951601 } ,
15961602 UpdateEventMessage :: ListResourcesResult { .. } => { } ,
15971603 UpdateEventMessage :: ResourceTemplatesListResult { .. } => { } ,
1604+ UpdateEventMessage :: OauthLink { server_name, link } => {
1605+ let mut buf_writer = BufWriter :: new ( & mut * record_temp_buf) ;
1606+ let msg = eyre:: eyre!( link) ;
1607+ let _ = queue_oauth_message ( server_name. as_str ( ) , & msg, & mut buf_writer) ;
1608+ let _ = buf_writer. flush ( ) ;
1609+ drop ( buf_writer) ;
1610+ let record_str = String :: from_utf8_lossy ( record_temp_buf) . to_string ( ) ;
1611+ let record = LoadingRecord :: Warn ( record_str. clone ( ) ) ;
1612+ load_record
1613+ . lock ( )
1614+ . await
1615+ . entry ( server_name. clone ( ) )
1616+ . and_modify ( |load_record| {
1617+ load_record. push ( record. clone ( ) ) ;
1618+ } )
1619+ . or_insert ( vec ! [ record] ) ;
1620+ if let Some ( sender) = & loading_status_sender {
1621+ let msg = LoadingMsg :: Warn {
1622+ name : server_name. clone ( ) ,
1623+ msg : eyre:: eyre!( "{}" , record_str) ,
1624+ time : "0.0" . to_string ( ) ,
1625+ } ;
1626+ if let Err ( e) = sender. send ( msg) . await {
1627+ warn ! (
1628+ "Error sending update message to display task: {:?}\n Assume display task has completed" ,
1629+ e
1630+ ) ;
1631+ loading_status_sender. take ( ) ;
1632+ }
1633+ }
1634+ } ,
15981635 UpdateEventMessage :: InitStart { server_name, .. } => {
15991636 pending. write ( ) . await . insert ( server_name. clone ( ) ) ;
16001637 loading_servers. insert ( server_name, std:: time:: Instant :: now ( ) ) ;
@@ -1876,6 +1913,21 @@ fn queue_failure_message(
18761913 ) ?)
18771914}
18781915
1916+ fn queue_oauth_message ( name : & str , msg : & eyre:: Report , output : & mut impl Write ) -> eyre:: Result < ( ) > {
1917+ Ok ( queue ! (
1918+ output,
1919+ style:: SetForegroundColor ( style:: Color :: Yellow ) ,
1920+ style:: Print ( "⚠ " ) ,
1921+ style:: SetForegroundColor ( style:: Color :: Blue ) ,
1922+ style:: Print ( name) ,
1923+ style:: ResetColor ,
1924+ style:: Print ( " requires OAuth authentication. Please visit:\n " ) ,
1925+ style:: SetForegroundColor ( style:: Color :: Cyan ) ,
1926+ style:: Print ( msg) ,
1927+ style:: ResetColor ,
1928+ ) ?)
1929+ }
1930+
18791931fn queue_warn_message ( name : & str , msg : & eyre:: Report , time : & str , output : & mut impl Write ) -> eyre:: Result < ( ) > {
18801932 Ok ( queue ! (
18811933 output,
0 commit comments