From 22c68a6992e9764d71c2a3e058c3fd97136febba Mon Sep 17 00:00:00 2001 From: Ravi Kumar <82090231+Raviguntakala@users.noreply.github.com> Date: Tue, 13 Jan 2026 00:22:36 +0530 Subject: [PATCH] fix(tui): reopen autocomplete after backspace deletes space (#6031) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> --- .../cmd/tui/component/prompt/autocomplete.tsx | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx index 1ecfaaf1f..4f8f979d5 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx @@ -601,8 +601,31 @@ export function Autocomplete(props: { (store.visible === "/" && value.match(/^\S+\s+\S+\s*$/)) ) { hide() - return } + return + } + + // Check if autocomplete should reopen (e.g., after backspace deleted a space) + const offset = props.input().cursorOffset + if (offset === 0) return + + // Check for "/" at position 0 - reopen slash commands + if (value.startsWith("/") && !value.slice(0, offset).match(/\s/)) { + show("/") + setStore("index", 0) + return + } + + // Check for "@" trigger - find the nearest "@" before cursor with no whitespace between + const text = value.slice(0, offset) + const idx = text.lastIndexOf("@") + if (idx === -1) return + + const between = text.slice(idx) + const before = idx === 0 ? undefined : value[idx - 1] + if ((before === undefined || /\s/.test(before)) && !between.match(/\s/)) { + show("@") + setStore("index", idx) } }, onKeyDown(e: KeyEvent) {