summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts
diff options
context:
space:
mode:
authorTaylor Mullen <[email protected]>2025-05-17 21:25:28 -0700
committerN. Taylor Mullen <[email protected]>2025-05-17 22:27:22 -0700
commitaca27709dfec3a56f775459e5b0b9d25bc593e28 (patch)
tree9fe986a0b1abeaf24a7e34c23a486158256ff3c2 /packages/cli/src/ui/hooks/useAutoAcceptIndicator.ts
parent13a6a9a690900a50287d344592bf02bdfb2586f1 (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.ts39
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;
+}