@codingame/monaco-vscode-xterm-addons-common 24.2.0 → 25.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 +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.js +17 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js +21 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatPasteProviders.js → widget/input/editor/chatPasteProviders.js} +9 -9
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/decorationAddon.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/decorationAddon.js +17 -17
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/markNavigationAddon.js +0 -3
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.js +23 -5
- /package/vscode/src/vs/workbench/contrib/chat/browser/{chatPasteProviders.d.ts → widget/input/editor/chatPasteProviders.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-xterm-addons-common",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "25.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - common package depending on xterm addons",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "
|
|
19
|
-
"@xterm/addon-clipboard": "0.
|
|
20
|
-
"@xterm/addon-image": "0.
|
|
21
|
-
"@xterm/addon-ligatures": "0.
|
|
22
|
-
"@xterm/addon-progress": "0.
|
|
23
|
-
"@xterm/addon-search": "0.
|
|
24
|
-
"@xterm/addon-serialize": "0.
|
|
25
|
-
"@xterm/addon-unicode11": "0.
|
|
26
|
-
"@xterm/addon-webgl": "0.
|
|
18
|
+
"@codingame/monaco-vscode-api": "25.0.0",
|
|
19
|
+
"@xterm/addon-clipboard": "0.3.0-beta.97",
|
|
20
|
+
"@xterm/addon-image": "0.10.0-beta.97",
|
|
21
|
+
"@xterm/addon-ligatures": "0.11.0-beta.97",
|
|
22
|
+
"@xterm/addon-progress": "0.3.0-beta.97",
|
|
23
|
+
"@xterm/addon-search": "0.17.0-beta.97",
|
|
24
|
+
"@xterm/addon-serialize": "0.15.0-beta.97",
|
|
25
|
+
"@xterm/addon-unicode11": "0.10.0-beta.97",
|
|
26
|
+
"@xterm/addon-webgl": "0.20.0-beta.96"
|
|
27
27
|
},
|
|
28
28
|
"exports": {
|
|
29
29
|
".": {
|
|
@@ -2,9 +2,9 @@ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/l
|
|
|
2
2
|
import { ThemeIcon } from "@codingame/monaco-vscode-api/vscode/vs/base/common/themables";
|
|
3
3
|
import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
|
|
4
4
|
import { IWorkbenchContribution } from "@codingame/monaco-vscode-api/vscode/vs/workbench/common/contributions";
|
|
5
|
-
import { IChatContextValueItem } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatContextPickService";
|
|
6
|
-
import { IChatContextPickService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatContextPickService.service";
|
|
7
|
-
import { IChatRequestVariableEntry } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatVariableEntries";
|
|
5
|
+
import { IChatContextValueItem } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/attachments/chatContextPickService";
|
|
6
|
+
import { IChatContextPickService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/attachments/chatContextPickService.service";
|
|
7
|
+
import { IChatRequestVariableEntry } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariableEntries";
|
|
8
8
|
import { IChatWidget } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat";
|
|
9
9
|
import { ITerminalService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service";
|
|
10
10
|
import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
|
|
@@ -16,16 +16,16 @@ import { IHostService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/s
|
|
|
16
16
|
import { UntitledTextEditorInput } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/untitled/common/untitledTextEditorInput';
|
|
17
17
|
import { FileEditorInput } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/files/browser/editors/fileEditorInput';
|
|
18
18
|
import { NotebookEditorInput } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/notebook/common/notebookEditorInput';
|
|
19
|
-
import { IChatContextPickService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatContextPickService.service';
|
|
20
|
-
import { IChatEditingService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatEditingService.service';
|
|
21
|
-
import { toToolSetVariableEntry, toToolVariableEntry, OmittedState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatVariableEntries';
|
|
22
|
-
import { ToolSet, ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
|
|
23
|
-
import { isImage } from '../chatPasteProviders.js';
|
|
24
|
-
import { convertBufferToScreenshotVariable } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/
|
|
25
|
-
import { imageToHash } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/imageUtils';
|
|
19
|
+
import { IChatContextPickService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/attachments/chatContextPickService.service';
|
|
20
|
+
import { IChatEditingService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/editing/chatEditingService.service';
|
|
21
|
+
import { toToolSetVariableEntry, toToolVariableEntry, OmittedState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariableEntries';
|
|
22
|
+
import { ToolSet, ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsService';
|
|
23
|
+
import { isImage } from '../widget/input/editor/chatPasteProviders.js';
|
|
24
|
+
import { convertBufferToScreenshotVariable } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/attachments/chatScreenshotContext';
|
|
26
25
|
import { ChatInstructionsPickerPick } from '../promptSyntax/attachInstructionsAction.js';
|
|
27
26
|
import { ITerminalService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service';
|
|
28
27
|
import { TerminalCapability } from '@codingame/monaco-vscode-api/vscode/vs/platform/terminal/common/capabilities/capabilities';
|
|
28
|
+
import { imageToHash } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatImageUtils';
|
|
29
29
|
|
|
30
30
|
let ChatContextContributions = class ChatContextContributions extends Disposable {
|
|
31
31
|
static { this.ID = 'chat.contextContributions'; }
|
|
@@ -46,7 +46,7 @@ ChatContextContributions = ( __decorate([
|
|
|
46
46
|
class ToolsContextPickerPick {
|
|
47
47
|
constructor() {
|
|
48
48
|
this.type = 'pickerPick';
|
|
49
|
-
this.label = ( localize(
|
|
49
|
+
this.label = ( localize(4707, 'Tools...'));
|
|
50
50
|
this.icon = Codicon.tools;
|
|
51
51
|
this.ordinal = -500;
|
|
52
52
|
}
|
|
@@ -95,7 +95,7 @@ class ToolsContextPickerPick {
|
|
|
95
95
|
picks.push(item);
|
|
96
96
|
}
|
|
97
97
|
return {
|
|
98
|
-
placeholder: ( localize(
|
|
98
|
+
placeholder: ( localize(4708, 'Select a tool')),
|
|
99
99
|
picks: Promise.resolve(picks)
|
|
100
100
|
};
|
|
101
101
|
}
|
|
@@ -105,7 +105,7 @@ let OpenEditorContextValuePick = class OpenEditorContextValuePick {
|
|
|
105
105
|
this._editorService = _editorService;
|
|
106
106
|
this._labelService = _labelService;
|
|
107
107
|
this.type = 'valuePick';
|
|
108
|
-
this.label = ( localize(
|
|
108
|
+
this.label = ( localize(4709, 'Open Editors'));
|
|
109
109
|
this.icon = Codicon.file;
|
|
110
110
|
this.ordinal = 800;
|
|
111
111
|
}
|
|
@@ -141,7 +141,7 @@ let RelatedFilesContextPickerPick = class RelatedFilesContextPickerPick {
|
|
|
141
141
|
this._chatEditingService = _chatEditingService;
|
|
142
142
|
this._labelService = _labelService;
|
|
143
143
|
this.type = 'pickerPick';
|
|
144
|
-
this.label = ( localize(
|
|
144
|
+
this.label = ( localize(4710, 'Related Files'));
|
|
145
145
|
this.icon = Codicon.sparkle;
|
|
146
146
|
this.ordinal = 300;
|
|
147
147
|
}
|
|
@@ -183,7 +183,7 @@ let RelatedFilesContextPickerPick = class RelatedFilesContextPickerPick {
|
|
|
183
183
|
}, []));
|
|
184
184
|
})();
|
|
185
185
|
return {
|
|
186
|
-
placeholder: ( localize(
|
|
186
|
+
placeholder: ( localize(4711, 'Add related files to your working set')),
|
|
187
187
|
picks,
|
|
188
188
|
};
|
|
189
189
|
}
|
|
@@ -196,7 +196,7 @@ let ClipboardImageContextValuePick = class ClipboardImageContextValuePick {
|
|
|
196
196
|
constructor(_clipboardService) {
|
|
197
197
|
this._clipboardService = _clipboardService;
|
|
198
198
|
this.type = 'valuePick';
|
|
199
|
-
this.label = ( localize(
|
|
199
|
+
this.label = ( localize(4712, 'Image from Clipboard'));
|
|
200
200
|
this.icon = Codicon.fileMedia;
|
|
201
201
|
}
|
|
202
202
|
async isEnabled(widget) {
|
|
@@ -213,8 +213,8 @@ let ClipboardImageContextValuePick = class ClipboardImageContextValuePick {
|
|
|
213
213
|
const fileBuffer = await this._clipboardService.readImage();
|
|
214
214
|
return {
|
|
215
215
|
id: await imageToHash(fileBuffer),
|
|
216
|
-
name: ( localize(
|
|
217
|
-
fullName: ( localize(
|
|
216
|
+
name: ( localize(4713, 'Pasted Image')),
|
|
217
|
+
fullName: ( localize(4713, 'Pasted Image')),
|
|
218
218
|
value: fileBuffer,
|
|
219
219
|
kind: 'image',
|
|
220
220
|
};
|
|
@@ -229,7 +229,7 @@ let TerminalContext = class TerminalContext {
|
|
|
229
229
|
this._terminalService = _terminalService;
|
|
230
230
|
this.type = 'valuePick';
|
|
231
231
|
this.icon = Codicon.terminal;
|
|
232
|
-
this.label = ( localize(
|
|
232
|
+
this.label = ( localize(4714, 'Terminal'));
|
|
233
233
|
}
|
|
234
234
|
isEnabled(widget) {
|
|
235
235
|
const terminal = this._terminalService.getInstanceFromResource(this._resource);
|
|
@@ -297,8 +297,8 @@ let ScreenshotContextValuePick = class ScreenshotContextValuePick {
|
|
|
297
297
|
this.type = 'valuePick';
|
|
298
298
|
this.icon = Codicon.deviceCamera;
|
|
299
299
|
this.label = (isElectron
|
|
300
|
-
? ( localize(
|
|
301
|
-
: ( localize(
|
|
300
|
+
? ( localize(4715, 'Screenshot Window'))
|
|
301
|
+
: ( localize(4716, 'Screenshot')));
|
|
302
302
|
}
|
|
303
303
|
async isEnabled(widget) {
|
|
304
304
|
return !!widget.attachmentCapabilities.supportsImageAttachments && !!widget.input.selectedLanguageModel?.metadata.capabilities?.vision;
|
package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IChatWidget } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat";
|
|
2
2
|
import { IPromptsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.service";
|
|
3
|
-
import { IChatContextPickerItem, IChatContextPicker } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatContextPickService";
|
|
3
|
+
import { IChatContextPickerItem, IChatContextPicker } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/attachments/chatContextPickService";
|
|
4
4
|
/**
|
|
5
5
|
* Helper to register the `Attach Prompt` action.
|
|
6
6
|
*/
|
package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.js
CHANGED
|
@@ -3,7 +3,7 @@ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib
|
|
|
3
3
|
import { ChatViewId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat';
|
|
4
4
|
import { CHAT_CONFIG_MENU_ID, CHAT_CATEGORY } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/actions/chatActions';
|
|
5
5
|
import { localize2, localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
6
|
-
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatContextKeys';
|
|
6
|
+
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/actions/chatContextKeys';
|
|
7
7
|
import { IPromptsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/service/promptsService.service';
|
|
8
8
|
import { PromptFilePickers } from './pickers/promptFilePickers.js';
|
|
9
9
|
import { Action2, registerAction2 } from '@codingame/monaco-vscode-api/vscode/vs/platform/actions/common/actions';
|
|
@@ -13,7 +13,7 @@ import { getCleanPromptName } from '@codingame/monaco-vscode-api/vscode/vs/workb
|
|
|
13
13
|
import { ContextKeyExpr } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
14
14
|
import { PromptsType } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/promptSyntax/promptTypes';
|
|
15
15
|
import { compare } from '@codingame/monaco-vscode-api/vscode/vs/base/common/strings';
|
|
16
|
-
import { toPromptFileVariableEntry, PromptFileVariableKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatVariableEntries';
|
|
16
|
+
import { toPromptFileVariableEntry, PromptFileVariableKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariableEntries';
|
|
17
17
|
import { CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
|
|
18
18
|
import { IOpenerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/opener/common/opener.service';
|
|
19
19
|
|
|
@@ -23,8 +23,8 @@ class ManageInstructionsFilesAction extends Action2 {
|
|
|
23
23
|
constructor() {
|
|
24
24
|
super({
|
|
25
25
|
id: CONFIGURE_INSTRUCTIONS_ACTION_ID,
|
|
26
|
-
title: ( localize2(
|
|
27
|
-
shortTitle: ( localize2(
|
|
26
|
+
title: ( localize2(5452, "Configure Instructions...")),
|
|
27
|
+
shortTitle: ( localize2(5453, "Chat Instructions")),
|
|
28
28
|
icon: Codicon.bookmark,
|
|
29
29
|
f1: true,
|
|
30
30
|
precondition: ChatContextKeys.enabled,
|
|
@@ -41,7 +41,7 @@ class ManageInstructionsFilesAction extends Action2 {
|
|
|
41
41
|
const openerService = accessor.get(IOpenerService);
|
|
42
42
|
const instaService = accessor.get(IInstantiationService);
|
|
43
43
|
const pickers = instaService.createInstance(PromptFilePickers);
|
|
44
|
-
const placeholder = ( localize(
|
|
44
|
+
const placeholder = ( localize(5454, 'Select the instructions file to open'));
|
|
45
45
|
const result = await pickers.selectPromptFile({ placeholder, type: PromptsType.instructions, optionEdit: false });
|
|
46
46
|
if (result !== undefined) {
|
|
47
47
|
await openerService.open(result.promptFile);
|
|
@@ -55,7 +55,7 @@ let ChatInstructionsPickerPick = class ChatInstructionsPickerPick {
|
|
|
55
55
|
constructor(promptsService) {
|
|
56
56
|
this.promptsService = promptsService;
|
|
57
57
|
this.type = 'pickerPick';
|
|
58
|
-
this.label = ( localize(
|
|
58
|
+
this.label = ( localize(5455, 'Instructions...'));
|
|
59
59
|
this.icon = Codicon.bookmark;
|
|
60
60
|
this.commandId = ATTACH_INSTRUCTIONS_ACTION_ID;
|
|
61
61
|
}
|
|
@@ -85,10 +85,10 @@ let ChatInstructionsPickerPick = class ChatInstructionsPickerPick {
|
|
|
85
85
|
return result;
|
|
86
86
|
});
|
|
87
87
|
return {
|
|
88
|
-
placeholder: ( localize(
|
|
88
|
+
placeholder: ( localize(5456, 'Select instructions files to attach')),
|
|
89
89
|
picks,
|
|
90
90
|
configure: {
|
|
91
|
-
label: ( localize(
|
|
91
|
+
label: ( localize(5457, 'Configure Instructions...')),
|
|
92
92
|
commandId: CONFIGURE_INSTRUCTIONS_ACTION_ID
|
|
93
93
|
}
|
|
94
94
|
};
|
|
@@ -18,7 +18,7 @@ import { SyncResource } from '@codingame/monaco-vscode-api/vscode/vs/platform/us
|
|
|
18
18
|
import { IUserDataSyncEnablementService } from '@codingame/monaco-vscode-api/vscode/vs/platform/userDataSync/common/userDataSync.service';
|
|
19
19
|
import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
20
20
|
import { CONFIGURE_SYNC_COMMAND_ID } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/userDataSync/common/userDataSync';
|
|
21
|
-
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatContextKeys';
|
|
21
|
+
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/actions/chatContextKeys';
|
|
22
22
|
import { CHAT_CATEGORY } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/actions/chatActions';
|
|
23
23
|
import { askForPromptFileName } from './pickers/askForPromptName.js';
|
|
24
24
|
import { askForPromptSourceFolder } from './pickers/askForPromptSourceFolder.js';
|
|
@@ -82,11 +82,11 @@ class AbstractNewPromptFileAction extends Action2 {
|
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
notificationService.prompt(Severity.Info, ( localize(
|
|
85
|
-
|
|
85
|
+
5463,
|
|
86
86
|
"Do you want to backup and sync your user prompt, instruction and custom agent files with Setting Sync?'"
|
|
87
87
|
)), [
|
|
88
88
|
{
|
|
89
|
-
label: ( localize(
|
|
89
|
+
label: ( localize(5464, "Enable")),
|
|
90
90
|
run: () => {
|
|
91
91
|
commandService.executeCommand(CONFIGURE_SYNC_COMMAND_ID)
|
|
92
92
|
.catch((error) => {
|
|
@@ -95,7 +95,7 @@ class AbstractNewPromptFileAction extends Action2 {
|
|
|
95
95
|
},
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
|
-
label: ( localize(
|
|
98
|
+
label: ( localize(5465, "Learn More")),
|
|
99
99
|
run: () => {
|
|
100
100
|
openerService.open(( URI.parse('https://aka.ms/vscode-settings-sync-help')));
|
|
101
101
|
},
|
|
@@ -143,24 +143,24 @@ const NEW_INSTRUCTIONS_COMMAND_ID = 'workbench.command.new.instructions';
|
|
|
143
143
|
const NEW_AGENT_COMMAND_ID = 'workbench.command.new.agent';
|
|
144
144
|
class NewPromptFileAction extends AbstractNewPromptFileAction {
|
|
145
145
|
constructor() {
|
|
146
|
-
super(NEW_PROMPT_COMMAND_ID, ( localize(
|
|
146
|
+
super(NEW_PROMPT_COMMAND_ID, ( localize(5466, "New Prompt File...")), PromptsType.prompt);
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
class NewInstructionsFileAction extends AbstractNewPromptFileAction {
|
|
150
150
|
constructor() {
|
|
151
|
-
super(NEW_INSTRUCTIONS_COMMAND_ID, ( localize(
|
|
151
|
+
super(NEW_INSTRUCTIONS_COMMAND_ID, ( localize(5467, "New Instructions File...")), PromptsType.instructions);
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
class NewAgentFileAction extends AbstractNewPromptFileAction {
|
|
155
155
|
constructor() {
|
|
156
|
-
super(NEW_AGENT_COMMAND_ID, ( localize(
|
|
156
|
+
super(NEW_AGENT_COMMAND_ID, ( localize(5468, "New Custom Agent...")), PromptsType.agent);
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
class NewUntitledPromptFileAction extends Action2 {
|
|
160
160
|
constructor() {
|
|
161
161
|
super({
|
|
162
162
|
id: 'workbench.command.new.untitled.prompt',
|
|
163
|
-
title: ( localize2(
|
|
163
|
+
title: ( localize2(5469, "New Untitled Prompt File")),
|
|
164
164
|
f1: true,
|
|
165
165
|
precondition: ChatContextKeys.enabled,
|
|
166
166
|
category: CHAT_CATEGORY,
|
package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.js
CHANGED
|
@@ -25,20 +25,20 @@ async function askForPromptFileName(accessor, type, selectedFolder, existingFile
|
|
|
25
25
|
const fileName = sanitizeInput(value);
|
|
26
26
|
if (!fileName) {
|
|
27
27
|
return {
|
|
28
|
-
content: ( localize(
|
|
28
|
+
content: ( localize(5470, "Please enter a name.")),
|
|
29
29
|
severity: Severity.Warning
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
if (!isValidBasename(fileName)) {
|
|
33
33
|
return {
|
|
34
|
-
content: ( localize(
|
|
34
|
+
content: ( localize(5471, "The name contains invalid characters.")),
|
|
35
35
|
severity: Severity.Error
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
const fileUri = URI.joinPath(selectedFolder, fileName);
|
|
39
39
|
if (await fileService.exists(fileUri)) {
|
|
40
40
|
return {
|
|
41
|
-
content: ( localize(
|
|
41
|
+
content: ( localize(5472, "A file for the given name already exists.")),
|
|
42
42
|
severity: Severity.Error
|
|
43
43
|
};
|
|
44
44
|
}
|
|
@@ -54,11 +54,11 @@ async function askForPromptFileName(accessor, type, selectedFolder, existingFile
|
|
|
54
54
|
function getPlaceholderStringForNew(type) {
|
|
55
55
|
switch (type) {
|
|
56
56
|
case PromptsType.instructions:
|
|
57
|
-
return localize(
|
|
57
|
+
return localize(5473, "Enter the name of the instructions file");
|
|
58
58
|
case PromptsType.prompt:
|
|
59
|
-
return localize(
|
|
59
|
+
return localize(5474, "Enter the name of the prompt file");
|
|
60
60
|
case PromptsType.agent:
|
|
61
|
-
return localize(
|
|
61
|
+
return localize(5475, "Enter the name of the agent file");
|
|
62
62
|
default:
|
|
63
63
|
throw ( new Error('Unknown prompt type'));
|
|
64
64
|
}
|
|
@@ -66,11 +66,11 @@ function getPlaceholderStringForNew(type) {
|
|
|
66
66
|
function getPlaceholderStringForRename(type) {
|
|
67
67
|
switch (type) {
|
|
68
68
|
case PromptsType.instructions:
|
|
69
|
-
return localize(
|
|
69
|
+
return localize(5476, "Enter a new name of the instructions file");
|
|
70
70
|
case PromptsType.prompt:
|
|
71
|
-
return localize(
|
|
71
|
+
return localize(5477, "Enter a new name of the prompt file");
|
|
72
72
|
case PromptsType.agent:
|
|
73
|
-
return localize(
|
|
73
|
+
return localize(5478, "Enter a new name of the agent file");
|
|
74
74
|
default:
|
|
75
75
|
throw ( new Error('Unknown prompt type'));
|
|
76
76
|
}
|
|
@@ -27,7 +27,7 @@ async function askForPromptSourceFolder(accessor, type, existingFolder, isMove =
|
|
|
27
27
|
};
|
|
28
28
|
const foldersList = ( folders.map(folder => {
|
|
29
29
|
const uri = folder.uri;
|
|
30
|
-
const detail = (existingFolder && isEqual(uri, existingFolder)) ? ( localize(
|
|
30
|
+
const detail = (existingFolder && isEqual(uri, existingFolder)) ? ( localize(5479, "Current Location")) : undefined;
|
|
31
31
|
if (folder.storage !== PromptsStorage.local) {
|
|
32
32
|
return {
|
|
33
33
|
type: 'item',
|
|
@@ -51,7 +51,7 @@ async function askForPromptSourceFolder(accessor, type, existingFolder, isMove =
|
|
|
51
51
|
}
|
|
52
52
|
return {
|
|
53
53
|
type: 'item',
|
|
54
|
-
label: ( localize(
|
|
54
|
+
label: ( localize(5480, "Current Workspace")),
|
|
55
55
|
detail,
|
|
56
56
|
tooltip: labelService.getUriLabel(uri),
|
|
57
57
|
folder,
|
|
@@ -66,11 +66,11 @@ async function askForPromptSourceFolder(accessor, type, existingFolder, isMove =
|
|
|
66
66
|
function getPlaceholderStringforNew(type) {
|
|
67
67
|
switch (type) {
|
|
68
68
|
case PromptsType.instructions:
|
|
69
|
-
return localize(
|
|
69
|
+
return localize(5481, "Select a location to create the instructions file");
|
|
70
70
|
case PromptsType.prompt:
|
|
71
|
-
return localize(
|
|
71
|
+
return localize(5482, "Select a location to create the prompt file");
|
|
72
72
|
case PromptsType.agent:
|
|
73
|
-
return localize(
|
|
73
|
+
return localize(5483, "Select a location to create the agent file");
|
|
74
74
|
default:
|
|
75
75
|
throw ( new Error('Unknown prompt type'));
|
|
76
76
|
}
|
|
@@ -79,22 +79,22 @@ function getPlaceholderStringforMove(type, isMove) {
|
|
|
79
79
|
if (isMove) {
|
|
80
80
|
switch (type) {
|
|
81
81
|
case PromptsType.instructions:
|
|
82
|
-
return localize(
|
|
82
|
+
return localize(5484, "Select a location to move the instructions file to");
|
|
83
83
|
case PromptsType.prompt:
|
|
84
|
-
return localize(
|
|
84
|
+
return localize(5485, "Select a location to move the prompt file to");
|
|
85
85
|
case PromptsType.agent:
|
|
86
|
-
return localize(
|
|
86
|
+
return localize(5486, "Select a location to move the agent file to");
|
|
87
87
|
default:
|
|
88
88
|
throw ( new Error('Unknown prompt type'));
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
switch (type) {
|
|
92
92
|
case PromptsType.instructions:
|
|
93
|
-
return localize(
|
|
93
|
+
return localize(5487, "Select a location to copy the instructions file to");
|
|
94
94
|
case PromptsType.prompt:
|
|
95
|
-
return localize(
|
|
95
|
+
return localize(5488, "Select a location to copy the prompt file to");
|
|
96
96
|
case PromptsType.agent:
|
|
97
|
-
return localize(
|
|
97
|
+
return localize(5489, "Select a location to copy the agent file to");
|
|
98
98
|
default:
|
|
99
99
|
throw ( new Error('Unknown prompt type'));
|
|
100
100
|
}
|
|
@@ -120,11 +120,11 @@ async function showNoFoldersDialog(accessor, type) {
|
|
|
120
120
|
function getLearnLabel(type) {
|
|
121
121
|
switch (type) {
|
|
122
122
|
case PromptsType.prompt:
|
|
123
|
-
return localize(
|
|
123
|
+
return localize(5490, 'Learn how to configure reusable prompts');
|
|
124
124
|
case PromptsType.instructions:
|
|
125
|
-
return localize(
|
|
125
|
+
return localize(5491, 'Learn how to configure reusable instructions');
|
|
126
126
|
case PromptsType.agent:
|
|
127
|
-
return localize(
|
|
127
|
+
return localize(5492, 'Learn how to configure custom agents');
|
|
128
128
|
default:
|
|
129
129
|
throw ( new Error('Unknown prompt type'));
|
|
130
130
|
}
|
|
@@ -132,11 +132,11 @@ function getLearnLabel(type) {
|
|
|
132
132
|
function getMissingSourceFolderString(type) {
|
|
133
133
|
switch (type) {
|
|
134
134
|
case PromptsType.instructions:
|
|
135
|
-
return localize(
|
|
135
|
+
return localize(5493, 'No instruction source folders found.');
|
|
136
136
|
case PromptsType.prompt:
|
|
137
|
-
return localize(
|
|
137
|
+
return localize(5494, 'No prompt source folders found.');
|
|
138
138
|
case PromptsType.agent:
|
|
139
|
-
return localize(
|
|
139
|
+
return localize(5495, 'No agent source folders found.');
|
|
140
140
|
default:
|
|
141
141
|
throw ( new Error('Unknown prompt type'));
|
|
142
142
|
}
|
package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js
CHANGED
|
@@ -30,19 +30,19 @@ function newHelpButton(type) {
|
|
|
30
30
|
switch (type) {
|
|
31
31
|
case PromptsType.prompt:
|
|
32
32
|
return {
|
|
33
|
-
tooltip: ( localize(
|
|
33
|
+
tooltip: ( localize(5496, "Show help on prompt files")),
|
|
34
34
|
helpURI: ( URI.parse(PROMPT_DOCUMENTATION_URL)),
|
|
35
35
|
iconClass
|
|
36
36
|
};
|
|
37
37
|
case PromptsType.instructions:
|
|
38
38
|
return {
|
|
39
|
-
tooltip: ( localize(
|
|
39
|
+
tooltip: ( localize(5497, "Show help on instruction files")),
|
|
40
40
|
helpURI: ( URI.parse(INSTRUCTIONS_DOCUMENTATION_URL)),
|
|
41
41
|
iconClass
|
|
42
42
|
};
|
|
43
43
|
case PromptsType.agent:
|
|
44
44
|
return {
|
|
45
|
-
tooltip: ( localize(
|
|
45
|
+
tooltip: ( localize(5498, "Show help on custom agent files")),
|
|
46
46
|
helpURI: ( URI.parse(AGENT_DOCUMENTATION_URL)),
|
|
47
47
|
iconClass
|
|
48
48
|
};
|
|
@@ -56,7 +56,7 @@ function isPromptFileItem(item) {
|
|
|
56
56
|
}
|
|
57
57
|
const NEW_PROMPT_FILE_OPTION = {
|
|
58
58
|
type: 'item',
|
|
59
|
-
label: `$(plus) ${( localize(
|
|
59
|
+
label: `$(plus) ${( localize(5499, 'New prompt file...'))}`,
|
|
60
60
|
pickable: false,
|
|
61
61
|
alwaysShow: true,
|
|
62
62
|
buttons: [newHelpButton(PromptsType.prompt)],
|
|
@@ -64,7 +64,7 @@ const NEW_PROMPT_FILE_OPTION = {
|
|
|
64
64
|
};
|
|
65
65
|
const NEW_INSTRUCTIONS_FILE_OPTION = {
|
|
66
66
|
type: 'item',
|
|
67
|
-
label: `$(plus) ${( localize(
|
|
67
|
+
label: `$(plus) ${( localize(5500, 'New instruction file...'))}`,
|
|
68
68
|
pickable: false,
|
|
69
69
|
alwaysShow: true,
|
|
70
70
|
buttons: [newHelpButton(PromptsType.instructions)],
|
|
@@ -72,7 +72,7 @@ const NEW_INSTRUCTIONS_FILE_OPTION = {
|
|
|
72
72
|
};
|
|
73
73
|
const UPDATE_INSTRUCTIONS_OPTION = {
|
|
74
74
|
type: 'item',
|
|
75
|
-
label: `$(refresh) ${( localize(
|
|
75
|
+
label: `$(refresh) ${( localize(5501, 'Generate agent instructions...'))}`,
|
|
76
76
|
pickable: false,
|
|
77
77
|
alwaysShow: true,
|
|
78
78
|
buttons: [newHelpButton(PromptsType.instructions)],
|
|
@@ -80,35 +80,35 @@ const UPDATE_INSTRUCTIONS_OPTION = {
|
|
|
80
80
|
};
|
|
81
81
|
const NEW_AGENT_FILE_OPTION = {
|
|
82
82
|
type: 'item',
|
|
83
|
-
label: `$(plus) ${( localize(
|
|
83
|
+
label: `$(plus) ${( localize(5502, 'Create new custom agent...'))}`,
|
|
84
84
|
pickable: false,
|
|
85
85
|
alwaysShow: true,
|
|
86
86
|
buttons: [newHelpButton(PromptsType.agent)],
|
|
87
87
|
commandId: NEW_AGENT_COMMAND_ID,
|
|
88
88
|
};
|
|
89
89
|
const EDIT_BUTTON = {
|
|
90
|
-
tooltip: ( localize(
|
|
90
|
+
tooltip: ( localize(5503, "Open in Editor")),
|
|
91
91
|
iconClass: ThemeIcon.asClassName(Codicon.fileCode),
|
|
92
92
|
};
|
|
93
93
|
const DELETE_BUTTON = {
|
|
94
|
-
tooltip: ( localize(
|
|
94
|
+
tooltip: ( localize(5504, "Delete")),
|
|
95
95
|
iconClass: ThemeIcon.asClassName(Codicon.trash),
|
|
96
96
|
};
|
|
97
97
|
const RENAME_BUTTON = {
|
|
98
|
-
tooltip: ( localize(
|
|
98
|
+
tooltip: ( localize(5505, "Move and/or Rename")),
|
|
99
99
|
iconClass: ThemeIcon.asClassName(Codicon.replace),
|
|
100
100
|
};
|
|
101
101
|
const COPY_BUTTON = {
|
|
102
|
-
tooltip: ( localize(
|
|
102
|
+
tooltip: ( localize(5506, "Make a Copy")),
|
|
103
103
|
iconClass: ThemeIcon.asClassName(Codicon.copy),
|
|
104
104
|
};
|
|
105
105
|
const MAKE_VISIBLE_BUTTON = {
|
|
106
|
-
tooltip: ( localize(
|
|
106
|
+
tooltip: ( localize(5507, "Hidden from chat view agent picker. Click to show.")),
|
|
107
107
|
iconClass: ThemeIcon.asClassName(Codicon.eyeClosed),
|
|
108
108
|
alwaysVisible: true,
|
|
109
109
|
};
|
|
110
110
|
const MAKE_INVISIBLE_BUTTON = {
|
|
111
|
-
tooltip: ( localize(
|
|
111
|
+
tooltip: ( localize(5508, "Hide from agent picker")),
|
|
112
112
|
iconClass: ThemeIcon.asClassName(Codicon.eyeClosed),
|
|
113
113
|
};
|
|
114
114
|
let PromptFilePickers = class PromptFilePickers {
|
|
@@ -127,7 +127,7 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
127
127
|
const cts = ( new CancellationTokenSource());
|
|
128
128
|
const quickPick = this._quickInputService.createQuickPick({ useSeparators: true });
|
|
129
129
|
quickPick.busy = true;
|
|
130
|
-
quickPick.placeholder = ( localize(
|
|
130
|
+
quickPick.placeholder = ( localize(5509, 'Searching file system...'));
|
|
131
131
|
try {
|
|
132
132
|
const fileOptions = await this._createPromptPickItems(options, cts.token);
|
|
133
133
|
const activeItem = options.resource && fileOptions.find(f => f.type === 'item' && extUri.isEqual(f.promptFileUri, options.resource));
|
|
@@ -213,7 +213,7 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
213
213
|
}
|
|
214
214
|
const locals = await this._promptsService.listPromptFilesForStorage(options.type, PromptsStorage.local, token);
|
|
215
215
|
if (locals.length) {
|
|
216
|
-
result.push({ type: 'separator', label: ( localize(
|
|
216
|
+
result.push({ type: 'separator', label: ( localize(5510, "Workspace")) });
|
|
217
217
|
result.push(...(await Promise.all(( locals.map(l => this._createPromptPickItem(l, buttons, getVisibility(l), token))))));
|
|
218
218
|
}
|
|
219
219
|
let agentInstructionFiles = [];
|
|
@@ -236,12 +236,12 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
236
236
|
}
|
|
237
237
|
if (agentInstructionFiles.length) {
|
|
238
238
|
const agentButtons = buttons.filter(b => b !== RENAME_BUTTON);
|
|
239
|
-
result.push({ type: 'separator', label: ( localize(
|
|
239
|
+
result.push({ type: 'separator', label: ( localize(5511, "Agent Instructions")) });
|
|
240
240
|
result.push(...(await Promise.all(( agentInstructionFiles.map(l => this._createPromptPickItem(l, agentButtons, getVisibility(l), token))))));
|
|
241
241
|
}
|
|
242
242
|
const exts = await this._promptsService.listPromptFilesForStorage(options.type, PromptsStorage.extension, token);
|
|
243
243
|
if (exts.length) {
|
|
244
|
-
result.push({ type: 'separator', label: ( localize(
|
|
244
|
+
result.push({ type: 'separator', label: ( localize(5512, "Extensions")) });
|
|
245
245
|
const extButtons = [];
|
|
246
246
|
if (options.optionEdit !== false) {
|
|
247
247
|
extButtons.push(EDIT_BUTTON);
|
|
@@ -253,7 +253,7 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
253
253
|
}
|
|
254
254
|
const users = await this._promptsService.listPromptFilesForStorage(options.type, PromptsStorage.user, token);
|
|
255
255
|
if (users.length) {
|
|
256
|
-
result.push({ type: 'separator', label: ( localize(
|
|
256
|
+
result.push({ type: 'separator', label: ( localize(5513, "User Data")) });
|
|
257
257
|
result.push(...(await Promise.all(( users.map(u => this._createPromptPickItem(u, buttons, getVisibility(u), token))))));
|
|
258
258
|
}
|
|
259
259
|
return result;
|
|
@@ -289,8 +289,8 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
289
289
|
let iconClass;
|
|
290
290
|
if (visibility === false) {
|
|
291
291
|
buttons = (buttons ?? []).concat(MAKE_VISIBLE_BUTTON);
|
|
292
|
-
promptName = ( localize(
|
|
293
|
-
tooltip = ( localize(
|
|
292
|
+
promptName = ( localize(5514, "{0} (hidden)", promptName));
|
|
293
|
+
tooltip = ( localize(5515, "Hidden from chat view agent picker"));
|
|
294
294
|
}
|
|
295
295
|
else if (visibility === true) {
|
|
296
296
|
buttons = (buttons ?? []).concat(MAKE_INVISIBLE_BUTTON);
|
|
@@ -358,7 +358,7 @@ let PromptFilePickers = class PromptFilePickers {
|
|
|
358
358
|
if (button === DELETE_BUTTON) {
|
|
359
359
|
return await this.keepQuickPickOpen(quickPick, async () => {
|
|
360
360
|
const filename = getCleanPromptName(value);
|
|
361
|
-
const message = ( localize(
|
|
361
|
+
const message = ( localize(5516, "Are you sure you want to delete '{0}'?", filename));
|
|
362
362
|
const { confirmed } = await this._dialogService.confirm({ message });
|
|
363
363
|
if (!confirmed) {
|
|
364
364
|
return false;
|
|
@@ -18,10 +18,10 @@ import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/pl
|
|
|
18
18
|
import { ILogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service';
|
|
19
19
|
import { isProposedApiEnabled } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions';
|
|
20
20
|
import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
|
|
21
|
-
import { IChatVariablesService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatVariables.service';
|
|
21
|
+
import { IChatVariablesService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariables.service';
|
|
22
22
|
import { IChatWidgetService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat.service';
|
|
23
|
-
import { ChatDynamicVariableModel } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/
|
|
24
|
-
import { cleanupOldImages, createFileForMedia, resizeImage, imageToHash } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/
|
|
23
|
+
import { ChatDynamicVariableModel } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/attachments/chatDynamicVariables';
|
|
24
|
+
import { cleanupOldImages, createFileForMedia, resizeImage, imageToHash } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatImageUtils';
|
|
25
25
|
|
|
26
26
|
var CopyAttachmentsProvider_1;
|
|
27
27
|
const COPY_MIME_TYPES = 'application/vnd.code.additional-editor-data';
|
|
@@ -72,7 +72,7 @@ let PasteImageProvider = class PasteImageProvider {
|
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
74
|
const attachedVariables = widget.attachmentModel.attachments;
|
|
75
|
-
const displayName = ( localize(
|
|
75
|
+
const displayName = ( localize(5845, 'Pasted Image'));
|
|
76
76
|
let tempDisplayName = displayName;
|
|
77
77
|
for (let appendValue = 2; ( attachedVariables.some(attachment => attachment.name === tempDisplayName)); appendValue++) {
|
|
78
78
|
tempDisplayName = `${displayName} ${appendValue}`;
|
|
@@ -93,7 +93,7 @@ let PasteImageProvider = class PasteImageProvider {
|
|
|
93
93
|
if (( currentContextIds.has(scaledImageContext.id))) {
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
|
-
const edit = createCustomPasteEdit(model, [scaledImageContext], mimeType, this.kind, ( localize(
|
|
96
|
+
const edit = createCustomPasteEdit(model, [scaledImageContext], mimeType, this.kind, ( localize(5846, 'Pasted Image Attachment')), this.chatWidgetService);
|
|
97
97
|
return createEditSession(edit);
|
|
98
98
|
}
|
|
99
99
|
};
|
|
@@ -202,7 +202,7 @@ let CopyAttachmentsProvider = class CopyAttachmentsProvider {
|
|
|
202
202
|
}
|
|
203
203
|
const edit = {
|
|
204
204
|
insertText: textdata,
|
|
205
|
-
title: ( localize(
|
|
205
|
+
title: ( localize(5847, 'Insert Prompt & Attachments')),
|
|
206
206
|
kind: this.kind,
|
|
207
207
|
handledMimeType: CopyAttachmentsProvider_1.ATTACHMENT_MIME_TYPE,
|
|
208
208
|
additionalEdit: {
|
|
@@ -276,7 +276,7 @@ class PasteTextProvider {
|
|
|
276
276
|
if (( currentContextIds.has(copiedContext.id))) {
|
|
277
277
|
return;
|
|
278
278
|
}
|
|
279
|
-
const edit = createCustomPasteEdit(model, [copiedContext], Mimes.text, this.kind, ( localize(
|
|
279
|
+
const edit = createCustomPasteEdit(model, [copiedContext], Mimes.text, this.kind, ( localize(5848, 'Pasted Code Attachment')), this.chatWidgetService);
|
|
280
280
|
edit.yieldTo = [{ kind: HierarchicalKind.Empty.append('text', 'plain') }];
|
|
281
281
|
return createEditSession(edit);
|
|
282
282
|
}
|
|
@@ -286,7 +286,7 @@ function getCopiedContext(code, file, language, range) {
|
|
|
286
286
|
const start = range.startLineNumber;
|
|
287
287
|
const end = range.endLineNumber;
|
|
288
288
|
const resultText = `Copied Selection of Code: \n\n\n From the file: ${fileName} From lines ${start} to ${end} \n \`\`\`${code}\`\`\``;
|
|
289
|
-
const pastedLines = start === end ? ( localize(
|
|
289
|
+
const pastedLines = start === end ? ( localize(5849, '1 line')) : ( localize(5850, '{0} lines', end + 1 - start));
|
|
290
290
|
return {
|
|
291
291
|
kind: 'paste',
|
|
292
292
|
value: resultText,
|
|
@@ -310,7 +310,7 @@ function getCopiedContext(code, file, language, range) {
|
|
|
310
310
|
function createCustomPasteEdit(model, context, handledMimeType, kind, title, chatWidgetService) {
|
|
311
311
|
const label = context.length === 1
|
|
312
312
|
? context[0].name
|
|
313
|
-
: ( localize(
|
|
313
|
+
: ( localize(5851, '{0} and {1} more', context[0].name, context.length - 1));
|
|
314
314
|
const customEdit = {
|
|
315
315
|
resource: model.uri,
|
|
316
316
|
variable: context,
|
|
@@ -14,7 +14,7 @@ import { type IDecorationAddon } from "@codingame/monaco-vscode-api/vscode/vs/pl
|
|
|
14
14
|
import { IThemeService } from "@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service";
|
|
15
15
|
import { ILifecycleService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle.service";
|
|
16
16
|
import { IHoverService } from "@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service";
|
|
17
|
-
import { IChatContextPickService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatContextPickService.service";
|
|
17
|
+
import { IChatContextPickService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/attachments/chatContextPickService.service";
|
|
18
18
|
import { IChatWidgetService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat.service";
|
|
19
19
|
import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
|
|
20
20
|
import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
|
|
@@ -25,7 +25,7 @@ import { TERMINAL_COMMAND_DECORATION_DEFAULT_BACKGROUND_COLOR, TERMINAL_COMMAND_
|
|
|
25
25
|
import { ILifecycleService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/lifecycle/common/lifecycle.service';
|
|
26
26
|
import { IHoverService } from '@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service';
|
|
27
27
|
import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
|
|
28
|
-
import { IChatContextPickService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chatContextPickService.service';
|
|
28
|
+
import { IChatContextPickService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/attachments/chatContextPickService.service';
|
|
29
29
|
import { IChatWidgetService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat.service';
|
|
30
30
|
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
31
31
|
import { TerminalContext } from '../../../chat/browser/actions/chatContext.js';
|
|
@@ -371,7 +371,7 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
371
371
|
];
|
|
372
372
|
}
|
|
373
373
|
_getContextMenuActions() {
|
|
374
|
-
const label = ( localize(
|
|
374
|
+
const label = ( localize(11677, "Toggle Visibility"));
|
|
375
375
|
return [
|
|
376
376
|
{
|
|
377
377
|
class: undefined, tooltip: label, id: 'terminal.toggleVisibility', label, enabled: true,
|
|
@@ -392,7 +392,7 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
392
392
|
actions.push(attachToChatAction, ( new Separator()));
|
|
393
393
|
}
|
|
394
394
|
if (command.command !== '') {
|
|
395
|
-
const labelRun = ( localize(
|
|
395
|
+
const labelRun = ( localize(11678, 'Rerun Command'));
|
|
396
396
|
actions.push({
|
|
397
397
|
class: undefined, tooltip: labelRun, id: 'terminal.rerunCommand', label: labelRun, enabled: true,
|
|
398
398
|
run: async () => {
|
|
@@ -401,11 +401,11 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
401
401
|
}
|
|
402
402
|
if (!command.isTrusted) {
|
|
403
403
|
const shouldRun = await ( new Promise(r => {
|
|
404
|
-
this._notificationService.prompt(Severity.Info, ( localize(
|
|
405
|
-
label: ( localize(
|
|
404
|
+
this._notificationService.prompt(Severity.Info, ( localize(11679, 'Do you want to run the command: {0}', command.command)), [{
|
|
405
|
+
label: ( localize(11680, 'Yes')),
|
|
406
406
|
run: () => r(true)
|
|
407
407
|
}, {
|
|
408
|
-
label: ( localize(
|
|
408
|
+
label: ( localize(11681, 'No')),
|
|
409
409
|
run: () => r(false)
|
|
410
410
|
}]);
|
|
411
411
|
}));
|
|
@@ -417,14 +417,14 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
417
417
|
}
|
|
418
418
|
});
|
|
419
419
|
actions.push(( new Separator()));
|
|
420
|
-
const labelCopy = ( localize(
|
|
420
|
+
const labelCopy = ( localize(11682, 'Copy Command'));
|
|
421
421
|
actions.push({
|
|
422
422
|
class: undefined, tooltip: labelCopy, id: 'terminal.copyCommand', label: labelCopy, enabled: true,
|
|
423
423
|
run: () => this._clipboardService.writeText(command.command)
|
|
424
424
|
});
|
|
425
425
|
}
|
|
426
426
|
if (command.hasOutput()) {
|
|
427
|
-
const labelCopyCommandAndOutput = ( localize(
|
|
427
|
+
const labelCopyCommandAndOutput = ( localize(11683, 'Copy Command and Output'));
|
|
428
428
|
actions.push({
|
|
429
429
|
class: undefined, tooltip: labelCopyCommandAndOutput, id: 'terminal.copyCommandAndOutput', label: labelCopyCommandAndOutput, enabled: true,
|
|
430
430
|
run: () => {
|
|
@@ -434,7 +434,7 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
434
434
|
}
|
|
435
435
|
}
|
|
436
436
|
});
|
|
437
|
-
const labelText = ( localize(
|
|
437
|
+
const labelText = ( localize(11684, 'Copy Output'));
|
|
438
438
|
actions.push({
|
|
439
439
|
class: undefined, tooltip: labelText, id: 'terminal.copyOutput', label: labelText, enabled: true,
|
|
440
440
|
run: () => {
|
|
@@ -444,7 +444,7 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
444
444
|
}
|
|
445
445
|
}
|
|
446
446
|
});
|
|
447
|
-
const labelHtml = ( localize(
|
|
447
|
+
const labelHtml = ( localize(11685, 'Copy Output as HTML'));
|
|
448
448
|
actions.push({
|
|
449
449
|
class: undefined, tooltip: labelHtml, id: 'terminal.copyOutputAsHtml', label: labelHtml, enabled: true,
|
|
450
450
|
run: () => this._onDidRequestCopyAsHtml.fire({ command })
|
|
@@ -453,18 +453,18 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
453
453
|
if (actions.length > 0) {
|
|
454
454
|
actions.push(( new Separator()));
|
|
455
455
|
}
|
|
456
|
-
const labelRunRecent = ( localize(
|
|
456
|
+
const labelRunRecent = ( localize(11686, "Run Recent Command"));
|
|
457
457
|
actions.push({
|
|
458
458
|
class: undefined, tooltip: labelRunRecent, id: 'workbench.action.terminal.runRecentCommand', label: labelRunRecent, enabled: true,
|
|
459
459
|
run: () => this._commandService.executeCommand('workbench.action.terminal.runRecentCommand')
|
|
460
460
|
});
|
|
461
|
-
const labelGoToRecent = ( localize(
|
|
461
|
+
const labelGoToRecent = ( localize(11687, "Go To Recent Directory"));
|
|
462
462
|
actions.push({
|
|
463
463
|
class: undefined, tooltip: labelRunRecent, id: 'workbench.action.terminal.goToRecentDirectory', label: labelGoToRecent, enabled: true,
|
|
464
464
|
run: () => this._commandService.executeCommand('workbench.action.terminal.goToRecentDirectory')
|
|
465
465
|
});
|
|
466
466
|
actions.push(( new Separator()));
|
|
467
|
-
const labelAbout = ( localize(
|
|
467
|
+
const labelAbout = ( localize(11688, 'Learn About Shell Integration'));
|
|
468
468
|
actions.push({
|
|
469
469
|
class: undefined, tooltip: labelAbout, id: 'terminal.learnShellIntegration', label: labelAbout, enabled: true,
|
|
470
470
|
run: () => this._openerService.open('https://code.visualstudio.com/docs/terminal/shell-integration')
|
|
@@ -476,7 +476,7 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
476
476
|
if (!chatIsEnabled) {
|
|
477
477
|
return undefined;
|
|
478
478
|
}
|
|
479
|
-
const labelAttachToChat = ( localize(
|
|
479
|
+
const labelAttachToChat = ( localize(11689, 'Attach To Chat'));
|
|
480
480
|
return {
|
|
481
481
|
class: undefined, tooltip: labelAttachToChat, id: 'terminal.attachToChat', label: labelAttachToChat, enabled: true,
|
|
482
482
|
run: async () => {
|
|
@@ -513,14 +513,14 @@ let DecorationAddon = class DecorationAddon extends Disposable {
|
|
|
513
513
|
quickPick.hideInput = true;
|
|
514
514
|
quickPick.hideCheckAll = true;
|
|
515
515
|
quickPick.canSelectMany = true;
|
|
516
|
-
quickPick.title = ( localize(
|
|
516
|
+
quickPick.title = ( localize(11690, 'Toggle visibility'));
|
|
517
517
|
const configValue = this._configurationService.getValue(TerminalSettingId.ShellIntegrationDecorationsEnabled);
|
|
518
518
|
const gutterIcon = {
|
|
519
|
-
label: ( localize(
|
|
519
|
+
label: ( localize(11691, 'Gutter command decorations')),
|
|
520
520
|
picked: configValue !== 'never' && configValue !== 'overviewRuler'
|
|
521
521
|
};
|
|
522
522
|
const overviewRulerIcon = {
|
|
523
|
-
label: ( localize(
|
|
523
|
+
label: ( localize(11692, 'Overview ruler command decorations')),
|
|
524
524
|
picked: configValue !== 'never' && configValue !== 'gutter'
|
|
525
525
|
};
|
|
526
526
|
quickPick.items = [gutterIcon, overviewRulerIcon];
|
|
@@ -281,9 +281,6 @@ let MarkNavigationAddon = class MarkNavigationAddon extends Disposable {
|
|
|
281
281
|
element.classList.add('bottom');
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
|
-
if (this._terminal?.element) {
|
|
285
|
-
element.style.marginLeft = `-${getWindow(this._terminal.element).getComputedStyle(this._terminal.element).paddingLeft}`;
|
|
286
|
-
}
|
|
287
284
|
}));
|
|
288
285
|
}
|
|
289
286
|
}
|
|
@@ -75,6 +75,7 @@ export declare class XtermTerminal extends Disposable implements IXtermTerminal,
|
|
|
75
75
|
private _searchAddon?;
|
|
76
76
|
private _unicode11Addon?;
|
|
77
77
|
private _webglAddon?;
|
|
78
|
+
private _webglAddonCustomGlyphs?;
|
|
78
79
|
private _serializeAddon?;
|
|
79
80
|
private _imageAddon?;
|
|
80
81
|
private readonly _ligaturesAddon;
|
|
@@ -105,6 +106,10 @@ export declare class XtermTerminal extends Disposable implements IXtermTerminal,
|
|
|
105
106
|
resultIndex: number;
|
|
106
107
|
resultCount: number;
|
|
107
108
|
}>;
|
|
109
|
+
private readonly _onBeforeSearch;
|
|
110
|
+
readonly onBeforeSearch: Event<void>;
|
|
111
|
+
private readonly _onAfterSearch;
|
|
112
|
+
readonly onAfterSearch: Event<void>;
|
|
108
113
|
private readonly _onDidChangeSelection;
|
|
109
114
|
readonly onDidChangeSelection: Event<void>;
|
|
110
115
|
private readonly _onDidChangeFocus;
|
|
@@ -102,6 +102,7 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
102
102
|
this._accessibilitySignalService = _accessibilitySignalService;
|
|
103
103
|
this._isPhysicalMouseWheel = MouseWheelClassifier.INSTANCE.isPhysicalMouseWheel();
|
|
104
104
|
this._progressState = { state: 0, value: 0 };
|
|
105
|
+
this._webglAddonCustomGlyphs = false;
|
|
105
106
|
this._ligaturesAddon = this._register(( new MutableDisposable()));
|
|
106
107
|
this._attachedDisposables = this._register(( new DisposableStore()));
|
|
107
108
|
this._onDidRequestRunCommand = this._register(( new Emitter()));
|
|
@@ -112,6 +113,10 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
112
113
|
this.onDidRequestRefreshDimensions = this._onDidRequestRefreshDimensions.event;
|
|
113
114
|
this._onDidChangeFindResults = this._register(( new Emitter()));
|
|
114
115
|
this.onDidChangeFindResults = this._onDidChangeFindResults.event;
|
|
116
|
+
this._onBeforeSearch = this._register(( new Emitter()));
|
|
117
|
+
this.onBeforeSearch = this._onBeforeSearch.event;
|
|
118
|
+
this._onAfterSearch = this._register(( new Emitter()));
|
|
119
|
+
this.onAfterSearch = this._onAfterSearch.event;
|
|
115
120
|
this._onDidChangeSelection = this._register(( new Emitter()));
|
|
116
121
|
this.onDidChangeSelection = this._onDidChangeSelection.event;
|
|
117
122
|
this._onDidChangeFocus = this._register(( new Emitter()));
|
|
@@ -152,7 +157,6 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
152
157
|
macOptionIsMeta: config.macOptionIsMeta,
|
|
153
158
|
macOptionClickForcesSelection: config.macOptionClickForcesSelection,
|
|
154
159
|
rightClickSelectsWord: config.rightClickBehavior === 'selectWord',
|
|
155
|
-
fastScrollModifier: 'alt',
|
|
156
160
|
fastScrollSensitivity: config.fastScrollSensitivity,
|
|
157
161
|
scrollSensitivity: config.mouseWheelScrollSensitivity,
|
|
158
162
|
scrollOnEraseInDisplay: true,
|
|
@@ -426,7 +430,6 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
426
430
|
this.raw.options.macOptionClickForcesSelection = config.macOptionClickForcesSelection;
|
|
427
431
|
this.raw.options.rightClickSelectsWord = config.rightClickBehavior === 'selectWord';
|
|
428
432
|
this.raw.options.wordSeparator = config.wordSeparators;
|
|
429
|
-
this.raw.options.customGlyphs = config.customGlyphs;
|
|
430
433
|
this.raw.options.ignoreBracketedPasteMode = config.ignoreBracketedPasteMode;
|
|
431
434
|
this.raw.options.rescaleOverlappingGlyphs = config.rescaleOverlappingGlyphs;
|
|
432
435
|
this._updateSmoothScrolling();
|
|
@@ -495,6 +498,12 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
495
498
|
this._lastFindResult = results;
|
|
496
499
|
this._onDidChangeFindResults.fire(results);
|
|
497
500
|
});
|
|
501
|
+
this._searchAddon.onBeforeSearch(() => {
|
|
502
|
+
this._onBeforeSearch.fire();
|
|
503
|
+
});
|
|
504
|
+
this._searchAddon.onAfterSearch(() => {
|
|
505
|
+
this._onAfterSearch.fire();
|
|
506
|
+
});
|
|
498
507
|
return this._searchAddon;
|
|
499
508
|
});
|
|
500
509
|
}
|
|
@@ -617,7 +626,7 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
617
626
|
}
|
|
618
627
|
}
|
|
619
628
|
else {
|
|
620
|
-
this._notificationService.warn(( localize(
|
|
629
|
+
this._notificationService.warn(( localize(11703, 'The terminal has no selection to copy')));
|
|
621
630
|
}
|
|
622
631
|
}
|
|
623
632
|
_setCursorBlink(blink) {
|
|
@@ -644,11 +653,15 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
644
653
|
}
|
|
645
654
|
}
|
|
646
655
|
async _enableWebglRenderer() {
|
|
647
|
-
if (!this.raw.element || this._webglAddon) {
|
|
656
|
+
if (!this.raw.element || this._webglAddon && this._webglAddonCustomGlyphs === this._terminalConfigurationService.config.customGlyphs) {
|
|
648
657
|
return;
|
|
649
658
|
}
|
|
659
|
+
this._disposeOfWebglRenderer();
|
|
660
|
+
this._webglAddonCustomGlyphs = this._terminalConfigurationService.config.customGlyphs;
|
|
650
661
|
const Addon = await this._xtermAddonLoader.importAddon('webgl');
|
|
651
|
-
this._webglAddon = ( new Addon(
|
|
662
|
+
this._webglAddon = ( new Addon({
|
|
663
|
+
customGlyphs: this._terminalConfigurationService.config.customGlyphs
|
|
664
|
+
}));
|
|
652
665
|
try {
|
|
653
666
|
this.raw.loadAddon(this._webglAddon);
|
|
654
667
|
this._logService.trace('Webgl was loaded');
|
|
@@ -718,12 +731,16 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
718
731
|
}
|
|
719
732
|
}
|
|
720
733
|
_disposeOfWebglRenderer() {
|
|
734
|
+
if (!this._webglAddon) {
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
721
737
|
try {
|
|
722
738
|
this._webglAddon?.dispose();
|
|
723
739
|
}
|
|
724
740
|
catch {
|
|
725
741
|
}
|
|
726
742
|
this._webglAddon = undefined;
|
|
743
|
+
this._webglAddonCustomGlyphs = undefined;
|
|
727
744
|
this._refreshImageAddon();
|
|
728
745
|
this._onDidRequestRefreshDimensions.fire();
|
|
729
746
|
}
|
|
@@ -811,6 +828,7 @@ let XtermTerminal = class XtermTerminal extends Disposable {
|
|
|
811
828
|
dispose() {
|
|
812
829
|
this._anyTerminalFocusContextKey.reset();
|
|
813
830
|
this._anyFocusedTerminalHasSelection.reset();
|
|
831
|
+
this._disposeOfWebglRenderer();
|
|
814
832
|
this._onDidDispose.fire();
|
|
815
833
|
super.dispose();
|
|
816
834
|
}
|