@@ -587,11 +587,13 @@ const App = () => {
587587 const handleNewPendingSample = ( event : CustomEvent ) => {
588588 const sample = event . detail ;
589589 const numericId = getNumericId ( sample . id ) ;
590+ const originatingTab = lastToolCallOriginTabRef . current ;
590591 setPendingSampleRequests ( ( prev ) => [
591592 ...prev ,
592593 {
593594 id : numericId ,
594595 request : sample . request ,
596+ originatingTab,
595597 resolve : async ( result : CreateMessageResult ) => {
596598 await sample . respond ( result ) ;
597599 } ,
@@ -600,6 +602,8 @@ const App = () => {
600602 } ,
601603 } ,
602604 ] ) ;
605+ setActiveTab ( "sampling" ) ;
606+ window . location . hash = "sampling" ;
603607 } ;
604608
605609 // Handle elicitation requests
@@ -1074,11 +1078,42 @@ const App = () => {
10741078 return stringIdToNumber . current . get ( stringId ) ! ;
10751079 } ;
10761080
1081+ const validTabsForNavigation = useMemo (
1082+ ( ) => [
1083+ ...( serverCapabilities ?. resources ? [ "resources" ] : [ ] ) ,
1084+ ...( serverCapabilities ?. prompts ? [ "prompts" ] : [ ] ) ,
1085+ ...( serverCapabilities ?. tools ? [ "tools" ] : [ ] ) ,
1086+ ...( serverCapabilities ?. tools ? [ "apps" ] : [ ] ) ,
1087+ "ping" ,
1088+ "sampling" ,
1089+ "elicitations" ,
1090+ "roots" ,
1091+ "auth" ,
1092+ ] ,
1093+ [ serverCapabilities ] ,
1094+ ) ;
1095+
1096+ const navigateToTab = useCallback (
1097+ ( tab : string ) => {
1098+ if ( validTabsForNavigation . includes ( tab ) ) {
1099+ setActiveTab ( tab ) ;
1100+ window . location . hash = tab ;
1101+ setTimeout ( ( ) => {
1102+ setActiveTab ( tab ) ;
1103+ window . location . hash = tab ;
1104+ } , 100 ) ;
1105+ }
1106+ } ,
1107+ [ validTabsForNavigation ] ,
1108+ ) ;
1109+
10771110 const handleApproveSampling = ( id : number , result : CreateMessageResult ) => {
10781111 setPendingSampleRequests ( ( prev ) => {
1079- // Find by numeric ID (stored in state)
10801112 const request = prev . find ( ( r ) => r . id === id ) ;
10811113 request ?. resolve ( result ) ;
1114+ if ( request ?. originatingTab ) {
1115+ navigateToTab ( request . originatingTab ) ;
1116+ }
10821117 return prev . filter ( ( r ) => r . id !== id ) ;
10831118 } ) ;
10841119 } ;
@@ -1087,6 +1122,9 @@ const App = () => {
10871122 setPendingSampleRequests ( ( prev ) => {
10881123 const request = prev . find ( ( r ) => r . id === id ) ;
10891124 request ?. reject ( new Error ( "Sampling request rejected" ) ) ;
1125+ if ( request ?. originatingTab ) {
1126+ navigateToTab ( request . originatingTab ) ;
1127+ }
10901128 return prev . filter ( ( r ) => r . id !== id ) ;
10911129 } ) ;
10921130 } ;
@@ -1099,31 +1137,8 @@ const App = () => {
10991137 const request = prev . find ( ( r ) => r . id === id ) ;
11001138 if ( request ) {
11011139 request . resolve ( response ) ;
1102-
11031140 if ( request . originatingTab ) {
1104- const originatingTab = request . originatingTab ;
1105-
1106- const validTabs = [
1107- ...( serverCapabilities ?. resources ? [ "resources" ] : [ ] ) ,
1108- ...( serverCapabilities ?. prompts ? [ "prompts" ] : [ ] ) ,
1109- ...( serverCapabilities ?. tools ? [ "tools" ] : [ ] ) ,
1110- ...( serverCapabilities ?. tools ? [ "apps" ] : [ ] ) ,
1111- "ping" ,
1112- "sampling" ,
1113- "elicitations" ,
1114- "roots" ,
1115- "auth" ,
1116- ] ;
1117-
1118- if ( validTabs . includes ( originatingTab ) ) {
1119- setActiveTab ( originatingTab ) ;
1120- window . location . hash = originatingTab ;
1121-
1122- setTimeout ( ( ) => {
1123- setActiveTab ( originatingTab ) ;
1124- window . location . hash = originatingTab ;
1125- } , 100 ) ;
1126- }
1141+ navigateToTab ( request . originatingTab ) ;
11271142 }
11281143 }
11291144 return prev . filter ( ( r ) => r . id !== id ) ;
0 commit comments