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.
This commit is contained in:
jacob314
2026-02-25 08:58:31 -08:00
parent aeecf5a9e7
commit 2f4242fb60
@@ -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(