From 0676ca94676f43d7951efabb5f81b8b334f81d92 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Sat, 21 Jun 2025 16:39:34 -0700 Subject: [PATCH] Enable @ for chat participants in Agent mode Fix #252053 --- .../chat/browser/contrib/chatInputCompletions.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/contrib/chatInputCompletions.ts b/src/vs/workbench/contrib/chat/browser/contrib/chatInputCompletions.ts index 13067fe719936..71a3d071fad03 100644 --- a/src/vs/workbench/contrib/chat/browser/contrib/chatInputCompletions.ts +++ b/src/vs/workbench/contrib/chat/browser/contrib/chatInputCompletions.ts @@ -70,7 +70,7 @@ class SlashCommandCompletions extends Disposable { this._register(this.languageFeaturesService.completionProvider.register({ scheme: Schemas.vscodeChatInput, hasAccessToAllModels: true }, { _debugDisplayName: 'globalSlashCommands', - triggerCharacters: ['/'], + triggerCharacters: [chatSubcommandLeader], provideCompletionItems: async (model: ITextModel, position: Position, _context: CompletionContext, _token: CancellationToken) => { const widget = this.chatWidgetService.getWidgetByInputUri(model.uri); if (!widget || !widget.viewModel) { @@ -158,7 +158,7 @@ class SlashCommandCompletions extends Disposable { })); this._register(this.languageFeaturesService.completionProvider.register({ scheme: Schemas.vscodeChatInput, hasAccessToAllModels: true }, { _debugDisplayName: 'promptSlashCommands', - triggerCharacters: ['/'], + triggerCharacters: [chatSubcommandLeader], provideCompletionItems: async (model: ITextModel, position: Position, _context: CompletionContext, _token: CancellationToken) => { const widget = this.chatWidgetService.getWidgetByInputUri(model.uri); if (!widget || !widget.viewModel) { @@ -206,7 +206,7 @@ class SlashCommandCompletions extends Disposable { this._register(this.languageFeaturesService.completionProvider.register({ scheme: Schemas.vscodeChatInput, hasAccessToAllModels: true }, { _debugDisplayName: 'mcpPromptSlashCommands', - triggerCharacters: ['/'], + triggerCharacters: [chatSubcommandLeader], provideCompletionItems: async (model: ITextModel, position: Position, _context: CompletionContext, _token: CancellationToken) => { const widget = this.chatWidgetService.getWidgetByInputUri(model.uri); if (!widget || !widget.viewModel) { @@ -259,7 +259,7 @@ class AgentCompletions extends Disposable { const subCommandProvider: CompletionItemProvider = { _debugDisplayName: 'chatAgentSubcommand', - triggerCharacters: ['/'], + triggerCharacters: [chatSubcommandLeader], provideCompletionItems: async (model: ITextModel, position: Position, _context: CompletionContext, token: CancellationToken) => { const widget = this.chatWidgetService.getWidgetByInputUri(model.uri); if (!widget || !widget.viewModel) { @@ -329,7 +329,7 @@ class AgentCompletions extends Disposable { } const agents = this.chatAgentService.getAgents() - .filter(a => a.locations.includes(widget.location) && a.modes.includes(widget.input.currentMode)); + .filter(a => a.locations.includes(widget.location)); // When the input is only `/`, items are sorted by sortText. // When typing, filterText is used to score and sort. @@ -527,6 +527,10 @@ class AssignSelectedAgentAction extends Action2 { return; } + if (!arg.agent.modes.includes(arg.widget.input.currentMode)) { + arg.widget.input.setChatMode(arg.agent.modes[0]); + } + arg.widget.lastSelectedAgent = arg.agent; } }