@codingame/monaco-vscode-chat-service-override 17.2.0 → 18.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/index.js +7 -4
- package/package.json +36 -30
- package/vscode/src/vs/base/common/objectCache.d.ts +2 -2
- package/vscode/src/vs/base/common/objectCache.js +3 -3
- package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +10 -0
- package/vscode/src/vs/platform/browserElements/common/browserElements.js +9 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +40 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.d.ts +6 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.js +158 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.js +256 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.d.ts +3 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +234 -572
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +4 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +29 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +107 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +344 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +4 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +84 -37
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/chatAttachInstructionsAction.d.ts +18 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/chatAttachInstructionsAction.js +137 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/chatModeActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/chatModeActions.js +54 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/chatRunPromptAction.js +40 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/chatSaveToPromptAction.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/chatSaveToPromptAction.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/dialogs/askToSelectPrompt/promptFilePickers.d.ts +15 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/dialogs/askToSelectPrompt/promptFilePickers.js +171 -101
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/dialogs/askToSelectPrompt/utils/attachInstructions.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/dialogs/askToSelectPrompt/utils/attachInstructions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/dialogs/askToSelectPrompt/utils/runPrompt.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/index.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/promptActions/index.js +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +176 -69
- package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +15 -29
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +22 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +35 -29
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +80 -32
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +5 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +11 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +12 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +13 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +15 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +3 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +10 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +18 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/simpleBrowserEditorOverlay.js +118 -33
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.d.ts +1 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +46 -48
- package/vscode/src/vs/workbench/contrib/chat/browser/chatPasteProviders.d.ts +49 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatPasteProviders.js +379 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +31 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.js +382 -152
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.js +99 -56
- package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +11 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.d.ts +1 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +9 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockContextProviderService.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +10 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.d.ts +18 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.js +95 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSetup.css +92 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/media/github.svg +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/media/google.svg +6 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/media/simpleBrowserOverlay.css +10 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/createPromptCommand.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/createPromptCommand.js +111 -111
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/dialogs/askForPromptName.d.ts +3 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/dialogs/askForPromptName.js +36 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/dialogs/askForPromptSourceFolder.d.ts +5 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/dialogs/askForPromptSourceFolder.js +91 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/errors.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/utils/createPromptFile.d.ts +1 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/createPromptCommand/utils/createPromptFile.js +4 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +95 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.d.ts +24 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +348 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatResponseResourceFileSystemProvider.d.ts +30 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatResponseResourceFileSystemProvider.js +93 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.d.ts +5 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +46 -36
- package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/configMigration.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/configMigration.js +21 -11
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/index.js +6 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/index.js +3 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/promptHeaderDiagnosticsProvider.d.ts +4 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/promptHeaderDiagnosticsProvider.js +12 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/promptLinkDiagnosticsProvider.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/promptLinkDiagnosticsProvider.js +1 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/promptLinkProvider.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/promptPathAutocompletion.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/providerInstanceBase.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/providerInstanceBase.js +9 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/providerInstanceManagerBase.d.ts +3 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/providerInstanceManagerBase.js +12 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/textModelPromptParser.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/textModelPromptParser.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.d.ts +21 -10
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.js +111 -124
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +22 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +159 -97
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/treeUtils.d.ts +15 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/treeUtils.js +2 -14
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +8 -2
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +198 -33
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +28 -18
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/attachInstructionsCommand.d.ts +0 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/contributions/attachInstructionsCommand.js +0 -73
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/frontMatterDecoration.d.ts +0 -29
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/frontMatterDecoration.js +0 -74
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/frontMatterMarkerDecoration.d.ts +0 -14
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/frontMatterMarkerDecoration.js +0 -40
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/utils/decorationBase.d.ts +0 -23
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/utils/decorationBase.js +0 -40
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/utils/index.d.ts +0 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/utils/index.js +0 -9
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/utils/reactiveDecorationBase.d.ts +0 -23
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/utils/reactiveDecorationBase.js +0 -68
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/decorations/utils/types.d.ts +0 -13
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/promptDecorationsProvider.d.ts +0 -19
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/promptDecorationsProvider.js +0 -121
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/types.d.ts +0 -13
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contributions/languageFeatures/providers/decorationsProvider/types.js +0 -13
package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
|
|
2
|
+
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
+
import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
4
|
+
import { generateUuid } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uuid';
|
|
5
|
+
import { EditOperation } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/editOperation';
|
|
6
|
+
import { isITextModel } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/model';
|
|
7
|
+
import { ILanguageFeaturesService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/languageFeatures.service';
|
|
8
|
+
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
9
|
+
import { CommandsRegistry } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands';
|
|
10
|
+
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
11
|
+
import { showToolsPicker } from '../actions/chatToolPicker.js';
|
|
12
|
+
import { ToolSet } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
|
|
13
|
+
import { ILanguageModelToolsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service';
|
|
14
|
+
import { ALL_PROMPTS_LANGUAGE_SELECTOR } from '@codingame/monaco-vscode-fab30422-b487-5f4e-8d30-8b4d266e3fcd-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/constants';
|
|
15
|
+
import { PromptToolsMetadata } from '@codingame/monaco-vscode-fab30422-b487-5f4e-8d30-8b4d266e3fcd-common/vscode/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools';
|
|
16
|
+
import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/types.service';
|
|
17
|
+
import { registerEditorFeature } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/editorFeatures';
|
|
18
|
+
|
|
19
|
+
let PromptToolsCodeLensProvider = class PromptToolsCodeLensProvider extends Disposable {
|
|
20
|
+
constructor(promptsService, languageService, languageModelToolsService, instantiationService) {
|
|
21
|
+
super();
|
|
22
|
+
this.promptsService = promptsService;
|
|
23
|
+
this.languageService = languageService;
|
|
24
|
+
this.languageModelToolsService = languageModelToolsService;
|
|
25
|
+
this.instantiationService = instantiationService;
|
|
26
|
+
this.cmdId = `_configure/${generateUuid()}`;
|
|
27
|
+
this._register(this.languageService.codeLensProvider.register(ALL_PROMPTS_LANGUAGE_SELECTOR, this));
|
|
28
|
+
this._register(CommandsRegistry.registerCommand(this.cmdId, (_accessor, ...args) => {
|
|
29
|
+
const [first, second] = args;
|
|
30
|
+
if (isITextModel(first) && second instanceof PromptToolsMetadata) {
|
|
31
|
+
this.updateTools(first, second);
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
async provideCodeLenses(model, token) {
|
|
36
|
+
const parser = this.promptsService.getSyntaxParserFor(model);
|
|
37
|
+
const { header } = await parser
|
|
38
|
+
.start()
|
|
39
|
+
.settled();
|
|
40
|
+
if ((header === undefined) || token.isCancellationRequested) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
if (('tools' in header.metadataUtility) === false) {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
const { tools } = header.metadataUtility;
|
|
47
|
+
if (tools === undefined) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const codeLens = {
|
|
51
|
+
range: tools.range.collapseToStart(),
|
|
52
|
+
command: {
|
|
53
|
+
title: ( localize(5077, "Configure Tools...")),
|
|
54
|
+
id: this.cmdId,
|
|
55
|
+
arguments: [model, tools]
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return { lenses: [codeLens] };
|
|
59
|
+
}
|
|
60
|
+
async updateTools(model, tools) {
|
|
61
|
+
const toolNames = ( new Set(tools.value));
|
|
62
|
+
const selectedToolsNow = ( new Map());
|
|
63
|
+
for (const tool of this.languageModelToolsService.getTools()) {
|
|
64
|
+
selectedToolsNow.set(tool, ( toolNames.has(tool.toolReferenceName ?? tool.displayName)));
|
|
65
|
+
}
|
|
66
|
+
for (const toolSet of this.languageModelToolsService.toolSets.get()) {
|
|
67
|
+
selectedToolsNow.set(toolSet, ( toolNames.has(toolSet.referenceName)));
|
|
68
|
+
}
|
|
69
|
+
const newSelectedAfter = await this.instantiationService.invokeFunction(showToolsPicker, ( localize(5078, "Select tools")), selectedToolsNow);
|
|
70
|
+
if (!newSelectedAfter) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const newToolNames = [];
|
|
74
|
+
for (const [item, picked] of newSelectedAfter) {
|
|
75
|
+
if (picked) {
|
|
76
|
+
if (item instanceof ToolSet) {
|
|
77
|
+
newToolNames.push(item.referenceName);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
newToolNames.push(item.toolReferenceName ?? item.displayName);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
model.pushStackElement();
|
|
85
|
+
model.pushEditOperations(null, [EditOperation.replaceMove(tools.range, `tools: [${( newToolNames.map(s => `'${s}'`)).join(', ')}]`)], () => null);
|
|
86
|
+
model.pushStackElement();
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
PromptToolsCodeLensProvider = ( __decorate([
|
|
90
|
+
( __param(0, IPromptsService)),
|
|
91
|
+
( __param(1, ILanguageFeaturesService)),
|
|
92
|
+
( __param(2, ILanguageModelToolsService)),
|
|
93
|
+
( __param(3, IInstantiationService))
|
|
94
|
+
], PromptToolsCodeLensProvider));
|
|
95
|
+
registerEditorFeature(PromptToolsCodeLensProvider);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
2
|
+
import { Action2 } from "@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions";
|
|
3
|
+
import { IFileService } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service";
|
|
4
|
+
import { ServicesAccessor } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
|
|
5
|
+
import { ILogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service";
|
|
6
|
+
import { IWorkbenchContribution } from "@codingame/monaco-vscode-api/vscode/vs/workbench/common/contributions";
|
|
7
|
+
import { IExtensionService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service";
|
|
8
|
+
import { ILifecycleService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle.service";
|
|
9
|
+
import { IUserDataProfileService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service";
|
|
10
|
+
import { ILanguageModelToolsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service";
|
|
11
|
+
export declare class UserToolSetsContributions extends Disposable implements IWorkbenchContribution {
|
|
12
|
+
private readonly _languageModelToolsService;
|
|
13
|
+
private readonly _userDataProfileService;
|
|
14
|
+
private readonly _fileService;
|
|
15
|
+
private readonly _logService;
|
|
16
|
+
static readonly ID = "chat.userToolSets";
|
|
17
|
+
constructor(extensionService: IExtensionService, lifecycleService: ILifecycleService, _languageModelToolsService: ILanguageModelToolsService, _userDataProfileService: IUserDataProfileService, _fileService: IFileService, _logService: ILogService);
|
|
18
|
+
private _initToolSets;
|
|
19
|
+
}
|
|
20
|
+
export declare class ConfigureToolSets extends Action2 {
|
|
21
|
+
static readonly ID = "chat.configureToolSets";
|
|
22
|
+
constructor();
|
|
23
|
+
run(accessor: ServicesAccessor): Promise<void>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
|
|
2
|
+
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
+
import { isFalsyOrEmpty } from '@codingame/monaco-vscode-api/vscode/vs/base/common/arrays';
|
|
4
|
+
import { CancellationTokenSource } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
|
|
5
|
+
import { Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
|
6
|
+
import { Disposable, DisposableStore, toDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
7
|
+
import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
|
|
8
|
+
import { basename, joinPath } from '@codingame/monaco-vscode-api/vscode/vs/base/common/resources';
|
|
9
|
+
import { isFalsyOrWhitespace } from '@codingame/monaco-vscode-api/vscode/vs/base/common/strings';
|
|
10
|
+
import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
|
|
11
|
+
import { isObject, assertType } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
|
|
12
|
+
import { localize, localize2 } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
13
|
+
import { Action2, MenuId } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions';
|
|
14
|
+
import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
|
|
15
|
+
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
|
|
16
|
+
import { IQuickInputService } from '@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service';
|
|
17
|
+
import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
|
|
18
|
+
import { LifecyclePhase } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle';
|
|
19
|
+
import { ILifecycleService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle.service';
|
|
20
|
+
import { IUserDataProfileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataProfile/common/userDataProfile.service';
|
|
21
|
+
import { CHAT_CATEGORY } from '@codingame/monaco-vscode-3a35f433-1297-5707-ab58-c261b8180e6d-common/vscode/vs/workbench/contrib/chat/browser/actions/chatActions';
|
|
22
|
+
import { ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
|
|
23
|
+
import { ILanguageModelToolsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service';
|
|
24
|
+
import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
25
|
+
import { getAllCodicons, Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
26
|
+
import { isValidBasename } from '@codingame/monaco-vscode-api/vscode/vs/base/common/extpath';
|
|
27
|
+
import { ITextFileService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/textfile/common/textfiles.service';
|
|
28
|
+
import { parse } from '@codingame/monaco-vscode-aa9ead53-dfd3-59da-b9e7-f163d201de8d-common/vscode/vs/base/common/jsonc';
|
|
29
|
+
import { Extensions } from '@codingame/monaco-vscode-api/vscode/vs/platform/jsonschemas/common/jsonContributionRegistry';
|
|
30
|
+
import { Registry } from '@codingame/monaco-vscode-api/vscode/vs/platform/registry/common/platform';
|
|
31
|
+
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
32
|
+
import { ChatViewId } from '@codingame/monaco-vscode-7adbeffb-8051-54a9-8c9b-b62ce9e5836f-common/vscode/vs/workbench/contrib/chat/browser/chat';
|
|
33
|
+
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatContextKeys';
|
|
34
|
+
import { observableFromEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableFromEvent';
|
|
35
|
+
import { autorun } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/reactions/autorun';
|
|
36
|
+
import { observableSignalFromEvent } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableSignalFromEvent';
|
|
37
|
+
import { transaction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/transaction';
|
|
38
|
+
|
|
39
|
+
const toolEnumValues = [];
|
|
40
|
+
const toolEnumDescriptions = [];
|
|
41
|
+
const toolSetSchemaId = 'vscode://schemas/toolsets';
|
|
42
|
+
const toolSetsSchema = {
|
|
43
|
+
id: toolSetSchemaId,
|
|
44
|
+
allowComments: true,
|
|
45
|
+
allowTrailingCommas: true,
|
|
46
|
+
defaultSnippets: [{
|
|
47
|
+
label: ( localize(5079, "Empty tool set")),
|
|
48
|
+
body: { '${1:toolSetName}': { 'tools': ['${2:someTool}', '${3:anotherTool}'], 'description': '${4:description}', 'icon': '${5:tools}' } }
|
|
49
|
+
}],
|
|
50
|
+
type: 'object',
|
|
51
|
+
description: ( localize(5080, 'User tool sets configuration')),
|
|
52
|
+
additionalProperties: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
required: ['tools'],
|
|
55
|
+
additionalProperties: false,
|
|
56
|
+
properties: {
|
|
57
|
+
tools: {
|
|
58
|
+
description: ( localize(
|
|
59
|
+
5081,
|
|
60
|
+
"A list of tools or tool sets to include in this tool set. Cannot be empty and must reference tools the way they are referenced in prompts."
|
|
61
|
+
)),
|
|
62
|
+
type: 'array',
|
|
63
|
+
minItems: 1,
|
|
64
|
+
items: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
enum: toolEnumValues,
|
|
67
|
+
enumDescriptions: toolEnumDescriptions,
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
icon: {
|
|
71
|
+
description: ( localize(
|
|
72
|
+
5082,
|
|
73
|
+
"Icon to use for this tool set in the UI. Uses the `\\$(name)`-syntax, like `\\$(zap)`"
|
|
74
|
+
)),
|
|
75
|
+
type: 'string',
|
|
76
|
+
enum: Array.from(getAllCodicons(), icon => icon.id),
|
|
77
|
+
markdownEnumDescriptions: Array.from(getAllCodicons(), icon => `$(${icon.id})`),
|
|
78
|
+
},
|
|
79
|
+
description: {
|
|
80
|
+
description: ( localize(5083, "A short description of this tool set.")),
|
|
81
|
+
type: 'string'
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const reg = ( Registry.as(Extensions.JSONContribution));
|
|
87
|
+
class RawToolSetsShape {
|
|
88
|
+
static { this.suffix = '.toolsets.jsonc'; }
|
|
89
|
+
static isToolSetFileName(uri) {
|
|
90
|
+
return basename(uri).endsWith(RawToolSetsShape.suffix);
|
|
91
|
+
}
|
|
92
|
+
static from(data, logService) {
|
|
93
|
+
if (!isObject(data)) {
|
|
94
|
+
throw ( new Error(`Invalid tool set data`));
|
|
95
|
+
}
|
|
96
|
+
const map = ( new Map());
|
|
97
|
+
for (const [name, value] of Object.entries(data)) {
|
|
98
|
+
if (isFalsyOrWhitespace(name)) {
|
|
99
|
+
logService.error(`Tool set name cannot be empty`);
|
|
100
|
+
}
|
|
101
|
+
if (isFalsyOrEmpty(value.tools)) {
|
|
102
|
+
logService.error(`Tool set '${name}' cannot have an empty tools array`);
|
|
103
|
+
}
|
|
104
|
+
map.set(name, {
|
|
105
|
+
name,
|
|
106
|
+
tools: value.tools,
|
|
107
|
+
description: value.description,
|
|
108
|
+
icon: value.icon,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
return new class extends RawToolSetsShape {
|
|
112
|
+
}(map);
|
|
113
|
+
}
|
|
114
|
+
constructor(entries) {
|
|
115
|
+
this.entries = ( Object.freeze(( new Map(entries))));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
let UserToolSetsContributions = class UserToolSetsContributions extends Disposable {
|
|
119
|
+
static { this.ID = 'chat.userToolSets'; }
|
|
120
|
+
constructor(extensionService, lifecycleService, _languageModelToolsService, _userDataProfileService, _fileService, _logService) {
|
|
121
|
+
super();
|
|
122
|
+
this._languageModelToolsService = _languageModelToolsService;
|
|
123
|
+
this._userDataProfileService = _userDataProfileService;
|
|
124
|
+
this._fileService = _fileService;
|
|
125
|
+
this._logService = _logService;
|
|
126
|
+
Promise.allSettled([
|
|
127
|
+
extensionService.whenInstalledExtensionsRegistered,
|
|
128
|
+
lifecycleService.when(LifecyclePhase.Restored)
|
|
129
|
+
]).then(() => this._initToolSets());
|
|
130
|
+
const toolsObs = observableFromEvent(this, _languageModelToolsService.onDidChangeTools, () => Array.from(_languageModelToolsService.getTools()));
|
|
131
|
+
const store = this._store.add(( new DisposableStore()));
|
|
132
|
+
this._store.add(autorun(r => {
|
|
133
|
+
const tools = toolsObs.read(r);
|
|
134
|
+
const toolSets = this._languageModelToolsService.toolSets.read(r);
|
|
135
|
+
const data = [];
|
|
136
|
+
for (const tool of tools) {
|
|
137
|
+
if (tool.canBeReferencedInPrompt) {
|
|
138
|
+
data.push({
|
|
139
|
+
name: tool.toolReferenceName ?? tool.displayName,
|
|
140
|
+
sourceLabel: ToolDataSource.classify(tool.source).label,
|
|
141
|
+
sourceOrdinal: ToolDataSource.classify(tool.source).ordinal,
|
|
142
|
+
description: tool.userDescription ?? tool.modelDescription
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
for (const toolSet of toolSets) {
|
|
147
|
+
data.push({
|
|
148
|
+
name: toolSet.referenceName,
|
|
149
|
+
sourceLabel: ToolDataSource.classify(toolSet.source).label,
|
|
150
|
+
sourceOrdinal: ToolDataSource.classify(toolSet.source).ordinal,
|
|
151
|
+
description: toolSet.description
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
toolEnumValues.length = 0;
|
|
155
|
+
toolEnumDescriptions.length = 0;
|
|
156
|
+
data.sort((a, b) => {
|
|
157
|
+
if (a.sourceOrdinal !== b.sourceOrdinal) {
|
|
158
|
+
return a.sourceOrdinal - b.sourceOrdinal;
|
|
159
|
+
}
|
|
160
|
+
if (a.sourceLabel !== b.sourceLabel) {
|
|
161
|
+
return a.sourceLabel.localeCompare(b.sourceLabel);
|
|
162
|
+
}
|
|
163
|
+
return a.name.localeCompare(b.name);
|
|
164
|
+
});
|
|
165
|
+
for (const item of data) {
|
|
166
|
+
toolEnumValues.push(item.name);
|
|
167
|
+
toolEnumDescriptions.push(( localize(5084, "{1} ({0})\n\n{2}", item.sourceLabel, item.name, item.description)));
|
|
168
|
+
}
|
|
169
|
+
store.clear();
|
|
170
|
+
reg.registerSchema(toolSetSchemaId, toolSetsSchema, store);
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
_initToolSets() {
|
|
174
|
+
const promptFolder = observableFromEvent(this, this._userDataProfileService.onDidChangeCurrentProfile, () => this._userDataProfileService.currentProfile.promptsHome);
|
|
175
|
+
const toolsSig = observableSignalFromEvent(this, this._languageModelToolsService.onDidChangeTools);
|
|
176
|
+
const fileEventSig = observableSignalFromEvent(this, Event.filter(this._fileService.onDidFilesChange, e => e.affects(promptFolder.get())));
|
|
177
|
+
const store = this._store.add(( new DisposableStore()));
|
|
178
|
+
const getFilesInFolder = async (folder) => {
|
|
179
|
+
try {
|
|
180
|
+
return (await this._fileService.resolve(folder)).children ?? [];
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
return [];
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
this._store.add(autorun(async (r) => {
|
|
187
|
+
store.clear();
|
|
188
|
+
toolsSig.read(r);
|
|
189
|
+
fileEventSig.read(r);
|
|
190
|
+
const uri = promptFolder.read(r);
|
|
191
|
+
const cts = ( new CancellationTokenSource());
|
|
192
|
+
store.add(toDisposable(() => cts.dispose(true)));
|
|
193
|
+
const entries = await getFilesInFolder(uri);
|
|
194
|
+
if (cts.token.isCancellationRequested) {
|
|
195
|
+
store.clear();
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
for (const entry of entries) {
|
|
199
|
+
if (!entry.isFile || !RawToolSetsShape.isToolSetFileName(entry.resource)) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
store.add(this._fileService.watch(entry.resource));
|
|
203
|
+
let data;
|
|
204
|
+
try {
|
|
205
|
+
const content = await this._fileService.readFile(entry.resource, undefined, cts.token);
|
|
206
|
+
const rawObj = parse(( content.value.toString()));
|
|
207
|
+
data = RawToolSetsShape.from(rawObj, this._logService);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
this._logService.error(`Error reading tool set file ${( entry.resource.toString())}:`, err);
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (cts.token.isCancellationRequested) {
|
|
214
|
+
store.dispose();
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
for (const [name, value] of data.entries) {
|
|
218
|
+
const tools = [];
|
|
219
|
+
const toolSets = [];
|
|
220
|
+
value.tools.forEach(name => {
|
|
221
|
+
const tool = this._languageModelToolsService.getToolByName(name);
|
|
222
|
+
if (tool) {
|
|
223
|
+
tools.push(tool);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const toolSet = this._languageModelToolsService.getToolSetByName(name);
|
|
227
|
+
if (toolSet) {
|
|
228
|
+
toolSets.push(toolSet);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
if (tools.length === 0 && toolSets.length === 0) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const toolset = this._languageModelToolsService.createToolSet({ type: 'user', file: entry.resource, label: basename(entry.resource) }, `user/${( entry.resource.toString())}/${name}`, name, {
|
|
236
|
+
icon: value.icon ? ThemeIcon.fromId(value.icon) : undefined,
|
|
237
|
+
description: value.description
|
|
238
|
+
});
|
|
239
|
+
transaction(tx => {
|
|
240
|
+
store.add(toolset);
|
|
241
|
+
tools.forEach(tool => store.add(toolset.addTool(tool, tx)));
|
|
242
|
+
toolSets.forEach(toolSet => store.add(toolset.addToolSet(toolSet, tx)));
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}));
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
UserToolSetsContributions = ( __decorate([
|
|
250
|
+
( __param(0, IExtensionService)),
|
|
251
|
+
( __param(1, ILifecycleService)),
|
|
252
|
+
( __param(2, ILanguageModelToolsService)),
|
|
253
|
+
( __param(3, IUserDataProfileService)),
|
|
254
|
+
( __param(4, IFileService)),
|
|
255
|
+
( __param(5, ILogService))
|
|
256
|
+
], UserToolSetsContributions));
|
|
257
|
+
class ConfigureToolSets extends Action2 {
|
|
258
|
+
static { this.ID = 'chat.configureToolSets'; }
|
|
259
|
+
constructor() {
|
|
260
|
+
super({
|
|
261
|
+
id: ConfigureToolSets.ID,
|
|
262
|
+
title: ( localize2(5085, 'Configure Tool Sets')),
|
|
263
|
+
category: CHAT_CATEGORY,
|
|
264
|
+
f1: true,
|
|
265
|
+
precondition: ( ContextKeyExpr.and(ChatContextKeys.enabled, ChatContextKeys.Tools.toolsCount.greater(0))),
|
|
266
|
+
menu: {
|
|
267
|
+
id: MenuId.ViewTitle,
|
|
268
|
+
when: ( ContextKeyExpr.equals('view', ChatViewId)),
|
|
269
|
+
order: 11,
|
|
270
|
+
group: '2_manage'
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
async run(accessor) {
|
|
275
|
+
const toolsService = accessor.get(ILanguageModelToolsService);
|
|
276
|
+
const quickInputService = accessor.get(IQuickInputService);
|
|
277
|
+
const editorService = accessor.get(IEditorService);
|
|
278
|
+
const userDataProfileService = accessor.get(IUserDataProfileService);
|
|
279
|
+
const fileService = accessor.get(IFileService);
|
|
280
|
+
const textFileService = accessor.get(ITextFileService);
|
|
281
|
+
const picks = [];
|
|
282
|
+
picks.push({
|
|
283
|
+
label: ( localize(5086, 'Create new tool sets file...')),
|
|
284
|
+
alwaysShow: true,
|
|
285
|
+
iconClass: ThemeIcon.asClassName(Codicon.plus)
|
|
286
|
+
});
|
|
287
|
+
for (const toolSet of toolsService.toolSets.get()) {
|
|
288
|
+
if (toolSet.source.type !== 'user') {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
picks.push({
|
|
292
|
+
label: toolSet.referenceName,
|
|
293
|
+
toolset: toolSet,
|
|
294
|
+
tooltip: toolSet.description,
|
|
295
|
+
iconClass: ThemeIcon.asClassName(toolSet.icon)
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
const pick = await quickInputService.pick(picks, {
|
|
299
|
+
canPickMany: false,
|
|
300
|
+
placeHolder: ( localize(5087, 'Select a tool set to configure')),
|
|
301
|
+
});
|
|
302
|
+
if (!pick) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
let resource;
|
|
306
|
+
if (!pick.toolset) {
|
|
307
|
+
const name = await quickInputService.input({
|
|
308
|
+
placeHolder: ( localize(5088, "Type tool sets file name")),
|
|
309
|
+
validateInput: async (input) => {
|
|
310
|
+
if (!input) {
|
|
311
|
+
return localize(5089, "Invalid file name");
|
|
312
|
+
}
|
|
313
|
+
if (!isValidBasename(input)) {
|
|
314
|
+
return localize(5090, "'{0}' is not a valid file name", input);
|
|
315
|
+
}
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
if (isFalsyOrWhitespace(name)) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
resource = joinPath(userDataProfileService.currentProfile.promptsHome, `${name}${RawToolSetsShape.suffix}`);
|
|
323
|
+
if (!(await fileService.exists(resource))) {
|
|
324
|
+
await textFileService.write(resource, [
|
|
325
|
+
'// Place your tool sets here...',
|
|
326
|
+
'// Example:',
|
|
327
|
+
'// {',
|
|
328
|
+
'// \t"toolSetName": {',
|
|
329
|
+
'// \t\t"tools": [',
|
|
330
|
+
'// \t\t\t"someTool",',
|
|
331
|
+
'// \t\t\t"anotherTool"',
|
|
332
|
+
'// \t\t],',
|
|
333
|
+
'// \t\t"description": "description",',
|
|
334
|
+
'// \t\t"icon": "tools"',
|
|
335
|
+
'// \t}',
|
|
336
|
+
'// }',
|
|
337
|
+
].join('\n'));
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
assertType(pick.toolset.source.type === 'user');
|
|
342
|
+
resource = pick.toolset.source.file;
|
|
343
|
+
}
|
|
344
|
+
await editorService.openEditor({ resource, options: { pinned: true } });
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export { ConfigureToolSets, UserToolSetsContributions };
|
package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js
CHANGED
|
@@ -13,7 +13,7 @@ import { ChatViewsWelcomeExtensions } from '@codingame/monaco-vscode-c465110a-57
|
|
|
13
13
|
const chatViewsWelcomeExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
14
14
|
extensionPoint: 'chatViewsWelcome',
|
|
15
15
|
jsonSchema: {
|
|
16
|
-
description: ( localize(
|
|
16
|
+
description: ( localize(5092, 'Contributes a welcome message to a chat view')),
|
|
17
17
|
type: 'array',
|
|
18
18
|
items: {
|
|
19
19
|
additionalProperties: false,
|
|
@@ -21,22 +21,22 @@ const chatViewsWelcomeExtensionPoint = ExtensionsRegistry.registerExtensionPoint
|
|
|
21
21
|
properties: {
|
|
22
22
|
icon: {
|
|
23
23
|
type: 'string',
|
|
24
|
-
description: ( localize(
|
|
24
|
+
description: ( localize(5093, 'The icon for the welcome message.')),
|
|
25
25
|
},
|
|
26
26
|
title: {
|
|
27
27
|
type: 'string',
|
|
28
|
-
description: ( localize(
|
|
28
|
+
description: ( localize(5094, 'The title of the welcome message.')),
|
|
29
29
|
},
|
|
30
30
|
content: {
|
|
31
31
|
type: 'string',
|
|
32
32
|
description: ( localize(
|
|
33
|
-
|
|
33
|
+
5095,
|
|
34
34
|
'The content of the welcome message. The first command link will be rendered as a button.'
|
|
35
35
|
)),
|
|
36
36
|
},
|
|
37
37
|
when: {
|
|
38
38
|
type: 'string',
|
|
39
|
-
description: ( localize(
|
|
39
|
+
description: ( localize(5096, 'Condition when the welcome message is shown.')),
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
},
|
package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DeferredPromise } from "@codingame/monaco-vscode-api/vscode/vs/base/common/async";
|
|
2
2
|
import { IMarkdownString } from "@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent";
|
|
3
|
-
import { IChatTerminalToolInvocationData, IChatToolInputInvocationData, IChatToolInvocation, IChatToolInvocationSerialized } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService";
|
|
3
|
+
import { IChatExtensionsContent, IChatTerminalToolInvocationData, IChatToolInputInvocationData, IChatToolInvocation, IChatToolInvocationSerialized } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService";
|
|
4
4
|
import { IPreparedToolInvocation, IToolConfirmationMessages, IToolData, IToolProgressStep, IToolResult } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService";
|
|
5
5
|
export declare class ChatToolInvocation implements IChatToolInvocation {
|
|
6
6
|
readonly toolCallId: string;
|
|
@@ -21,7 +21,7 @@ export declare class ChatToolInvocation implements IChatToolInvocation {
|
|
|
21
21
|
private _confirmationMessages;
|
|
22
22
|
readonly presentation: IPreparedToolInvocation["presentation"];
|
|
23
23
|
readonly toolId: string;
|
|
24
|
-
readonly toolSpecificData?: IChatTerminalToolInvocationData | IChatToolInputInvocationData;
|
|
24
|
+
readonly toolSpecificData?: IChatTerminalToolInvocationData | IChatToolInputInvocationData | IChatExtensionsContent;
|
|
25
25
|
readonly progress: import("@codingame/monaco-vscode-api/vscode/vs/base/common/observable").ISettableObservable<{
|
|
26
26
|
message?: string | IMarkdownString;
|
|
27
27
|
progress: number;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { DeferredPromise } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
3
3
|
import '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/index';
|
|
4
4
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
5
|
-
import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/
|
|
5
|
+
import { observableValue } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableValue';
|
|
6
6
|
|
|
7
7
|
class ChatToolInvocation {
|
|
8
8
|
get isComplete() {
|
|
@@ -27,7 +27,7 @@ class ChatToolInvocation {
|
|
|
27
27
|
this._isCompleteDeferred = ( new DeferredPromise());
|
|
28
28
|
this._confirmDeferred = ( new DeferredPromise());
|
|
29
29
|
this.progress = observableValue(this, { progress: 0 });
|
|
30
|
-
const defaultMessage = ( localize(
|
|
30
|
+
const defaultMessage = ( localize(5161, "Using {0}", `"${toolData.displayName}"`));
|
|
31
31
|
const invocationMessage = preparedInvocation?.invocationMessage ?? defaultMessage;
|
|
32
32
|
this.invocationMessage = invocationMessage;
|
|
33
33
|
this.pastTenseMessage = preparedInvocation?.pastTenseMessage;
|
package/vscode/src/vs/workbench/contrib/chat/common/chatResponseResourceFileSystemProvider.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Event } from "@codingame/monaco-vscode-api/vscode/vs/base/common/event";
|
|
2
|
+
import { Disposable, IDisposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
3
|
+
import { ReadableStreamEvents } from "@codingame/monaco-vscode-api/vscode/vs/base/common/stream";
|
|
4
|
+
import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
|
|
5
|
+
import { FileSystemProviderCapabilities, FileType, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IStat } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files";
|
|
6
|
+
import { IFileService } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service";
|
|
7
|
+
import { IWorkbenchContribution } from "@codingame/monaco-vscode-api/vscode/vs/workbench/common/contributions";
|
|
8
|
+
import { IChatService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService.service";
|
|
9
|
+
export declare class ChatResponseResourceFileSystemProvider extends Disposable implements IWorkbenchContribution, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileReadStreamCapability {
|
|
10
|
+
private readonly chatService;
|
|
11
|
+
private readonly _fileService;
|
|
12
|
+
static readonly ID = "workbench.contrib.chatResponseResourceFileSystemProvider";
|
|
13
|
+
readonly onDidChangeCapabilities: Event<any>;
|
|
14
|
+
readonly onDidChangeFile: Event<any>;
|
|
15
|
+
readonly capabilities: FileSystemProviderCapabilities;
|
|
16
|
+
constructor(chatService: IChatService, _fileService: IFileService);
|
|
17
|
+
readFile(resource: URI): Promise<Uint8Array>;
|
|
18
|
+
readFileStream(resource: URI): ReadableStreamEvents<Uint8Array>;
|
|
19
|
+
stat(resource: URI): Promise<IStat>;
|
|
20
|
+
delete(): Promise<void>;
|
|
21
|
+
watch(): IDisposable;
|
|
22
|
+
mkdir(): Promise<void>;
|
|
23
|
+
readdir(): Promise<[
|
|
24
|
+
string,
|
|
25
|
+
FileType
|
|
26
|
+
][]>;
|
|
27
|
+
rename(): Promise<void>;
|
|
28
|
+
writeFile(): Promise<void>;
|
|
29
|
+
private lookupURI;
|
|
30
|
+
}
|