From eab01e0272e544122ef79d213d772349189463df Mon Sep 17 00:00:00 2001 From: Emir Karabeg <78010029+emir-karabeg@users.noreply.github.com> Date: Tue, 17 Feb 2026 18:47:07 -0800 Subject: [PATCH] fix(copilot): copilot shortcut conflict (#3219) * fix: prevent copilot keyboard shortcuts from triggering when panel is inactive The OptionsSelector component was capturing keyboard events (1-9 number keys and Enter) globally on the document, causing accidental option selections when users were interacting with other parts of the application. This fix adds a check to only handle keyboard shortcuts when the copilot panel is the active tab, preventing the shortcuts from interfering with other workflows. Co-authored-by: Emir Karabeg * lint --------- Co-authored-by: Cursor Agent Co-authored-by: Emir Karabeg Co-authored-by: Waleed Latif --- .../copilot/components/tool-call/tool-call.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/tool-call/tool-call.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/tool-call/tool-call.tsx index c7f1032094..53af845ef4 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/tool-call/tool-call.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/tool-call/tool-call.tsx @@ -23,7 +23,7 @@ import { ParallelTool } from '@/app/workspace/[workspaceId]/w/[workflowId]/compo import { getDisplayValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block' import { getBlock } from '@/blocks/registry' import type { CopilotToolCall } from '@/stores/panel' -import { useCopilotStore } from '@/stores/panel' +import { useCopilotStore, usePanelStore } from '@/stores/panel' import type { SubAgentContentBlock } from '@/stores/panel/copilot/types' import { useWorkflowStore } from '@/stores/workflows/workflow/store' @@ -341,16 +341,20 @@ export function OptionsSelector({ const [hoveredIndex, setHoveredIndex] = useState(-1) const [chosenKey, setChosenKey] = useState(selectedOptionKey) const containerRef = useRef(null) + const activeTab = usePanelStore((s) => s.activeTab) const isLocked = chosenKey !== null - // Handle keyboard navigation - only for the active options selector + // Handle keyboard navigation - only for the active options selector when copilot is active useEffect(() => { if (isInteractionDisabled || !enableKeyboardNav || isLocked) return const handleKeyDown = (e: KeyboardEvent) => { if (e.defaultPrevented) return + // Only handle keyboard shortcuts when the copilot panel is active + if (activeTab !== 'copilot') return + const activeElement = document.activeElement const isInputFocused = activeElement?.tagName === 'INPUT' || @@ -387,7 +391,15 @@ export function OptionsSelector({ document.addEventListener('keydown', handleKeyDown) return () => document.removeEventListener('keydown', handleKeyDown) - }, [isInteractionDisabled, enableKeyboardNav, isLocked, sortedOptions, hoveredIndex, onSelect]) + }, [ + isInteractionDisabled, + enableKeyboardNav, + isLocked, + sortedOptions, + hoveredIndex, + onSelect, + activeTab, + ]) if (sortedOptions.length === 0) return null