(
state: {
focusedInputDialog: ReplFocusedInputDialog | undefined
streamMode: string | undefined
streamingText: string | null
promptQueue: ReplCancelPromptQueueItem[]
proactiveEnabled: boolean
tokenBudgetEnabled: boolean
isRemoteMode: boolean
},
deps: {
logDebug: (message: string) => void
pauseProactive: () => void
forceEndQueryGuard: () => void
markSkipIdleCheckFalse: () => void
setMessages: (updater: (prev: Message[]) => Message[]) => void
resetLoadingState: () => void
clearTokenBudgetSnapshot: () => void
abortToolUseConfirmRequest: () => void
clearToolUseConfirmQueue: () => void
clearPromptQueue: () => void
abortController: AbortController | null
cancelRemoteRequest: () => void
setAbortController: (controller: AbortController | null) => void
getCurrentMessages: () => Message[]
completeTurnAsAborted: (messages: Message[]) => void
},
)
| 7 | } |
| 8 | |
| 9 | export function dispatchReplCancel( |
| 10 | state: { |
| 11 | focusedInputDialog: ReplFocusedInputDialog | undefined |
| 12 | streamMode: string | undefined |
| 13 | streamingText: string | null |
| 14 | promptQueue: ReplCancelPromptQueueItem[] |
| 15 | proactiveEnabled: boolean |
| 16 | tokenBudgetEnabled: boolean |
| 17 | isRemoteMode: boolean |
| 18 | }, |
| 19 | deps: { |
| 20 | logDebug: (message: string) => void |
| 21 | pauseProactive: () => void |
| 22 | forceEndQueryGuard: () => void |
| 23 | markSkipIdleCheckFalse: () => void |
| 24 | setMessages: (updater: (prev: Message[]) => Message[]) => void |
| 25 | resetLoadingState: () => void |
| 26 | clearTokenBudgetSnapshot: () => void |
| 27 | abortToolUseConfirmRequest: () => void |
| 28 | clearToolUseConfirmQueue: () => void |
| 29 | clearPromptQueue: () => void |
| 30 | abortController: AbortController | null |
| 31 | cancelRemoteRequest: () => void |
| 32 | setAbortController: (controller: AbortController | null) => void |
| 33 | getCurrentMessages: () => Message[] |
| 34 | completeTurnAsAborted: (messages: Message[]) => void |
| 35 | }, |
| 36 | ): void { |
| 37 | if (state.focusedInputDialog === 'elicitation') { |
| 38 | return |
| 39 | } |
| 40 | |
| 41 | deps.logDebug( |
| 42 | `[onCancel] focusedInputDialog=${state.focusedInputDialog} streamMode=${state.streamMode}`, |
| 43 | ) |
| 44 | |
| 45 | if (state.proactiveEnabled) { |
| 46 | deps.pauseProactive() |
| 47 | } |
| 48 | deps.forceEndQueryGuard() |
| 49 | deps.markSkipIdleCheckFalse() |
| 50 | |
| 51 | if (state.streamingText?.trim()) { |
| 52 | deps.setMessages(prev => [ |
| 53 | ...prev, |
| 54 | createAssistantMessage({ |
| 55 | content: state.streamingText, |
| 56 | }), |
| 57 | ]) |
| 58 | } |
| 59 | deps.resetLoadingState() |
| 60 | |
| 61 | if (state.tokenBudgetEnabled) { |
| 62 | deps.clearTokenBudgetSnapshot() |
| 63 | } |
| 64 | |
| 65 | if (state.focusedInputDialog === 'tool-permission') { |
| 66 | deps.abortToolUseConfirmRequest() |
no test coverage detected