agent: Generate a notification when reaching tool use limit (#31894)

When reaching the consecutive tool call limit, the agent gets blocked
and without a notification, you wouldn't know that. This PR adds the
ability to be notified when that happens, and you can use either sound
_and_ toast, or just one of them.

Release Notes:

- agent: Added support for getting notified (via toast and/or sound)
when reaching the consecutive tool call limit.
This commit is contained in:
Danilo Leal 2025-06-02 21:57:42 -03:00 committed by GitHub
parent b16911e756
commit 63c1033448
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 13 additions and 0 deletions

View file

@ -1017,6 +1017,15 @@ impl ActiveThread {
self.play_notification_sound(cx); self.play_notification_sound(cx);
self.show_notification("Waiting for tool confirmation", IconName::Info, window, cx); self.show_notification("Waiting for tool confirmation", IconName::Info, window, cx);
} }
ThreadEvent::ToolUseLimitReached => {
self.play_notification_sound(cx);
self.show_notification(
"Consecutive tool use limit reached.",
IconName::Warning,
window,
cx,
);
}
ThreadEvent::StreamedAssistantText(message_id, text) => { ThreadEvent::StreamedAssistantText(message_id, text) => {
if let Some(rendered_message) = self.rendered_messages_by_id.get_mut(&message_id) { if let Some(rendered_message) = self.rendered_messages_by_id.get_mut(&message_id) {
rendered_message.append_text(text, cx); rendered_message.append_text(text, cx);

View file

@ -1372,6 +1372,7 @@ impl AgentDiff {
| ThreadEvent::ToolFinished { .. } | ThreadEvent::ToolFinished { .. }
| ThreadEvent::CheckpointChanged | ThreadEvent::CheckpointChanged
| ThreadEvent::ToolConfirmationNeeded | ThreadEvent::ToolConfirmationNeeded
| ThreadEvent::ToolUseLimitReached
| ThreadEvent::CancelEditing => {} | ThreadEvent::CancelEditing => {}
} }
} }

View file

@ -1673,6 +1673,7 @@ impl Thread {
} }
CompletionRequestStatus::ToolUseLimitReached => { CompletionRequestStatus::ToolUseLimitReached => {
thread.tool_use_limit_reached = true; thread.tool_use_limit_reached = true;
cx.emit(ThreadEvent::ToolUseLimitReached);
} }
} }
} }
@ -2843,6 +2844,7 @@ pub enum ThreadEvent {
}, },
CheckpointChanged, CheckpointChanged,
ToolConfirmationNeeded, ToolConfirmationNeeded,
ToolUseLimitReached,
CancelEditing, CancelEditing,
CompletionCanceled, CompletionCanceled,
} }

View file

@ -246,6 +246,7 @@ impl ExampleContext {
| ThreadEvent::StreamedAssistantThinking(_, _) | ThreadEvent::StreamedAssistantThinking(_, _)
| ThreadEvent::UsePendingTools { .. } | ThreadEvent::UsePendingTools { .. }
| ThreadEvent::CompletionCanceled => {} | ThreadEvent::CompletionCanceled => {}
ThreadEvent::ToolUseLimitReached => {}
ThreadEvent::ToolFinished { ThreadEvent::ToolFinished {
tool_use_id, tool_use_id,
pending_tool_use, pending_tool_use,