gemini-cli icon indicating copy to clipboard operation
gemini-cli copied to clipboard

feat: Standard ToolConfirmationMessage for subagent tool confirmations

Open allenhutchison opened this issue 1 week ago • 2 comments

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 type SerializableToolConfirmationDetails with type-specific interfaces for edit, exec, mcp, and info confirmations
  • tools/tools.ts:
    • Added _requiresParentUI property to ToolInvocation interface and BaseToolInvocation class
    • Updated serializeConfirmationDetails() to return all type-specific fields
    • Modified getMessageBusDecision() to only include confirmationDetails when _requiresParentUI is true
  • core/coreToolScheduler.ts: Sets _requiresParentUI = true for tools in subagent context (when ignoreToolConfirmationRequests: true)

CLI Package

  • ui/types.ts: Updated ConfirmationRequest to use SerializableToolConfirmationDetails
  • ui/components/DialogManager.tsx: Renders ToolConfirmationMessage (instead of ConsentPrompt) when toolConfirmationDetails are present
  • ui/AppContainer.tsx: Only sets confirmationRequest when toolConfirmationDetails exists (prevents duplicate dialogs)

Key Design Decisions

  1. _requiresParentUI flag: Controls whether tools include confirmationDetails in MessageBus requests. Only subagent tools need parent UI; normal inline tools have their own ToolConfirmationMessage.

  2. 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

  1. Normal shell command (echo "hello") - shows only inline confirmation
  2. Subagent tool call - shows ToolConfirmationMessage with "Yes, allow once" / "Yes, allow always" options

allenhutchison avatar Dec 11 '25 19:12 allenhutchison

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 ConsentPrompt with the ToolConfirmationMessage component for subagent tool confirmations, providing a consistent and feature-rich user experience across different tool types.
  • Parent UI Requirement Flag: Introduced a _requiresParentUI property to ToolInvocation and BaseToolInvocation classes. 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 SerializableToolConfirmationDetails types to confirmation-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.tsx and DialogManager.tsx in the CLI package to dynamically render either the ToolConfirmationMessage (for subagent tools with rich details) or the ConsentPrompt (for simple confirmations), preventing duplicate dialogs and ensuring the correct UI is shown.
  • Agent Timeout Management: Modified AgentExecutor to 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 ConfirmationTestAgent to 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.

gemini-code-assist[bot] avatar Dec 11 '25 19:12 gemini-code-assist[bot]

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

compressed-size-action

github-actions[bot] avatar Dec 11 '25 19:12 github-actions[bot]