refactor: use CoreToolCallStatus in the the history data model (#19033)

This commit is contained in:
Jerop Kipruto
2026-02-13 17:20:14 -05:00
committed by GitHub
parent e7e4c68c5c
commit f87468c644
40 changed files with 322 additions and 268 deletions
+20 -15
View File
@@ -33,6 +33,7 @@ import {
ValidationRequiredError,
coreEvents,
CoreEvent,
CoreToolCallStatus,
} from '@google/gemini-cli-core';
import type {
Config,
@@ -58,7 +59,7 @@ import type {
SlashCommandProcessorResult,
HistoryItemModel,
} from '../types.js';
import { StreamingState, MessageType, ToolCallStatus } from '../types.js';
import { StreamingState, MessageType } from '../types.js';
import { isAtCommand, isSlashCommand } from '../utils/commandUtils.js';
import { useShellCommandProcessor } from './shellCommandProcessor.js';
import { handleAtCommand } from './atCommandProcessor.js';
@@ -126,16 +127,18 @@ function calculateStreamingState(
isResponding: boolean,
toolCalls: TrackedToolCall[],
): StreamingState {
if (toolCalls.some((tc) => tc.status === 'awaiting_approval')) {
if (
toolCalls.some((tc) => tc.status === CoreToolCallStatus.AwaitingApproval)
) {
return StreamingState.WaitingForConfirmation;
}
const isAnyToolActive = toolCalls.some((tc) => {
// These statuses indicate active processing
if (
tc.status === 'executing' ||
tc.status === 'scheduled' ||
tc.status === 'validating'
tc.status === CoreToolCallStatus.Executing ||
tc.status === CoreToolCallStatus.Scheduled ||
tc.status === CoreToolCallStatus.Validating
) {
return true;
}
@@ -143,9 +146,9 @@ function calculateStreamingState(
// Terminal statuses (success, error, cancelled) still count as "Responding"
// if the result hasn't been submitted back to Gemini yet.
if (
tc.status === 'success' ||
tc.status === 'error' ||
tc.status === 'cancelled'
tc.status === CoreToolCallStatus.Success ||
tc.status === CoreToolCallStatus.Error ||
tc.status === CoreToolCallStatus.Cancelled
) {
return !(tc as TrackedCompletedToolCall | TrackedCancelledToolCall)
.responseSubmittedToGemini;
@@ -562,7 +565,7 @@ export const useGeminiStream = (
if (tool.name === SHELL_COMMAND_NAME) {
return {
...tool,
status: ToolCallStatus.Canceled,
status: CoreToolCallStatus.Cancelled,
resultDisplay: tool.resultDisplay,
};
}
@@ -830,12 +833,14 @@ export const useGeminiStream = (
if (pendingHistoryItemRef.current.type === 'tool_group') {
const updatedTools = pendingHistoryItemRef.current.tools.map(
(tool) =>
tool.status === ToolCallStatus.Pending ||
tool.status === ToolCallStatus.Confirming ||
tool.status === ToolCallStatus.Executing
? { ...tool, status: ToolCallStatus.Canceled }
tool.status === CoreToolCallStatus.Validating ||
tool.status === CoreToolCallStatus.Scheduled ||
tool.status === CoreToolCallStatus.AwaitingApproval ||
tool.status === CoreToolCallStatus.Executing
? { ...tool, status: CoreToolCallStatus.Cancelled }
: tool,
);
const pendingItem: HistoryItemToolGroup = {
...pendingHistoryItemRef.current,
tools: updatedTools,
@@ -1530,7 +1535,7 @@ export const useGeminiStream = (
// If all the tools were cancelled, don't submit a response to Gemini.
const allToolsCancelled = geminiTools.every(
(tc) => tc.status === 'cancelled',
(tc) => tc.status === CoreToolCallStatus.Cancelled,
);
if (allToolsCancelled) {
@@ -1618,7 +1623,7 @@ export const useGeminiStream = (
const restorableToolCalls = toolCalls.filter(
(toolCall) =>
EDIT_TOOL_NAMES.has(toolCall.request.name) &&
toolCall.status === 'awaiting_approval',
toolCall.status === CoreToolCallStatus.AwaitingApproval,
);
if (restorableToolCalls.length > 0) {