From 131470faa032307e78c2c24a7d149a2f423e8991 Mon Sep 17 00:00:00 2001 From: Turtle Date: Thu, 30 Jul 2026 00:07:21 +0800 Subject: [PATCH] Revert "fix(tui): avoid blocking reference autocomplete" This reverts commit f565ce44db708f1186354526a170513d48b07a2c. --- packages/ui/tui/src/chat/autocomplete.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/ui/tui/src/chat/autocomplete.ts b/packages/ui/tui/src/chat/autocomplete.ts index cff83ac980..d63ed3614d 100644 --- a/packages/ui/tui/src/chat/autocomplete.ts +++ b/packages/ui/tui/src/chat/autocomplete.ts @@ -33,23 +33,25 @@ export class ReferenceAutocompleteProvider implements AutocompleteProvider { cursorCol: number, options: { signal: AbortSignal; force?: boolean }, ): Promise { + const basePromise = this.base.getSuggestions(lines, cursorLine, cursorCol, options) const currentLine = lines[cursorLine] /* v8 ignore next -- Editor always supplies its current state line. */ - if (currentLine === undefined) return this.base.getSuggestions(lines, cursorLine, cursorCol, options) + if (currentLine === undefined) return basePromise const token = activeAtToken(currentLine, cursorCol) if (token === undefined) { this.files.invalidate() - return this.base.getSuggestions(lines, cursorLine, cursorCol, options) + return basePromise } const filePromise = this.files.list(token.query, options.signal).catch(() => []) const sessionPromise = this.sessions === undefined || token.quoted ? Promise.resolve([]) : this.sessions.listCandidates(this.agent, token.query, undefined, options.signal).catch(() => []) - // The command provider has no candidates for an active `@` token. Do not - // await it here: upstream may defer its empty result while the editor waits - // for this provider, which would suppress otherwise ready references. - const [fileCandidates, sessionCandidates] = await Promise.all([filePromise, sessionPromise]) - if (options.signal.aborted) return null + const [base, fileCandidates, sessionCandidates] = await Promise.all([ + basePromise, + filePromise, + sessionPromise, + ]) + if (options.signal.aborted) return base const fileItems: AutocompleteItem[] = fileCandidates.flatMap((candidate) => { const value = formatFileMention(candidate, token.quoted) if (value === undefined) return [] @@ -73,8 +75,8 @@ export class ReferenceAutocompleteProvider implements AutocompleteProvider { } }) const items = [...fileItems, ...sessionItems] - if (items.length === 0) return null - return { items, prefix: token.prefix } + if (items.length === 0) return base + return { items: [...items, ...(base?.items ?? [])], prefix: token.prefix } } applyCompletion(