mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-20 16:57:46 +00:00
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { useState, useEffect } from 'react';
|
|
import { useInput } from 'ink';
|
|
import { ApprovalMode, type Config } from '@gemini-cli/core';
|
|
|
|
export interface UseAutoAcceptIndicatorArgs {
|
|
config: Config;
|
|
}
|
|
|
|
export function useAutoAcceptIndicator({
|
|
config,
|
|
}: UseAutoAcceptIndicatorArgs): ApprovalMode {
|
|
const currentConfigValue = config.getApprovalMode();
|
|
const [showAutoAcceptIndicator, setShowAutoAcceptIndicator] =
|
|
useState(currentConfigValue);
|
|
|
|
useEffect(() => {
|
|
setShowAutoAcceptIndicator(currentConfigValue);
|
|
}, [currentConfigValue]);
|
|
|
|
useInput((input, key) => {
|
|
let nextApprovalMode: ApprovalMode | undefined;
|
|
|
|
if (key.ctrl && input === 'y') {
|
|
nextApprovalMode =
|
|
config.getApprovalMode() === ApprovalMode.YOLO
|
|
? ApprovalMode.DEFAULT
|
|
: ApprovalMode.YOLO;
|
|
} else if (key.tab && key.shift) {
|
|
nextApprovalMode =
|
|
config.getApprovalMode() === ApprovalMode.AUTO_EDIT
|
|
? ApprovalMode.DEFAULT
|
|
: ApprovalMode.AUTO_EDIT;
|
|
}
|
|
|
|
if (nextApprovalMode) {
|
|
config.setApprovalMode(nextApprovalMode);
|
|
// Update local state immediately for responsiveness
|
|
setShowAutoAcceptIndicator(nextApprovalMode);
|
|
}
|
|
});
|
|
|
|
return showAutoAcceptIndicator;
|
|
}
|