Skip to content

Commit c667931

Browse files
committed
Fixed sampling request flow (now automatically navigates to sampling tab, then back to tool, as elicitation).
1 parent 61129a0 commit c667931

2 files changed

Lines changed: 42 additions & 25 deletions

File tree

web/src/App.tsx

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

web/src/components/SamplingTab.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import SamplingRequest from "./SamplingRequest";
99
export type PendingRequest = {
1010
id: number;
1111
request: CreateMessageRequest;
12+
/** Tab to return to after approve/reject (e.g. "tools" or "apps") */
13+
originatingTab?: string;
1214
};
1315

1416
export type Props = {

0 commit comments

Comments
 (0)