@codingame/monaco-vscode-chat-service-override 8.0.3 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +24 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +73 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +47 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +5 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +5 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +27 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.js +10 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipantContributions.js +179 -35
- package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +2 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +14 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +14 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatContextAttachments.js +0 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputCompletions.js +37 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +6 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +253 -67
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.js +16 -0
- package/vscode/src/vs/workbench/contrib/chat/common/languageModelStats.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/languageModelToolsService.js +59 -18
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +51 -20
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +28 -49
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +130 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +10 -2
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSavingServiceImpl.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +0 -258
|
@@ -178,7 +178,7 @@ let QuickChat = class QuickChat extends Disposable {
|
|
|
178
178
|
IContextKeyService,
|
|
179
179
|
this._register(this.contextKeyService.createScoped(parent))
|
|
180
180
|
]))));
|
|
181
|
-
this.widget = this._register(scopedInstantiationService.createInstance(ChatWidget, ChatAgentLocation.Panel, {
|
|
181
|
+
this.widget = this._register(scopedInstantiationService.createInstance(ChatWidget, ChatAgentLocation.Panel, { isQuickChat: true }, { renderInputOnTop: true, renderStyle: 'compact', menus: { inputSideToolbar: MenuId.ChatInputSide } }, {
|
|
182
182
|
listForeground: quickInputForeground,
|
|
183
183
|
listBackground: quickInputBackground,
|
|
184
184
|
inputEditorBackground: inputBackground,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { renderMarkdownAsPlaintext } from 'vscode/vscode/vs/base/browser/markdownRenderer';
|
|
2
2
|
import { MarkdownString } from 'vscode/vscode/vs/base/common/htmlContent';
|
|
3
|
-
import { ICodeEditorService } from 'vscode/vscode/vs/editor/browser/services/codeEditorService';
|
|
4
3
|
import { AccessibleViewType, AccessibleViewProviderId } from 'vscode/vscode/vs/platform/accessibility/browser/accessibleView';
|
|
5
4
|
import { AccessibilityVerbositySettingId } from 'vscode/vscode/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration';
|
|
6
5
|
import { IChatWidgetService } from 'vscode/vscode/vs/workbench/contrib/chat/browser/chat.service';
|
|
@@ -15,22 +14,16 @@ class ChatResponseAccessibleView {
|
|
|
15
14
|
this.name = 'panelChat';
|
|
16
15
|
this.type = AccessibleViewType.View;
|
|
17
16
|
this.when = CONTEXT_IN_CHAT_SESSION;
|
|
18
|
-
this._initialRender = true;
|
|
19
17
|
}
|
|
20
18
|
getProvider(accessor) {
|
|
21
19
|
const widgetService = accessor.get(IChatWidgetService);
|
|
22
|
-
const codeEditorService = accessor.get(ICodeEditorService);
|
|
23
20
|
const widget = widgetService.lastFocusedWidget;
|
|
24
21
|
if (!widget) {
|
|
25
22
|
return;
|
|
26
23
|
}
|
|
27
|
-
const chatInputFocused =
|
|
28
|
-
if (
|
|
24
|
+
const chatInputFocused = widget.hasInputFocus();
|
|
25
|
+
if (chatInputFocused) {
|
|
29
26
|
widget.focusLastMessage();
|
|
30
|
-
this._initialRender = false;
|
|
31
|
-
}
|
|
32
|
-
if (!widget) {
|
|
33
|
-
return;
|
|
34
27
|
}
|
|
35
28
|
const verifiedWidget = widget;
|
|
36
29
|
const focusedItem = verifiedWidget.getFocus();
|
|
@@ -9,14 +9,17 @@ import { showChatView } from 'vscode/vscode/vs/workbench/contrib/chat/browser/ch
|
|
|
9
9
|
import { IChatWidgetService } from 'vscode/vscode/vs/workbench/contrib/chat/browser/chat.service';
|
|
10
10
|
import { ChatDynamicVariableModel } from 'vscode/vscode/vs/workbench/contrib/chat/browser/contrib/chatDynamicVariables';
|
|
11
11
|
import { ChatAgentLocation } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatAgents';
|
|
12
|
-
import { ChatRequestVariablePart, ChatRequestDynamicVariablePart } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatParserTypes';
|
|
12
|
+
import { ChatRequestVariablePart, ChatRequestDynamicVariablePart, ChatRequestToolPart } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatParserTypes';
|
|
13
13
|
import { ChatContextAttachments } from './contrib/chatContextAttachments.js';
|
|
14
14
|
import { IViewsService } from 'vscode/vscode/vs/workbench/services/views/common/viewsService.service';
|
|
15
|
+
import { ILanguageModelToolsService } from 'vscode/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service';
|
|
16
|
+
import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
|
|
15
17
|
|
|
16
18
|
let ChatVariablesService = class ChatVariablesService {
|
|
17
|
-
constructor(chatWidgetService, viewsService) {
|
|
19
|
+
constructor(chatWidgetService, viewsService, toolsService) {
|
|
18
20
|
this.chatWidgetService = chatWidgetService;
|
|
19
21
|
this.viewsService = viewsService;
|
|
22
|
+
this.toolsService = toolsService;
|
|
20
23
|
this._resolver = ( new Map());
|
|
21
24
|
}
|
|
22
25
|
async resolveVariables(prompt, attachedContextVariables, model, progress, token) {
|
|
@@ -43,7 +46,13 @@ let ChatVariablesService = class ChatVariablesService {
|
|
|
43
46
|
}
|
|
44
47
|
}
|
|
45
48
|
else if (part instanceof ChatRequestDynamicVariablePart) {
|
|
46
|
-
resolvedVariables[i] = { id: part.id, name: part.referenceText, range: part.range, value: part.data };
|
|
49
|
+
resolvedVariables[i] = { id: part.id, name: part.referenceText, range: part.range, value: part.data, };
|
|
50
|
+
}
|
|
51
|
+
else if (part instanceof ChatRequestToolPart) {
|
|
52
|
+
const tool = this.toolsService.getTool(part.toolId);
|
|
53
|
+
if (tool) {
|
|
54
|
+
resolvedVariables[i] = { id: part.toolId, name: part.toolName, range: part.range, value: undefined, isTool: true, icon: ThemeIcon.isThemeIcon(tool.icon) ? tool.icon : undefined, fullName: tool.displayName };
|
|
55
|
+
}
|
|
47
56
|
}
|
|
48
57
|
});
|
|
49
58
|
const resolvedAttachedContext = [];
|
|
@@ -141,7 +150,8 @@ let ChatVariablesService = class ChatVariablesService {
|
|
|
141
150
|
};
|
|
142
151
|
ChatVariablesService = ( __decorate([
|
|
143
152
|
( __param(0, IChatWidgetService)),
|
|
144
|
-
( __param(1, IViewsService))
|
|
153
|
+
( __param(1, IViewsService)),
|
|
154
|
+
( __param(2, ILanguageModelToolsService))
|
|
145
155
|
], ChatVariablesService));
|
|
146
156
|
|
|
147
157
|
export { ChatVariablesService };
|
|
@@ -69,8 +69,8 @@ let ChatViewPane = class ChatViewPane extends ViewPane {
|
|
|
69
69
|
}
|
|
70
70
|
else if (this._widget?.viewModel?.initState === ChatModelInitState.Initialized) {
|
|
71
71
|
this.didUnregisterProvider = true;
|
|
72
|
-
this._onDidChangeViewWelcomeState.fire();
|
|
73
72
|
}
|
|
73
|
+
this._onDidChangeViewWelcomeState.fire();
|
|
74
74
|
}));
|
|
75
75
|
}
|
|
76
76
|
getActionsContext() {
|
|
@@ -78,7 +78,7 @@ let ChatViewPane = class ChatViewPane extends ViewPane {
|
|
|
78
78
|
chatView: this
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
|
-
updateModel(model
|
|
81
|
+
updateModel(model) {
|
|
82
82
|
this.modelDisposables.clear();
|
|
83
83
|
model = model ?? (this.chatService.transferredSessionData?.sessionId
|
|
84
84
|
? this.chatService.getOrRestoreSession(this.chatService.transferredSessionData.sessionId)
|
|
@@ -86,10 +86,13 @@ let ChatViewPane = class ChatViewPane extends ViewPane {
|
|
|
86
86
|
if (!model) {
|
|
87
87
|
throw ( new Error('Could not start chat session'));
|
|
88
88
|
}
|
|
89
|
-
this._widget.setModel(model, { ...
|
|
89
|
+
this._widget.setModel(model, { ...this.viewState });
|
|
90
90
|
this.viewState.sessionId = model.sessionId;
|
|
91
91
|
}
|
|
92
92
|
shouldShowWelcome() {
|
|
93
|
+
if (!this.chatAgentService.getContributedDefaultAgent(ChatAgentLocation.Panel)) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
93
96
|
const noPersistedSessions = !this.chatService.hasSessions();
|
|
94
97
|
return this.didUnregisterProvider || !this._widget?.viewModel && (noPersistedSessions || this.didProviderRegistrationFail);
|
|
95
98
|
}
|
|
@@ -143,7 +146,8 @@ let ChatViewPane = class ChatViewPane extends ViewPane {
|
|
|
143
146
|
if (this.widget.viewModel) {
|
|
144
147
|
this.chatService.clearSession(this.widget.viewModel.sessionId);
|
|
145
148
|
}
|
|
146
|
-
this.
|
|
149
|
+
this.updateViewState();
|
|
150
|
+
this.updateModel(undefined);
|
|
147
151
|
}
|
|
148
152
|
loadSession(sessionId) {
|
|
149
153
|
if (this.widget.viewModel) {
|
|
@@ -166,13 +170,16 @@ let ChatViewPane = class ChatViewPane extends ViewPane {
|
|
|
166
170
|
saveState() {
|
|
167
171
|
if (this._widget) {
|
|
168
172
|
this._widget.saveState();
|
|
169
|
-
|
|
170
|
-
this.viewState.inputValue = widgetViewState.inputValue;
|
|
171
|
-
this.viewState.inputState = widgetViewState.inputState;
|
|
173
|
+
this.updateViewState();
|
|
172
174
|
this.memento.saveMemento();
|
|
173
175
|
}
|
|
174
176
|
super.saveState();
|
|
175
177
|
}
|
|
178
|
+
updateViewState() {
|
|
179
|
+
const widgetViewState = this._widget.getViewState();
|
|
180
|
+
this.viewState.inputValue = widgetViewState.inputValue;
|
|
181
|
+
this.viewState.inputState = widgetViewState.inputState;
|
|
182
|
+
}
|
|
176
183
|
};
|
|
177
184
|
ChatViewPane = ( __decorate([
|
|
178
185
|
( __param(1, IKeybindingService)),
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Emitter } from 'vscode/vscode/vs/base/common/event';
|
|
2
1
|
import { Disposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
3
2
|
import { ChatWidget } from 'vscode/vscode/vs/workbench/contrib/chat/browser/chatWidget';
|
|
4
3
|
|
|
@@ -11,8 +10,6 @@ class ChatContextAttachments extends Disposable {
|
|
|
11
10
|
super();
|
|
12
11
|
this.widget = widget;
|
|
13
12
|
this._attachedContext = ( new Set());
|
|
14
|
-
this._onDidChangeInputState = this._register(( new Emitter()));
|
|
15
|
-
this.onDidChangeInputState = this._onDidChangeInputState.event;
|
|
16
13
|
this._register(this.widget.onDidChangeContext((e) => {
|
|
17
14
|
if (e.removed) {
|
|
18
15
|
this._removeContext(e.removed);
|
|
@@ -46,12 +43,10 @@ class ChatContextAttachments extends Disposable {
|
|
|
46
43
|
this._attachedContext.add(attachment);
|
|
47
44
|
}
|
|
48
45
|
this.widget.setContext(overwrite, ...attachments);
|
|
49
|
-
this._onDidChangeInputState.fire();
|
|
50
46
|
}
|
|
51
47
|
_removeContext(attachments) {
|
|
52
48
|
if (attachments.length) {
|
|
53
49
|
attachments.forEach(this._attachedContext.delete, this._attachedContext);
|
|
54
|
-
this._onDidChangeInputState.fire();
|
|
55
50
|
}
|
|
56
51
|
}
|
|
57
52
|
_clearAttachedContext() {
|
|
@@ -15,9 +15,10 @@ import { ChatInputPart } from 'vscode/vscode/vs/workbench/contrib/chat/browser/c
|
|
|
15
15
|
import { SelectAndInsertFileAction } from 'vscode/vscode/vs/workbench/contrib/chat/browser/contrib/chatDynamicVariables';
|
|
16
16
|
import { getFullyQualifiedId, ChatAgentLocation } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatAgents';
|
|
17
17
|
import { IChatAgentService, IChatAgentNameService } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatAgents.service';
|
|
18
|
-
import { ChatRequestAgentPart, ChatRequestAgentSubcommandPart, ChatRequestTextPart, chatSubcommandLeader, chatAgentLeader, chatVariableLeader, ChatRequestVariablePart } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatParserTypes';
|
|
18
|
+
import { ChatRequestAgentPart, ChatRequestAgentSubcommandPart, ChatRequestTextPart, chatSubcommandLeader, chatAgentLeader, chatVariableLeader, ChatRequestVariablePart, ChatRequestToolPart } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatParserTypes';
|
|
19
19
|
import { IChatSlashCommandService } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatSlashCommands.service';
|
|
20
20
|
import { IChatVariablesService } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatVariables.service';
|
|
21
|
+
import { ILanguageModelToolsService } from 'vscode/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service';
|
|
21
22
|
import { LifecyclePhase } from 'vscode/vscode/vs/workbench/services/lifecycle/common/lifecycle';
|
|
22
23
|
|
|
23
24
|
var BuiltinDynamicCompletions_1, VariableCompletions_1;
|
|
@@ -266,7 +267,7 @@ let BuiltinDynamicCompletions = class BuiltinDynamicCompletions extends Disposab
|
|
|
266
267
|
if (!widget || !widget.supportsFileReferences) {
|
|
267
268
|
return null;
|
|
268
269
|
}
|
|
269
|
-
const range = computeCompletionRanges(model, position, BuiltinDynamicCompletions_1.VariableNameDef);
|
|
270
|
+
const range = computeCompletionRanges(model, position, BuiltinDynamicCompletions_1.VariableNameDef, true);
|
|
270
271
|
if (!range) {
|
|
271
272
|
return null;
|
|
272
273
|
}
|
|
@@ -281,7 +282,7 @@ let BuiltinDynamicCompletions = class BuiltinDynamicCompletions extends Disposab
|
|
|
281
282
|
{
|
|
282
283
|
label: `${chatVariableLeader}file`,
|
|
283
284
|
insertText: `${chatVariableLeader}file:`,
|
|
284
|
-
detail: ( localize(
|
|
285
|
+
detail: ( localize(7125, "Pick a file")),
|
|
285
286
|
range,
|
|
286
287
|
kind: CompletionItemKind.Text,
|
|
287
288
|
command: { id: SelectAndInsertFileAction.ID, title: SelectAndInsertFileAction.ID, arguments: [{ widget, range: afterRange }] },
|
|
@@ -298,11 +299,17 @@ BuiltinDynamicCompletions = BuiltinDynamicCompletions_1 = ( (__decorate([
|
|
|
298
299
|
( (__param(1, IChatWidgetService)))
|
|
299
300
|
], BuiltinDynamicCompletions)));
|
|
300
301
|
( (Registry.as(Extensions.Workbench))).registerWorkbenchContribution(BuiltinDynamicCompletions, LifecyclePhase.Eventually);
|
|
301
|
-
function computeCompletionRanges(model, position, reg) {
|
|
302
|
+
function computeCompletionRanges(model, position, reg, onlyOnWordStart = false) {
|
|
302
303
|
const varWord = getWordAtText(position.column, reg, model.getLineContent(position.lineNumber), 0);
|
|
303
304
|
if (!varWord && model.getWordUntilPosition(position).word) {
|
|
304
305
|
return;
|
|
305
306
|
}
|
|
307
|
+
if (varWord && onlyOnWordStart) {
|
|
308
|
+
const wordBefore = model.getWordUntilPosition({ lineNumber: position.lineNumber, column: varWord.startColumn });
|
|
309
|
+
if (wordBefore.word) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
306
313
|
let insert;
|
|
307
314
|
let replace;
|
|
308
315
|
if (!varWord) {
|
|
@@ -327,7 +334,7 @@ function computeCompletionRanges(model, position, reg) {
|
|
|
327
334
|
let VariableCompletions = class VariableCompletions extends Disposable {
|
|
328
335
|
static { VariableCompletions_1 = this; }
|
|
329
336
|
static { this.VariableNameDef = ( (new RegExp(`${chatVariableLeader}\\w*`, 'g'))); }
|
|
330
|
-
constructor(languageFeaturesService, chatWidgetService, chatVariablesService, configService) {
|
|
337
|
+
constructor(languageFeaturesService, chatWidgetService, chatVariablesService, configService, toolsService) {
|
|
331
338
|
super();
|
|
332
339
|
this.languageFeaturesService = languageFeaturesService;
|
|
333
340
|
this.chatWidgetService = chatWidgetService;
|
|
@@ -347,15 +354,16 @@ let VariableCompletions = class VariableCompletions extends Disposable {
|
|
|
347
354
|
if (!widget || !( (locations.has(widget.location)))) {
|
|
348
355
|
return null;
|
|
349
356
|
}
|
|
350
|
-
const range = computeCompletionRanges(model, position, VariableCompletions_1.VariableNameDef);
|
|
357
|
+
const range = computeCompletionRanges(model, position, VariableCompletions_1.VariableNameDef, true);
|
|
351
358
|
if (!range) {
|
|
352
359
|
return null;
|
|
353
360
|
}
|
|
354
361
|
const usedAgent = widget.parsedInput.parts.find(p => p instanceof ChatRequestAgentPart);
|
|
355
362
|
const slowSupported = usedAgent ? usedAgent.agent.metadata.supportsSlowVariables : true;
|
|
356
363
|
const usedVariables = widget.parsedInput.parts.filter((p) => p instanceof ChatRequestVariablePart);
|
|
364
|
+
const usedVariableNames = ( (new Set( (usedVariables.map(v => v.variableName)))));
|
|
357
365
|
const variableItems = ( (Array.from(this.chatVariablesService.getVariables(widget.location))
|
|
358
|
-
.filter(v => !( (
|
|
366
|
+
.filter(v => !( (usedVariableNames.has(v.name))))
|
|
359
367
|
.filter(v => !v.isSlow || slowSupported)
|
|
360
368
|
.map((v) => {
|
|
361
369
|
const withLeader = `${chatVariableLeader}${v.name}`;
|
|
@@ -368,8 +376,27 @@ let VariableCompletions = class VariableCompletions extends Disposable {
|
|
|
368
376
|
sortText: 'z'
|
|
369
377
|
};
|
|
370
378
|
})));
|
|
379
|
+
const usedTools = widget.parsedInput.parts.filter((p) => p instanceof ChatRequestToolPart);
|
|
380
|
+
const usedToolNames = ( (new Set( (usedTools.map(v => v.toolName)))));
|
|
381
|
+
const toolItems = [];
|
|
382
|
+
if (!usedAgent || usedAgent.agent.supportsToolReferences) {
|
|
383
|
+
toolItems.push(...( (Array.from(toolsService.getTools())
|
|
384
|
+
.filter(t => t.canBeInvokedManually)
|
|
385
|
+
.filter(t => !( (usedToolNames.has(t.name ?? ''))))
|
|
386
|
+
.map((t) => {
|
|
387
|
+
const withLeader = `${chatVariableLeader}${t.name}`;
|
|
388
|
+
return {
|
|
389
|
+
label: withLeader,
|
|
390
|
+
range,
|
|
391
|
+
insertText: withLeader + ' ',
|
|
392
|
+
detail: t.userDescription,
|
|
393
|
+
kind: CompletionItemKind.Text,
|
|
394
|
+
sortText: 'z'
|
|
395
|
+
};
|
|
396
|
+
}))));
|
|
397
|
+
}
|
|
371
398
|
return {
|
|
372
|
-
suggestions: variableItems
|
|
399
|
+
suggestions: [...variableItems, ...toolItems]
|
|
373
400
|
};
|
|
374
401
|
}
|
|
375
402
|
}));
|
|
@@ -379,6 +406,7 @@ VariableCompletions = VariableCompletions_1 = ( (__decorate([
|
|
|
379
406
|
( (__param(0, ILanguageFeaturesService))),
|
|
380
407
|
( (__param(1, IChatWidgetService))),
|
|
381
408
|
( (__param(2, IChatVariablesService))),
|
|
382
|
-
( (__param(3, IConfigurationService)))
|
|
409
|
+
( (__param(3, IConfigurationService))),
|
|
410
|
+
( (__param(4, ILanguageModelToolsService)))
|
|
383
411
|
], VariableCompletions)));
|
|
384
412
|
( (Registry.as(Extensions.Workbench))).registerWorkbenchContribution(VariableCompletions, LifecyclePhase.Eventually);
|
|
@@ -20,7 +20,7 @@ import { ChatWidget } from 'vscode/vscode/vs/workbench/contrib/chat/browser/chat
|
|
|
20
20
|
import { dynamicVariableDecorationType } from 'vscode/vscode/vs/workbench/contrib/chat/browser/contrib/chatDynamicVariables';
|
|
21
21
|
import { IChatAgentService } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatAgents.service';
|
|
22
22
|
import { chatSlashCommandForeground, chatSlashCommandBackground } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatColors';
|
|
23
|
-
import { ChatRequestAgentPart, ChatRequestAgentSubcommandPart, ChatRequestSlashCommandPart, ChatRequestTextPart, ChatRequestVariablePart, chatAgentLeader, chatSubcommandLeader } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatParserTypes';
|
|
23
|
+
import { ChatRequestAgentPart, ChatRequestAgentSubcommandPart, ChatRequestSlashCommandPart, ChatRequestTextPart, ChatRequestVariablePart, ChatRequestToolPart, chatAgentLeader, chatSubcommandLeader } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatParserTypes';
|
|
24
24
|
import { ChatRequestParser } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatRequestParser';
|
|
25
25
|
|
|
26
26
|
const decorationDescription = 'chat';
|
|
@@ -200,6 +200,10 @@ let InputEditorDecorations = class InputEditorDecorations extends Disposable {
|
|
|
200
200
|
for (const variable of variableParts) {
|
|
201
201
|
varDecorations.push({ range: variable.editorRange });
|
|
202
202
|
}
|
|
203
|
+
const toolParts = parsedRequest.filter((p) => p instanceof ChatRequestToolPart);
|
|
204
|
+
for (const tool of toolParts) {
|
|
205
|
+
varDecorations.push({ range: tool.editorRange });
|
|
206
|
+
}
|
|
203
207
|
this.widget.inputEditor.setDecorationsByType(decorationDescription, variableTextDecorationType, varDecorations);
|
|
204
208
|
}
|
|
205
209
|
};
|
|
@@ -258,7 +262,7 @@ let ChatTokenDeleter = class ChatTokenDeleter extends Disposable {
|
|
|
258
262
|
const change = e.changes[0];
|
|
259
263
|
if (!change.text && this.widget.viewModel) {
|
|
260
264
|
const previousParsedValue = parser.parseChatRequest(this.widget.viewModel.sessionId, previousInputValue, widget.location, { selectedAgent: previousSelectedAgent });
|
|
261
|
-
const deletableTokens = previousParsedValue.parts.filter(p => p instanceof ChatRequestAgentPart || p instanceof ChatRequestAgentSubcommandPart || p instanceof ChatRequestSlashCommandPart || p instanceof ChatRequestVariablePart);
|
|
265
|
+
const deletableTokens = previousParsedValue.parts.filter(p => p instanceof ChatRequestAgentPart || p instanceof ChatRequestAgentSubcommandPart || p instanceof ChatRequestSlashCommandPart || p instanceof ChatRequestVariablePart || p instanceof ChatRequestToolPart);
|
|
262
266
|
deletableTokens.forEach(token => {
|
|
263
267
|
const deletedRangeOfToken = Range.intersectRanges(token.editorRange, change.range);
|
|
264
268
|
if (deletedRangeOfToken && Range.compareRangesUsingStarts(token.editorRange, change.range) < 0) {
|
|
@@ -61,7 +61,7 @@ let ChatAgentHoverParticipant = class ChatAgentHoverParticipant {
|
|
|
61
61
|
);
|
|
62
62
|
}
|
|
63
63
|
getAccessibleContent(hoverPart) {
|
|
64
|
-
return ( localize(
|
|
64
|
+
return ( localize(7126, 'There is a chat agent hover part here.'));
|
|
65
65
|
}
|
|
66
66
|
};
|
|
67
67
|
ChatAgentHoverParticipant = ( (__decorate([
|