diff --git a/ui-opentui/src/logic/promptHistory.ts b/ui-opentui/src/logic/promptHistory.ts index 281d6ef11da..e314c7b8513 100644 --- a/ui-opentui/src/logic/promptHistory.ts +++ b/ui-opentui/src/logic/promptHistory.ts @@ -40,7 +40,9 @@ export interface DoublePress { export function createDoublePress(windowMs: number = DOUBLE_PRESS_WINDOW_MS): DoublePress { let armedAt: number | undefined return { - press(now: number = Date.now()): boolean { + // performance.now() is monotonic (Node) — an NTP/wall-clock jump between + // two presses can't break or spuriously satisfy the window (review finding). + press(now: number = performance.now()): boolean { if (armedAt !== undefined && now - armedAt <= windowMs) { armedAt = undefined return true diff --git a/ui-opentui/src/view/overlays/promptHistory.tsx b/ui-opentui/src/view/overlays/promptHistory.tsx index d557e13709a..35adcfd5255 100644 --- a/ui-opentui/src/view/overlays/promptHistory.tsx +++ b/ui-opentui/src/view/overlays/promptHistory.tsx @@ -62,7 +62,9 @@ export function PromptHistory(props: { useKeyboard(key => { if (key.eventType === 'release') return if (key.name === 'escape' || (key.ctrl && key.name === 'c')) { - // Esc backs out one level: confirm → list, list → closed. + // Esc backs out one level: confirm → list, list → closed. Consumed — + // a closing Esc must never reach later global handlers (review finding). + key.preventDefault() if (confirming() !== undefined) setConfirming(undefined) else props.onClose() return