summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/hooks/useReactToolScheduler.ts
diff options
context:
space:
mode:
authorBrandon Keiji <[email protected]>2025-06-05 21:33:24 +0000
committerGitHub <[email protected]>2025-06-05 21:33:24 +0000
commit2285bba66eced3eee2b97ece250ec6e590f76efc (patch)
treeb9a28b56a3c87047a1a15158cf443b3f09606834 /packages/cli/src/ui/hooks/useReactToolScheduler.ts
parentd3a1026ae39c3e8afbab86ec0bb27c4b780d8814 (diff)
refactor: remove unnecessary useRefs (#780)
Diffstat (limited to 'packages/cli/src/ui/hooks/useReactToolScheduler.ts')
-rw-r--r--packages/cli/src/ui/hooks/useReactToolScheduler.ts67
1 files changed, 39 insertions, 28 deletions
diff --git a/packages/cli/src/ui/hooks/useReactToolScheduler.ts b/packages/cli/src/ui/hooks/useReactToolScheduler.ts
index 8e027ade..f9d2be5f 100644
--- a/packages/cli/src/ui/hooks/useReactToolScheduler.ts
+++ b/packages/cli/src/ui/hooks/useReactToolScheduler.ts
@@ -22,7 +22,7 @@ import {
Status as CoreStatus,
logToolCall,
} from '@gemini-code/core';
-import { useCallback, useEffect, useState, useRef } from 'react';
+import { useCallback, useState, useMemo } from 'react';
import {
HistoryItemToolGroup,
IndividualToolCallDisplay,
@@ -73,13 +73,9 @@ export function useReactToolScheduler(
const [toolCallsForDisplay, setToolCallsForDisplay] = useState<
TrackedToolCall[]
>([]);
- const schedulerRef = useRef<CoreToolScheduler | null>(null);
- useEffect(() => {
- const outputUpdateHandler: OutputUpdateHandler = (
- toolCallId,
- outputChunk,
- ) => {
+ const outputUpdateHandler: OutputUpdateHandler = useCallback(
+ (toolCallId, outputChunk) => {
setPendingHistoryItem((prevItem) => {
if (prevItem?.type === 'tool_group') {
return {
@@ -104,11 +100,12 @@ export function useReactToolScheduler(
return tc;
}),
);
- };
+ },
+ [setPendingHistoryItem],
+ );
- const allToolCallsCompleteHandler: AllToolCallsCompleteHandler = (
- completedToolCalls,
- ) => {
+ const allToolCallsCompleteHandler: AllToolCallsCompleteHandler = useCallback(
+ (completedToolCalls) => {
completedToolCalls.forEach((call) => {
let success = false;
let errorMessage: string | undefined;
@@ -134,11 +131,12 @@ export function useReactToolScheduler(
});
});
onComplete(completedToolCalls);
- };
+ },
+ [onComplete],
+ );
- const toolCallsUpdateHandler: ToolCallsUpdateHandler = (
- updatedCoreToolCalls: ToolCall[],
- ) => {
+ const toolCallsUpdateHandler: ToolCallsUpdateHandler = useCallback(
+ (updatedCoreToolCalls: ToolCall[]) => {
setToolCallsForDisplay((prevTrackedCalls) =>
updatedCoreToolCalls.map((coreTc) => {
const existingTrackedCall = prevTrackedCalls.find(
@@ -152,27 +150,40 @@ export function useReactToolScheduler(
return newTrackedCall;
}),
);
- };
+ },
+ [],
+ );
- schedulerRef.current = new CoreToolScheduler({
- toolRegistry: config.getToolRegistry(),
+ const scheduler = useMemo(
+ () =>
+ new CoreToolScheduler({
+ toolRegistry: config.getToolRegistry(),
+ outputUpdateHandler,
+ onAllToolCallsComplete: allToolCallsCompleteHandler,
+ onToolCallsUpdate: toolCallsUpdateHandler,
+ approvalMode: config.getApprovalMode(),
+ }),
+ [
+ config,
outputUpdateHandler,
- onAllToolCallsComplete: allToolCallsCompleteHandler,
- onToolCallsUpdate: toolCallsUpdateHandler,
- approvalMode: config.getApprovalMode(),
- });
- }, [config, onComplete, setPendingHistoryItem]);
+ allToolCallsCompleteHandler,
+ toolCallsUpdateHandler,
+ ],
+ );
const schedule: ScheduleFn = useCallback(
async (request: ToolCallRequestInfo | ToolCallRequestInfo[]) => {
- schedulerRef.current?.schedule(request);
+ scheduler.schedule(request);
},
- [],
+ [scheduler],
);
- const cancel: CancelFn = useCallback((reason: string = 'unspecified') => {
- schedulerRef.current?.cancelAll(reason);
- }, []);
+ const cancel: CancelFn = useCallback(
+ (reason: string = 'unspecified') => {
+ scheduler.cancelAll(reason);
+ },
+ [scheduler],
+ );
const markToolsAsSubmitted: MarkToolsAsSubmittedFn = useCallback(
(callIdsToMark: string[]) => {