diff options
| author | Taylor Mullen <[email protected]> | 2025-05-17 21:25:28 -0700 |
|---|---|---|
| committer | N. Taylor Mullen <[email protected]> | 2025-05-17 22:27:22 -0700 |
| commit | aca27709dfec3a56f775459e5b0b9d25bc593e28 (patch) | |
| tree | 9fe986a0b1abeaf24a7e34c23a486158256ff3c2 /packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts | |
| parent | 13a6a9a690900a50287d344592bf02bdfb2586f1 (diff) | |
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
Diffstat (limited to 'packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts')
| -rw-r--r-- | packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts | 39 |
1 files changed, 39 insertions, 0 deletions
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; +} |
