summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src')
-rw-r--r--packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx9
-rw-r--r--packages/cli/src/ui/hooks/useToolScheduler.ts39
2 files changed, 20 insertions, 28 deletions
diff --git a/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx b/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx
index 19b1841a..0606856f 100644
--- a/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx
+++ b/packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsx
@@ -10,7 +10,6 @@ import { DiffRenderer } from './DiffRenderer.js';
import { Colors } from '../../colors.js';
import {
ToolCallConfirmationDetails,
- ToolEditConfirmationDetails,
ToolConfirmationOutcome,
ToolExecuteConfirmationDetails,
} from '@gemini-code/server';
@@ -23,12 +22,6 @@ export interface ToolConfirmationMessageProps {
confirmationDetails: ToolCallConfirmationDetails;
}
-function isEditDetails(
- props: ToolCallConfirmationDetails,
-): props is ToolEditConfirmationDetails {
- return (props as ToolEditConfirmationDetails).fileName !== undefined;
-}
-
export const ToolConfirmationMessage: React.FC<
ToolConfirmationMessageProps
> = ({ confirmationDetails }) => {
@@ -49,7 +42,7 @@ export const ToolConfirmationMessage: React.FC<
RadioSelectItem<ToolConfirmationOutcome>
>();
- if (isEditDetails(confirmationDetails)) {
+ if (confirmationDetails.type === 'edit') {
// Body content is now the DiffRenderer, passing filename to it
// The bordered box is removed from here and handled within DiffRenderer
bodyContent = (
diff --git a/packages/cli/src/ui/hooks/useToolScheduler.ts b/packages/cli/src/ui/hooks/useToolScheduler.ts
index 2cb27141..fde632df 100644
--- a/packages/cli/src/ui/hooks/useToolScheduler.ts
+++ b/packages/cli/src/ui/hooks/useToolScheduler.ts
@@ -10,6 +10,7 @@ import {
ToolCallResponseInfo,
ToolConfirmationOutcome,
Tool,
+ ToolCallConfirmationDetails,
} from '@gemini-code/server';
import { Part } from '@google/genai';
import { useCallback, useEffect, useState } from 'react';
@@ -55,7 +56,7 @@ type WaitingToolCall = {
status: 'awaiting_approval';
request: ToolCallRequestInfo;
tool: Tool;
- confirm: (outcome: ToolConfirmationOutcome) => Promise<void>;
+ confirmationDetails: ToolCallConfirmationDetails;
};
export type Status = ToolCall['status'];
@@ -119,17 +120,20 @@ export function useToolScheduler(
status: 'awaiting_approval',
request: r,
tool,
- confirm: async (outcome) => {
- await userApproval.onConfirm(outcome);
- setToolCalls(
- outcome === ToolConfirmationOutcome.Cancel
- ? setStatus(
- r.callId,
- 'cancelled',
- 'User did not allow tool call',
- )
- : setStatus(r.callId, 'scheduled'),
- );
+ confirmationDetails: {
+ ...userApproval,
+ onConfirm: async (outcome) => {
+ await userApproval.onConfirm(outcome);
+ setToolCalls(
+ outcome === ToolConfirmationOutcome.Cancel
+ ? setStatus(
+ r.callId,
+ 'cancelled',
+ 'User did not allow tool call',
+ )
+ : setStatus(r.callId, 'scheduled'),
+ );
+ },
},
};
}
@@ -249,7 +253,7 @@ function setStatus(
function setStatus(
targetCallId: string,
status: 'awaiting_approval',
- confirm: (t: ToolConfirmationOutcome) => Promise<void>,
+ confirm: ToolCallConfirmationDetails,
): (t: ToolCall[]) => ToolCall[];
function setStatus(
targetCallId: string,
@@ -296,9 +300,7 @@ function setStatus(
const next: WaitingToolCall = {
...t,
status: 'awaiting_approval',
- confirm: auxiliaryData as (
- o: ToolConfirmationOutcome,
- ) => Promise<void>,
+ confirmationDetails: auxiliaryData as ToolCallConfirmationDetails,
};
return next;
}
@@ -426,10 +428,7 @@ export function mapToDisplay(
description: t.tool.getDescription(t.request.args),
resultDisplay: undefined,
status: mapStatus(t.status),
- confirmationDetails: {
- title: t.request.name,
- onConfirm: t.confirm,
- },
+ confirmationDetails: t.confirmationDetails,
};
case 'executing':
return {