From 2f4242fb60ab2ed21edfc4db978926433c4a97f5 Mon Sep 17 00:00:00 2001 From: jacob314 Date: Wed, 25 Feb 2026 08:58:31 -0800 Subject: [PATCH] fix(cli): prevent autocomplete UI flicker by decoupling disabled state reset from completion refresh When typing outside of shell mode (e.g., using `@` completion), the `useShellCompletion` hook was continuously re-rendering and executing its `useEffect` because `performCompletion` was recreated on every keystroke (since its `query` dependency changed). Because `enabled` was false, the effect unconditionally called `setSuggestions([])`, rapidly overriding the suggestions populated by `useAtCompletion` and causing severe UI flickering. This splits the effect to ensure `setSuggestions([])` is only called once when `enabled` becomes false, stabilizing the suggestions list. --- packages/cli/src/ui/hooks/useShellCompletion.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/ui/hooks/useShellCompletion.ts b/packages/cli/src/ui/hooks/useShellCompletion.ts index 23f04aee4a..41ae17105b 100644 --- a/packages/cli/src/ui/hooks/useShellCompletion.ts +++ b/packages/cli/src/ui/hooks/useShellCompletion.ts @@ -497,13 +497,16 @@ export function useShellCompletion({ setIsLoadingSuggestions, ]); - // Debounced effect to trigger completion useEffect(() => { if (!enabled) { setSuggestions([]); setIsLoadingSuggestions(false); - return; } + }, [enabled, setSuggestions, setIsLoadingSuggestions]); + + // Debounced effect to trigger completion + useEffect(() => { + if (!enabled) return; if (debounceRef.current) { clearTimeout(debounceRef.current); @@ -519,7 +522,7 @@ export function useShellCompletion({ clearTimeout(debounceRef.current); } }; - }, [enabled, performCompletion, setSuggestions, setIsLoadingSuggestions]); + }, [enabled, performCompletion]); // Cleanup on unmount useEffect(