[elicitations] Switch to use MCP style elicitation payload for mcp tool approvals. (#13621)

- [x] Switch to use MCP style elicitation payload for mcp tool
approvals.
- [ ] TODO: Update the UI to support the full spec.
This commit is contained in:
Matthew Zeng
2026-03-06 01:50:26 -08:00
committed by GitHub
parent ee1a20258a
commit 98dca99db7
59 changed files with 5165 additions and 100 deletions

View File

@@ -224,6 +224,7 @@ use crate::bottom_pane::ExperimentalFeaturesView;
use crate::bottom_pane::FeedbackAudience;
use crate::bottom_pane::InputResult;
use crate::bottom_pane::LocalImageAttachment;
use crate::bottom_pane::McpServerElicitationFormRequest;
use crate::bottom_pane::MentionBinding;
use crate::bottom_pane::QUIT_SHORTCUT_TIMEOUT;
use crate::bottom_pane::SelectionAction;
@@ -2871,15 +2872,21 @@ impl ChatWidget {
server_name: ev.server_name.clone(),
});
let request = ApprovalRequest::McpElicitation {
thread_id: self.thread_id.unwrap_or_default(),
thread_label: None,
server_name: ev.server_name,
request_id: ev.id,
message: ev.request.message().to_string(),
};
self.bottom_pane
.push_approval_request(request, &self.config.features);
let thread_id = self.thread_id.unwrap_or_default();
if let Some(request) = McpServerElicitationFormRequest::from_event(thread_id, ev.clone()) {
self.bottom_pane
.push_mcp_server_elicitation_request(request);
} else {
let request = ApprovalRequest::McpElicitation {
thread_id,
thread_label: None,
server_name: ev.server_name,
request_id: ev.id,
message: ev.request.message().to_string(),
};
self.bottom_pane
.push_approval_request(request, &self.config.features);
}
self.request_redraw();
}
@@ -2889,6 +2896,15 @@ impl ChatWidget {
self.request_redraw();
}
pub(crate) fn push_mcp_server_elicitation_request(
&mut self,
request: McpServerElicitationFormRequest,
) {
self.bottom_pane
.push_mcp_server_elicitation_request(request);
self.request_redraw();
}
pub(crate) fn handle_request_user_input_now(&mut self, ev: RequestUserInputEvent) {
self.flush_answer_stream_with_separator();
self.notify(Notification::UserInputRequested {