useCancelRequest.ts
1 import { useInput } from 'ink' 2 import { ToolUseConfirm } from '../components/permissions/PermissionRequest.js' 3 import { logEvent } from '../services/statsig.js' 4 import { BinaryFeedbackContext } from '../screens/REPL.js' 5 import type { SetToolJSXFn } from '../Tool.js' 6 7 export function useCancelRequest( 8 setToolJSX: SetToolJSXFn, 9 setToolUseConfirm: (toolUseConfirm: ToolUseConfirm | null) => void, 10 setBinaryFeedbackContext: (bfContext: BinaryFeedbackContext | null) => void, 11 onCancel: () => void, 12 isLoading: boolean, 13 isMessageSelectorVisible: boolean, 14 abortSignal?: AbortSignal, 15 ) { 16 useInput((_, key) => { 17 if (!key.escape) { 18 return 19 } 20 if (abortSignal?.aborted) { 21 return 22 } 23 if (!abortSignal) { 24 return 25 } 26 if (!isLoading) { 27 return 28 } 29 if (isMessageSelectorVisible) { 30 // Esc closes the message selector 31 return 32 } 33 logEvent('tengu_cancel', {}) 34 setToolJSX(null) 35 setToolUseConfirm(null) 36 setBinaryFeedbackContext(null) 37 onCancel() 38 }) 39 }