feat: Standard ToolConfirmationMessage for subagent tool confirmations
Summary
This PR replaces the generic ConsentPrompt with the standard ToolConfirmationMessage component for subagent tool confirmations, providing a consistent and feature-rich confirmation experience.
Changes
Core Package
confirmation-bus/types.ts: Added discriminated union typeSerializableToolConfirmationDetailswith type-specific interfaces for edit, exec, mcp, and info confirmationstools/tools.ts:- Added
_requiresParentUIproperty toToolInvocationinterface andBaseToolInvocationclass - Updated
serializeConfirmationDetails()to return all type-specific fields - Modified
getMessageBusDecision()to only includeconfirmationDetailswhen_requiresParentUIis true
- Added
core/coreToolScheduler.ts: Sets_requiresParentUI = truefor tools in subagent context (whenignoreToolConfirmationRequests: true)
CLI Package
ui/types.ts: UpdatedConfirmationRequestto useSerializableToolConfirmationDetailsui/components/DialogManager.tsx: RendersToolConfirmationMessage(instead ofConsentPrompt) whentoolConfirmationDetailsare presentui/AppContainer.tsx: Only setsconfirmationRequestwhentoolConfirmationDetailsexists (prevents duplicate dialogs)
Key Design Decisions
-
_requiresParentUIflag: Controls whether tools includeconfirmationDetailsin MessageBus requests. Only subagent tools need parent UI; normal inline tools have their ownToolConfirmationMessage. -
Prevents duplicate dialogs: Normal tools no longer trigger both inline UI AND DialogManager confirmation.
Testing
- All 3633 tests pass
- 2 pre-existing UTF-8 encoding test failures (unrelated)
Manual Testing
- Normal shell command (
echo "hello") - shows only inline confirmation - Subagent tool call - shows
ToolConfirmationMessagewith "Yes, allow once" / "Yes, allow always" options
Summary of Changes
Hello @allenhutchison, I'm Gemini Code Assist[^1]! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request significantly enhances the user experience for tool confirmations, especially within subagent contexts. By standardizing the confirmation UI and introducing a robust mechanism for passing rich confirmation details via a MessageBus, it ensures that users receive clear, consistent, and actionable prompts when tools require approval. This change also intelligently manages agent execution timeouts during interactive confirmations, preventing premature termination of agent tasks.
Highlights
- Standardized Subagent Tool Confirmations: Replaced the generic
ConsentPromptwith theToolConfirmationMessagecomponent for subagent tool confirmations, providing a consistent and feature-rich user experience across different tool types. - Parent UI Requirement Flag: Introduced a
_requiresParentUIproperty toToolInvocationandBaseToolInvocationclasses. This flag dictates whether tool confirmation details are included in MessageBus requests, allowing the parent UI to display the standard confirmation dialog for subagent tools. - Serializable Confirmation Details: Added
SerializableToolConfirmationDetailstypes toconfirmation-bus/types.ts. This discriminated union allows tool-specific confirmation data (edit, exec, mcp, info) to be serialized and passed via the MessageBus, enabling rich UI rendering in the parent application. - Dynamic Confirmation UI Rendering: Updated
AppContainer.tsxandDialogManager.tsxin the CLI package to dynamically render either theToolConfirmationMessage(for subagent tools with rich details) or theConsentPrompt(for simple confirmations), preventing duplicate dialogs and ensuring the correct UI is shown. - Agent Timeout Management: Modified
AgentExecutorto pause and resume agent execution timeouts when a tool confirmation request is published and responded to via the MessageBus, preventing agents from timing out while awaiting user input. - New Tool Confirmation Listener Hook: Implemented a new React hook,
useToolConfirmationListener, to listen for tool confirmation requests on the MessageBus and manage the state of pending confirmations, facilitating the integration of the new confirmation flow into the UI. - Confirmation Test Agent: Added a
ConfirmationTestAgentto the core package, specifically designed to test the new tool confirmation mechanisms by running shell commands that require user confirmation.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in pull request comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with :thumbsup: and :thumbsdown: on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
[^1]: Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.
Size Change: +15.7 kB (+0.07%)
Total Size: 21.6 MB
| Filename | Size | Change |
|---|---|---|
./bundle/gemini.js |
21.6 MB | +15.7 kB (+0.07%) |
ℹ️ View Unchanged
| Filename | Size |
|---|---|
./bundle/sandbox-macos-permissive-closed.sb |
1.03 kB |
./bundle/sandbox-macos-permissive-open.sb |
890 B |
./bundle/sandbox-macos-permissive-proxied.sb |
1.31 kB |
./bundle/sandbox-macos-restrictive-closed.sb |
3.29 kB |
./bundle/sandbox-macos-restrictive-open.sb |
3.36 kB |
./bundle/sandbox-macos-restrictive-proxied.sb |
3.56 kB |