|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import { useState, useEffect } from 'react'; |
|
|
import { useInput } from 'ink'; |
|
|
import { ApprovalMode, type Config } from '@google/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); |
|
|
|
|
|
setShowAutoAcceptIndicator(nextApprovalMode); |
|
|
} |
|
|
}); |
|
|
|
|
|
return showAutoAcceptIndicator; |
|
|
} |
|
|
|