/ src / hooks / useCancelRequest.ts
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  }