From aca27709dfec3a56f775459e5b0b9d25bc593e28 Mon Sep 17 00:00:00 2001 From: Taylor Mullen Date: Sat, 17 May 2025 21:25:28 -0700 Subject: feat: Add auto-accept indicator and toggle - This commit introduces a visual indicator in the CLI to show when auto-accept for tool confirmations is enabled. Users can now also toggle this setting on/off using Shift + Tab. - This addresses user feedback for better visibility and control over the auto-accept feature, improving the overall user experience. - This behavior is similar to Claude Code, providing a familiar experience for users transitioning from that environment. - Added tests for the new auto indicator hook. Fixes https://b.corp.google.com/issues/413740468 --- .../cli/src/ui/hooks/useAutoAcceptIndicator.ts | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts (limited to 'packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts') diff --git a/packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts b/packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts new file mode 100644 index 00000000..17cffd40 --- /dev/null +++ b/packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts @@ -0,0 +1,39 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import { useState, useEffect } from 'react'; +import { useInput } from 'ink'; +import type { Config } from '@gemini-code/server'; + +export interface UseAutoAcceptIndicatorArgs { + config: Config; +} + +export function useAutoAcceptIndicator({ + config, +}: UseAutoAcceptIndicatorArgs): boolean { + const currentConfigValue = config.getAlwaysSkipModificationConfirmation(); + const [showAutoAcceptIndicator, setShowAutoAcceptIndicator] = + useState(currentConfigValue); + + useEffect(() => { + setShowAutoAcceptIndicator(currentConfigValue); + }, [currentConfigValue]); + + useInput((_input, key) => { + if (key.tab && key.shift) { + const alwaysAcceptModificationConfirmations = + !config.getAlwaysSkipModificationConfirmation(); + config.setAlwaysSkipModificationConfirmation( + alwaysAcceptModificationConfirmations, + ); + // Update local state immediately for responsiveness + setShowAutoAcceptIndicator(alwaysAcceptModificationConfirmations); + } + }); + + return showAutoAcceptIndicator; +} -- cgit v1.2.3