@codingame/monaco-vscode-chat-service-override 26.0.1 → 26.1.1
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 +5 -5
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +5 -5
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -20
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +12 -12
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +8 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +11 -11
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-chat-service-override",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.1.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - chat service-override",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "26.
|
|
19
|
-
"@codingame/monaco-vscode-katex-common": "26.
|
|
20
|
-
"@codingame/monaco-vscode-xterm-addons-common": "26.
|
|
21
|
-
"@codingame/monaco-vscode-xterm-common": "26.
|
|
18
|
+
"@codingame/monaco-vscode-api": "26.1.1",
|
|
19
|
+
"@codingame/monaco-vscode-katex-common": "26.1.1",
|
|
20
|
+
"@codingame/monaco-vscode-xterm-addons-common": "26.1.1",
|
|
21
|
+
"@codingame/monaco-vscode-xterm-common": "26.1.1"
|
|
22
22
|
},
|
|
23
23
|
"main": "index.js",
|
|
24
24
|
"module": "index.js",
|
|
@@ -42,12 +42,12 @@ registerAction2(class extends NotebookAction {
|
|
|
42
42
|
super({
|
|
43
43
|
id: "notebook.cell.chat.start",
|
|
44
44
|
title: {
|
|
45
|
-
value: "$(sparkle) " + ( localize(
|
|
45
|
+
value: "$(sparkle) " + ( localize(9677, "Generate")),
|
|
46
46
|
original: "$(sparkle) Generate"
|
|
47
47
|
},
|
|
48
|
-
tooltip: ( localize(
|
|
48
|
+
tooltip: ( localize(9678, "Start Chat to Generate Code")),
|
|
49
49
|
metadata: {
|
|
50
|
-
description: ( localize(
|
|
50
|
+
description: ( localize(9678, "Start Chat to Generate Code")),
|
|
51
51
|
args: [{
|
|
52
52
|
name: "args",
|
|
53
53
|
schema: {
|
|
@@ -128,10 +128,10 @@ registerAction2(class extends NotebookAction {
|
|
|
128
128
|
super({
|
|
129
129
|
id: "notebook.cell.chat.startAtTop",
|
|
130
130
|
title: {
|
|
131
|
-
value: "$(sparkle) " + ( localize(
|
|
131
|
+
value: "$(sparkle) " + ( localize(9677, "Generate")),
|
|
132
132
|
original: "$(sparkle) Generate"
|
|
133
133
|
},
|
|
134
|
-
tooltip: ( localize(
|
|
134
|
+
tooltip: ( localize(9678, "Start Chat to Generate Code")),
|
|
135
135
|
f1: false,
|
|
136
136
|
menu: [{
|
|
137
137
|
id: MenuId.NotebookCellListTop,
|
|
@@ -149,8 +149,8 @@ MenuRegistry.appendMenuItem(MenuId.NotebookToolbar, {
|
|
|
149
149
|
command: {
|
|
150
150
|
id: "notebook.cell.chat.start",
|
|
151
151
|
icon: Codicon.sparkle,
|
|
152
|
-
title: ( localize(
|
|
153
|
-
tooltip: ( localize(
|
|
152
|
+
title: ( localize(9679, "Generate")),
|
|
153
|
+
tooltip: ( localize(9680, "Start Chat to Generate Code"))
|
|
154
154
|
},
|
|
155
155
|
order: -10,
|
|
156
156
|
group: "navigation/add",
|
|
@@ -160,9 +160,9 @@ class AcceptChangesAndRun extends EditorAction2 {
|
|
|
160
160
|
constructor() {
|
|
161
161
|
super({
|
|
162
162
|
id: "notebook.inlineChat.acceptChangesAndRun",
|
|
163
|
-
title: ( localize2(
|
|
164
|
-
shortTitle: ( localize(
|
|
165
|
-
tooltip: ( localize(
|
|
163
|
+
title: ( localize2(9681, "Accept and Run")),
|
|
164
|
+
shortTitle: ( localize(9682, "Accept & Run")),
|
|
165
|
+
tooltip: ( localize(9683, "Accept the changes and run the cell")),
|
|
166
166
|
icon: Codicon.check,
|
|
167
167
|
f1: true,
|
|
168
168
|
precondition: ( ContextKeyExpr.and(( NOTEBOOK_EDITOR_EDITABLE.isEqualTo(true)), CTX_INLINE_CHAT_VISIBLE)),
|
|
@@ -91,7 +91,7 @@ let NotebookChatContribution = class NotebookChatContribution extends Disposable
|
|
|
91
91
|
result.suggestions.push({
|
|
92
92
|
label: `${chatVariableLeader}${NotebookKernelVariableKey}`,
|
|
93
93
|
insertText: `${chatVariableLeader}${NotebookKernelVariableKey}:`,
|
|
94
|
-
detail: ( localize(
|
|
94
|
+
detail: ( localize(9684, "Pick a variable from the kernel")),
|
|
95
95
|
range,
|
|
96
96
|
kind: CompletionItemKind.Text,
|
|
97
97
|
command: {
|
|
@@ -198,7 +198,7 @@ class SelectAndInsertKernelVariableAction extends Action2 {
|
|
|
198
198
|
detail: variable.type
|
|
199
199
|
});
|
|
200
200
|
}
|
|
201
|
-
const placeHolder = quickPickItems.length > 0 ? ( localize(
|
|
201
|
+
const placeHolder = quickPickItems.length > 0 ? ( localize(9685, "Select a kernel variable")) : ( localize(9686, "No kernel variables found"));
|
|
202
202
|
const pickedVariable = await quickInputService.pick(quickPickItems, {
|
|
203
203
|
placeHolder
|
|
204
204
|
});
|
|
@@ -248,7 +248,7 @@ let KernelVariableContextPicker = class KernelVariableContextPicker {
|
|
|
248
248
|
this.editorService = editorService;
|
|
249
249
|
this.notebookKernelService = notebookKernelService;
|
|
250
250
|
this.type = "pickerPick";
|
|
251
|
-
this.label = ( localize(
|
|
251
|
+
this.label = ( localize(9687, "Kernel Variable..."));
|
|
252
252
|
this.icon = Codicon.serverEnvironment;
|
|
253
253
|
}
|
|
254
254
|
isEnabled(widget) {
|
|
@@ -287,7 +287,7 @@ let KernelVariableContextPicker = class KernelVariableContextPicker {
|
|
|
287
287
|
return result;
|
|
288
288
|
})();
|
|
289
289
|
return {
|
|
290
|
-
placeholder: ( localize(
|
|
290
|
+
placeholder: ( localize(9688, "Select a kernel variable")),
|
|
291
291
|
picks
|
|
292
292
|
};
|
|
293
293
|
}
|
|
@@ -297,7 +297,7 @@ registerAction2(class AddCellOutputToChatAction extends Action2 {
|
|
|
297
297
|
constructor() {
|
|
298
298
|
super({
|
|
299
299
|
id: "notebook.cellOutput.addToChat",
|
|
300
|
-
title: ( localize(
|
|
300
|
+
title: ( localize(9689, "Add Cell Output to Chat")),
|
|
301
301
|
menu: {
|
|
302
302
|
id: MenuId.NotebookOutputToolbar,
|
|
303
303
|
when: ( ContextKeyExpr.and(NOTEBOOK_CELL_HAS_OUTPUTS, ContextKeyExpr.in(
|
package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
3
3
|
import { RawContextKey } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey';
|
|
4
4
|
|
|
5
|
-
const CTX_NOTEBOOK_CHAT_HAS_AGENT = ( new RawContextKey("notebookChatAgentRegistered", false, ( localize(
|
|
5
|
+
const CTX_NOTEBOOK_CHAT_HAS_AGENT = ( new RawContextKey("notebookChatAgentRegistered", false, ( localize(9690, "Whether a chat agent for notebook is registered"))));
|
|
6
6
|
|
|
7
7
|
export { CTX_NOTEBOOK_CHAT_HAS_AGENT };
|
|
@@ -13,42 +13,42 @@ import { IRemoteCodingAgentsService } from '@codingame/monaco-vscode-api/vscode/
|
|
|
13
13
|
const extensionPoint = ExtensionsRegistry.registerExtensionPoint({
|
|
14
14
|
extensionPoint: "remoteCodingAgents",
|
|
15
15
|
jsonSchema: {
|
|
16
|
-
description: ( localize(
|
|
16
|
+
description: ( localize(10728, "Contributes remote coding agent integrations to the chat widget.")),
|
|
17
17
|
type: "array",
|
|
18
18
|
items: {
|
|
19
19
|
type: "object",
|
|
20
20
|
properties: {
|
|
21
21
|
id: {
|
|
22
|
-
description: ( localize(
|
|
22
|
+
description: ( localize(10729, "A unique identifier for this item.")),
|
|
23
23
|
type: "string"
|
|
24
24
|
},
|
|
25
25
|
command: {
|
|
26
26
|
description: ( localize(
|
|
27
|
-
|
|
27
|
+
10730,
|
|
28
28
|
"Identifier of the command to execute. The command must be declared in the \"commands\" section."
|
|
29
29
|
)),
|
|
30
30
|
type: "string"
|
|
31
31
|
},
|
|
32
32
|
displayName: {
|
|
33
33
|
description: ( localize(
|
|
34
|
-
|
|
34
|
+
10731,
|
|
35
35
|
"A user-friendly name for this item which is used for display in menus."
|
|
36
36
|
)),
|
|
37
37
|
type: "string"
|
|
38
38
|
},
|
|
39
39
|
description: {
|
|
40
|
-
description: ( localize(
|
|
40
|
+
description: ( localize(10732, "Description of the remote agent for use in menus and tooltips.")),
|
|
41
41
|
type: "string"
|
|
42
42
|
},
|
|
43
43
|
followUpRegex: {
|
|
44
44
|
description: ( localize(
|
|
45
|
-
|
|
45
|
+
10733,
|
|
46
46
|
"The last occurrence of pattern in an existing chat conversation is sent to the contributing extension to facilitate follow-up responses."
|
|
47
47
|
)),
|
|
48
48
|
type: "string"
|
|
49
49
|
},
|
|
50
50
|
when: {
|
|
51
|
-
description: ( localize(
|
|
51
|
+
description: ( localize(10734, "Condition which must be true to show this item.")),
|
|
52
52
|
type: "string"
|
|
53
53
|
}
|
|
54
54
|
},
|
|
@@ -37,68 +37,68 @@ function getAccessibilityHelpText(accessor) {
|
|
|
37
37
|
const focusResponseKeybinding = keybindingService.lookupKeybinding("chat.action.focus")?.getAriaLabel();
|
|
38
38
|
const focusInputKeybinding = keybindingService.lookupKeybinding("workbench.action.chat.focusInput")?.getAriaLabel();
|
|
39
39
|
content.push(( localize(
|
|
40
|
-
|
|
40
|
+
12306,
|
|
41
41
|
"Inline chat occurs within a terminal. It is useful for suggesting terminal commands. Keep in mind that AI generated code may be incorrect."
|
|
42
42
|
)));
|
|
43
43
|
content.push(( localize(
|
|
44
|
-
|
|
44
|
+
12307,
|
|
45
45
|
"It can be activated using the command: Terminal: Start Chat ({0}), which will focus the input box.",
|
|
46
46
|
startChatKeybinding
|
|
47
47
|
)));
|
|
48
48
|
content.push(makeRequestKeybinding ? ( localize(
|
|
49
|
-
|
|
49
|
+
12308,
|
|
50
50
|
"The input box is where the user can type a request and can make the request ({0}). The widget will be closed and all content will be discarded when the Escape key is pressed and the terminal will regain focus.",
|
|
51
51
|
makeRequestKeybinding
|
|
52
52
|
)) : ( localize(
|
|
53
|
-
|
|
53
|
+
12309,
|
|
54
54
|
"The input box is where the user can type a request and can make the request by tabbing to the Make Request button, which is not currently triggerable via keybindings. The widget will be closed and all content will be discarded when the Escape key is pressed and the terminal will regain focus."
|
|
55
55
|
)));
|
|
56
56
|
content.push(openAccessibleViewKeybinding ? ( localize(
|
|
57
|
-
|
|
57
|
+
12310,
|
|
58
58
|
"The response can be inspected in the accessible view ({0}).",
|
|
59
59
|
openAccessibleViewKeybinding
|
|
60
60
|
)) : ( localize(
|
|
61
|
-
|
|
61
|
+
12311,
|
|
62
62
|
"With the input box focused, inspect the response in the accessible view via the Open Accessible View command, which is currently not triggerable by a keybinding."
|
|
63
63
|
)));
|
|
64
64
|
content.push(focusResponseKeybinding ? ( localize(
|
|
65
|
-
|
|
65
|
+
12312,
|
|
66
66
|
"Reach the response from the input box ({0}).",
|
|
67
67
|
focusResponseKeybinding
|
|
68
68
|
)) : ( localize(
|
|
69
|
-
|
|
69
|
+
12313,
|
|
70
70
|
"Reach the response from the input box by tabbing or assigning a keybinding for the command: Focus Terminal Response."
|
|
71
71
|
)));
|
|
72
72
|
content.push(focusInputKeybinding ? ( localize(
|
|
73
|
-
|
|
73
|
+
12314,
|
|
74
74
|
"Reach the input box from the response ({0}).",
|
|
75
75
|
focusInputKeybinding
|
|
76
76
|
)) : ( localize(
|
|
77
|
-
|
|
77
|
+
12315,
|
|
78
78
|
"Reach the response from the input box by shift+tabbing or assigning a keybinding for the command: Focus Terminal Input."
|
|
79
79
|
)));
|
|
80
80
|
content.push(runCommandKeybinding ? ( localize(
|
|
81
|
-
|
|
81
|
+
12316,
|
|
82
82
|
"With focus in the input box or command editor, the Terminal: Run Chat Command ({0}) action.",
|
|
83
83
|
runCommandKeybinding
|
|
84
84
|
)) : ( localize(
|
|
85
|
-
|
|
85
|
+
12317,
|
|
86
86
|
"Run a command by tabbing to the button as the action is currently not triggerable by a keybinding."
|
|
87
87
|
)));
|
|
88
88
|
content.push(insertCommandKeybinding ? ( localize(
|
|
89
|
-
|
|
89
|
+
12318,
|
|
90
90
|
"With focus in the input box command editor, the Terminal: Insert Chat Command ({0}) action.",
|
|
91
91
|
insertCommandKeybinding
|
|
92
92
|
)) : ( localize(
|
|
93
|
-
|
|
93
|
+
12319,
|
|
94
94
|
"Insert a command by tabbing to the button as the action is currently not triggerable by a keybinding."
|
|
95
95
|
)));
|
|
96
96
|
content.push(( localize(
|
|
97
|
-
|
|
97
|
+
12320,
|
|
98
98
|
"Use tab to reach conditional parts like commands, status, message responses and more."
|
|
99
99
|
)));
|
|
100
100
|
content.push(( localize(
|
|
101
|
-
|
|
101
|
+
12321,
|
|
102
102
|
"Accessibility Signals can be changed via settings with a prefix of signals.chat. By default, if a request takes more than 4 seconds, you will hear a sound indicating that progress is still occurring."
|
|
103
103
|
)));
|
|
104
104
|
return content.join("\n");
|
|
@@ -33,8 +33,8 @@ import { activeChatController } from './terminalChatControllerHolder.js';
|
|
|
33
33
|
|
|
34
34
|
registerActiveXtermAction({
|
|
35
35
|
id: TerminalChatCommandId.Start,
|
|
36
|
-
title: ( localize2(
|
|
37
|
-
category: ( localize2(
|
|
36
|
+
title: ( localize2(12322, "Open Inline Chat")),
|
|
37
|
+
category: ( localize2(12323, "Terminal")),
|
|
38
38
|
keybinding: {
|
|
39
39
|
primary: KeyMod.CtrlCmd | KeyCode.KeyI,
|
|
40
40
|
when: ( ContextKeyExpr.and(TerminalContextKeys.focusInAny)),
|
|
@@ -78,7 +78,7 @@ registerActiveXtermAction({
|
|
|
78
78
|
});
|
|
79
79
|
registerActiveXtermAction({
|
|
80
80
|
id: TerminalChatCommandId.Close,
|
|
81
|
-
title: ( localize2(
|
|
81
|
+
title: ( localize2(12324, "Close")),
|
|
82
82
|
category: AbstractInlineChatAction.category,
|
|
83
83
|
keybinding: {
|
|
84
84
|
primary: KeyCode.Escape,
|
|
@@ -103,8 +103,8 @@ registerActiveXtermAction({
|
|
|
103
103
|
});
|
|
104
104
|
registerActiveXtermAction({
|
|
105
105
|
id: TerminalChatCommandId.RunCommand,
|
|
106
|
-
title: ( localize2(
|
|
107
|
-
shortTitle: ( localize2(
|
|
106
|
+
title: ( localize2(12325, "Run Chat Command")),
|
|
107
|
+
shortTitle: ( localize2(12326, "Run")),
|
|
108
108
|
category: AbstractInlineChatAction.category,
|
|
109
109
|
precondition: ( ContextKeyExpr.and(ChatContextKeys.enabled, ( ContextKeyExpr.or(
|
|
110
110
|
TerminalContextKeys.processSupported,
|
|
@@ -132,8 +132,8 @@ registerActiveXtermAction({
|
|
|
132
132
|
});
|
|
133
133
|
registerActiveXtermAction({
|
|
134
134
|
id: TerminalChatCommandId.RunFirstCommand,
|
|
135
|
-
title: ( localize2(
|
|
136
|
-
shortTitle: ( localize2(
|
|
135
|
+
title: ( localize2(12327, "Run First Chat Command")),
|
|
136
|
+
shortTitle: ( localize2(12328, "Run First")),
|
|
137
137
|
category: AbstractInlineChatAction.category,
|
|
138
138
|
precondition: ( ContextKeyExpr.and(ChatContextKeys.enabled, ( ContextKeyExpr.or(
|
|
139
139
|
TerminalContextKeys.processSupported,
|
|
@@ -161,8 +161,8 @@ registerActiveXtermAction({
|
|
|
161
161
|
});
|
|
162
162
|
registerActiveXtermAction({
|
|
163
163
|
id: TerminalChatCommandId.InsertCommand,
|
|
164
|
-
title: ( localize2(
|
|
165
|
-
shortTitle: ( localize2(
|
|
164
|
+
title: ( localize2(12329, "Insert Chat Command")),
|
|
165
|
+
shortTitle: ( localize2(12330, "Insert")),
|
|
166
166
|
category: AbstractInlineChatAction.category,
|
|
167
167
|
icon: Codicon.insert,
|
|
168
168
|
precondition: ( ContextKeyExpr.and(ChatContextKeys.enabled, ( ContextKeyExpr.or(
|
|
@@ -191,8 +191,8 @@ registerActiveXtermAction({
|
|
|
191
191
|
});
|
|
192
192
|
registerActiveXtermAction({
|
|
193
193
|
id: TerminalChatCommandId.InsertFirstCommand,
|
|
194
|
-
title: ( localize2(
|
|
195
|
-
shortTitle: ( localize2(
|
|
194
|
+
title: ( localize2(12331, "Insert First Chat Command")),
|
|
195
|
+
shortTitle: ( localize2(12332, "Insert First")),
|
|
196
196
|
category: AbstractInlineChatAction.category,
|
|
197
197
|
precondition: ( ContextKeyExpr.and(ChatContextKeys.enabled, ( ContextKeyExpr.or(
|
|
198
198
|
TerminalContextKeys.processSupported,
|
|
@@ -220,7 +220,7 @@ registerActiveXtermAction({
|
|
|
220
220
|
});
|
|
221
221
|
registerActiveXtermAction({
|
|
222
222
|
id: TerminalChatCommandId.RerunRequest,
|
|
223
|
-
title: ( localize2(
|
|
223
|
+
title: ( localize2(12333, "Rerun Request")),
|
|
224
224
|
f1: false,
|
|
225
225
|
icon: Codicon.refresh,
|
|
226
226
|
category: AbstractInlineChatAction.category,
|
|
@@ -261,7 +261,7 @@ registerActiveXtermAction({
|
|
|
261
261
|
});
|
|
262
262
|
registerActiveXtermAction({
|
|
263
263
|
id: TerminalChatCommandId.ViewInChat,
|
|
264
|
-
title: ( localize2(
|
|
264
|
+
title: ( localize2(12334, "View in Chat")),
|
|
265
265
|
category: AbstractInlineChatAction.category,
|
|
266
266
|
precondition: ( ContextKeyExpr.and(ChatContextKeys.enabled, ( ContextKeyExpr.or(
|
|
267
267
|
TerminalContextKeys.processSupported,
|
|
@@ -287,8 +287,8 @@ registerAction2(class ShowChatTerminalsAction extends Action2 {
|
|
|
287
287
|
constructor() {
|
|
288
288
|
super({
|
|
289
289
|
id: TerminalChatCommandId.ViewHiddenChatTerminals,
|
|
290
|
-
title: ( localize2(
|
|
291
|
-
category: ( localize2(
|
|
290
|
+
title: ( localize2(12335, "View Hidden Chat Terminals")),
|
|
291
|
+
category: ( localize2(12336, "Terminal")),
|
|
292
292
|
f1: true,
|
|
293
293
|
precondition: ( ContextKeyExpr.and(TerminalChatContextKeys.hasHiddenChatTerminals, ChatContextKeys.enabled)),
|
|
294
294
|
menu: [{
|
|
@@ -320,7 +320,7 @@ registerAction2(class ShowChatTerminalsAction extends Action2 {
|
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
322
|
const items = [];
|
|
323
|
-
const lastCommandLocalized = command => ( localize2(
|
|
323
|
+
const lastCommandLocalized = command => ( localize2(12337, "Last: {0}", command)).value;
|
|
324
324
|
const MAX_DETAIL_LENGTH = 80;
|
|
325
325
|
const metas = [];
|
|
326
326
|
for (const instance of ( all.values())) {
|
|
@@ -371,10 +371,10 @@ registerAction2(class ShowChatTerminalsAction extends Action2 {
|
|
|
371
371
|
});
|
|
372
372
|
}
|
|
373
373
|
const qp = quickInputService.createQuickPick();
|
|
374
|
-
qp.placeholder = ( localize2(
|
|
374
|
+
qp.placeholder = ( localize2(12338, "Select a chat terminal to show and focus")).value;
|
|
375
375
|
qp.items = items;
|
|
376
376
|
qp.canSelectMany = false;
|
|
377
|
-
qp.title = ( localize2(
|
|
377
|
+
qp.title = ( localize2(12339, "Chat Terminals")).value;
|
|
378
378
|
qp.matchOnDescription = true;
|
|
379
379
|
qp.matchOnDetail = true;
|
|
380
380
|
const qpDisposables = ( new DisposableStore());
|
|
@@ -433,14 +433,14 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({
|
|
|
433
433
|
MenuRegistry.appendMenuItem(MenuId.CommandPalette, {
|
|
434
434
|
command: {
|
|
435
435
|
id: TerminalChatCommandId.FocusMostRecentChatTerminal,
|
|
436
|
-
title: ( localize(
|
|
436
|
+
title: ( localize(12340, "Chat: Focus Most Recent Terminal"))
|
|
437
437
|
},
|
|
438
438
|
when: ChatContextKeys.inChatSession
|
|
439
439
|
});
|
|
440
440
|
MenuRegistry.appendMenuItem(MenuId.CommandPalette, {
|
|
441
441
|
command: {
|
|
442
442
|
id: TerminalChatCommandId.FocusMostRecentChatTerminalOutput,
|
|
443
|
-
title: ( localize(
|
|
443
|
+
title: ( localize(12341, "Chat: Focus Most Recent Terminal Output"))
|
|
444
444
|
},
|
|
445
445
|
when: ChatContextKeys.inChatSession
|
|
446
446
|
});
|
|
@@ -188,7 +188,7 @@ let TerminalChatWidget = class TerminalChatWidget extends Disposable {
|
|
|
188
188
|
}
|
|
189
189
|
_resetPlaceholder() {
|
|
190
190
|
const defaultAgent = this._chatAgentService.getDefaultAgent(ChatAgentLocation.Terminal);
|
|
191
|
-
this.inlineChatWidget.placeholder = defaultAgent?.description ?? ( localize(
|
|
191
|
+
this.inlineChatWidget.placeholder = defaultAgent?.description ?? ( localize(12342, "Ask about commands"));
|
|
192
192
|
}
|
|
193
193
|
async reveal() {
|
|
194
194
|
await this._createSession();
|
|
@@ -152,7 +152,7 @@ function generateAutoApproveActions(commandLine, subCommands, autoApproveResult)
|
|
|
152
152
|
const firstSubcommandFirstWord = unapprovedSubCommands.length > 0 ? unapprovedSubCommands[0].split(" ")[0] : "";
|
|
153
153
|
if (firstSubcommandFirstWord !== commandLine && !( commandsWithSubcommands.has(commandLine)) && !( commandsWithSubSubCommands.has(commandLine))) {
|
|
154
154
|
actions.push({
|
|
155
|
-
label: ( localize(
|
|
155
|
+
label: ( localize(12343, "Allow Exact Command Line in this Session")),
|
|
156
156
|
data: {
|
|
157
157
|
type: "newRule",
|
|
158
158
|
rule: {
|
|
@@ -166,7 +166,7 @@ function generateAutoApproveActions(commandLine, subCommands, autoApproveResult)
|
|
|
166
166
|
}
|
|
167
167
|
});
|
|
168
168
|
actions.push({
|
|
169
|
-
label: ( localize(
|
|
169
|
+
label: ( localize(12344, "Allow Exact Command Line in this Workspace")),
|
|
170
170
|
data: {
|
|
171
171
|
type: "newRule",
|
|
172
172
|
rule: {
|
|
@@ -180,7 +180,7 @@ function generateAutoApproveActions(commandLine, subCommands, autoApproveResult)
|
|
|
180
180
|
}
|
|
181
181
|
});
|
|
182
182
|
actions.push({
|
|
183
|
-
label: ( localize(
|
|
183
|
+
label: ( localize(12345, "Always Allow Exact Command Line")),
|
|
184
184
|
data: {
|
|
185
185
|
type: "newRule",
|
|
186
186
|
rule: {
|
|
@@ -199,15 +199,15 @@ function generateAutoApproveActions(commandLine, subCommands, autoApproveResult)
|
|
|
199
199
|
actions.push(( new Separator()));
|
|
200
200
|
}
|
|
201
201
|
actions.push({
|
|
202
|
-
label: ( localize(
|
|
203
|
-
tooltip: ( localize(
|
|
202
|
+
label: ( localize(12346, "Allow All Commands in this Session")),
|
|
203
|
+
tooltip: ( localize(12347, "Allow this tool to run in this session without confirmation.")),
|
|
204
204
|
data: {
|
|
205
205
|
type: "sessionApproval"
|
|
206
206
|
}
|
|
207
207
|
});
|
|
208
208
|
actions.push(( new Separator()));
|
|
209
209
|
actions.push({
|
|
210
|
-
label: ( localize(
|
|
210
|
+
label: ( localize(12348, "Configure Auto Approve...")),
|
|
211
211
|
data: {
|
|
212
212
|
type: "configure"
|
|
213
213
|
}
|
|
@@ -126,7 +126,7 @@ registerWorkbenchContribution2(
|
|
|
126
126
|
);
|
|
127
127
|
registerActiveInstanceAction({
|
|
128
128
|
id: TerminalChatAgentToolsCommandId.ChatAddTerminalSelection,
|
|
129
|
-
title: ( localize(
|
|
129
|
+
title: ( localize(12349, "Add Terminal Selection to Chat")),
|
|
130
130
|
precondition: ( ContextKeyExpr.and(ChatContextKeys.enabled, sharedWhenClause.terminalAvailable)),
|
|
131
131
|
menu: [{
|
|
132
132
|
id: MenuId.TerminalInstanceContext,
|
|
@@ -147,8 +147,8 @@ registerActiveInstanceAction({
|
|
|
147
147
|
chatView.attachmentModel.addContext({
|
|
148
148
|
id: `terminal-selection-${Date.now()}`,
|
|
149
149
|
kind: "generic",
|
|
150
|
-
name: ( localize(
|
|
151
|
-
fullName: ( localize(
|
|
150
|
+
name: ( localize(12350, "Terminal Selection")),
|
|
151
|
+
fullName: ( localize(12350, "Terminal Selection")),
|
|
152
152
|
value: selection,
|
|
153
153
|
icon: Codicon.terminal
|
|
154
154
|
});
|
|
@@ -11,7 +11,7 @@ import { timeout, raceCancellationError } from '@codingame/monaco-vscode-api/vsc
|
|
|
11
11
|
const AwaitTerminalToolData = {
|
|
12
12
|
id: TerminalToolId.AwaitTerminal,
|
|
13
13
|
toolReferenceName: "awaitTerminal",
|
|
14
|
-
displayName: ( localize(
|
|
14
|
+
displayName: ( localize(12351, "Await Terminal")),
|
|
15
15
|
modelDescription: "Wait for a background terminal command to complete. Returns the output, exit code, or timeout status.",
|
|
16
16
|
icon: Codicon.terminal,
|
|
17
17
|
source: ToolDataSource.Internal,
|
|
@@ -33,8 +33,8 @@ const AwaitTerminalToolData = {
|
|
|
33
33
|
class AwaitTerminalTool extends Disposable {
|
|
34
34
|
async prepareToolInvocation(_context, _token) {
|
|
35
35
|
return {
|
|
36
|
-
invocationMessage: ( localize(
|
|
37
|
-
pastTenseMessage: ( localize(
|
|
36
|
+
invocationMessage: ( localize(12352, "Awaiting terminal completion")),
|
|
37
|
+
pastTenseMessage: ( localize(12353, "Awaited terminal completion"))
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
40
|
async invoke(invocation, _countTokens, _progress, token) {
|
|
@@ -154,7 +154,7 @@ let NpmScriptAutoApprover = class NpmScriptAutoApprover extends Disposable {
|
|
|
154
154
|
isAutoApproved: true,
|
|
155
155
|
scriptName,
|
|
156
156
|
autoApproveInfo: ( new MarkdownString(( localize(
|
|
157
|
-
|
|
157
|
+
12354,
|
|
158
158
|
"Auto approved as {0} is defined in package.json",
|
|
159
159
|
`\`${scriptName}\``
|
|
160
160
|
))))
|
|
@@ -55,7 +55,7 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
55
55
|
isAutoApproved: true,
|
|
56
56
|
isAutoApproveAllowed: true,
|
|
57
57
|
disclaimers: [],
|
|
58
|
-
autoApproveInfo: ( new MarkdownString(`${( localize(
|
|
58
|
+
autoApproveInfo: ( new MarkdownString(`${( localize(12355, "Auto approved for this session"))} ([${( localize(12356, "Disable"))}](${( disableUri.toString())}))`, mdTrustSettings))
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
const trimmedCommandLine = options.commandLine.trimStart();
|
|
@@ -148,7 +148,7 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
148
148
|
const subCommandsLowerFirstWordOnly = ( subCommands.map(command => command.split(" ")[0].toLowerCase()));
|
|
149
149
|
if (!isAutoApproved && (( subCommandsLowerFirstWordOnly.some(command => promptInjectionWarningCommandsLower.includes(command))) || (isPowerShell(options.shell, options.os) && ( subCommandsLowerFirstWordOnly.some(command => promptInjectionWarningCommandsLowerPwshOnly.includes(command)))))) {
|
|
150
150
|
disclaimers.push(( localize(
|
|
151
|
-
|
|
151
|
+
12357,
|
|
152
152
|
"Web content may contain malicious code or attempt prompt injection attacks."
|
|
153
153
|
)));
|
|
154
154
|
}
|
|
@@ -189,10 +189,10 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
189
189
|
return ( asArray(result).filter(e => isAutoApproveRule(e.rule)).map(e => {
|
|
190
190
|
const escapedSourceText = e.rule.sourceText.replaceAll("$", "\\$");
|
|
191
191
|
if (e.rule.sourceTarget === "session") {
|
|
192
|
-
return localize(
|
|
192
|
+
return localize(12358, "{0} (session)", `\`${escapedSourceText}\``);
|
|
193
193
|
}
|
|
194
194
|
const settingsUri = createCommandUri(TerminalChatCommandId.OpenTerminalSettingsLink, e.rule.sourceTarget);
|
|
195
|
-
const tooltip = ( localize(
|
|
195
|
+
const tooltip = ( localize(12359, "View rule in settings"));
|
|
196
196
|
let label = escapedSourceText;
|
|
197
197
|
switch (e.rule?.sourceTarget) {
|
|
198
198
|
case ConfigurationTarget.DEFAULT:
|
|
@@ -223,9 +223,9 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
223
223
|
if (isGlobalAutoApproved) {
|
|
224
224
|
const settingsUri = createCommandUri(TerminalChatCommandId.OpenTerminalSettingsLink, "global");
|
|
225
225
|
return (new MarkdownString(`${( localize(
|
|
226
|
-
|
|
226
|
+
12360,
|
|
227
227
|
"Auto approved by setting {0}",
|
|
228
|
-
`[\`${ChatConfiguration.GlobalAutoApprove}\`](${( settingsUri.toString())} "${( localize(
|
|
228
|
+
`[\`${ChatConfiguration.GlobalAutoApprove}\`](${( settingsUri.toString())} "${( localize(12361, "View settings"))}")`
|
|
229
229
|
))}`, mdTrustSettings));
|
|
230
230
|
}
|
|
231
231
|
if (isAutoApproved) {
|
|
@@ -234,7 +234,7 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
234
234
|
{
|
|
235
235
|
if (isAutoApproveRule(commandLineResult.rule)) {
|
|
236
236
|
return (new MarkdownString(
|
|
237
|
-
localize(
|
|
237
|
+
localize(12362, "Auto approved by rule {0}", formatRuleLinks(commandLineResult)),
|
|
238
238
|
mdTrustSettings
|
|
239
239
|
));
|
|
240
240
|
}
|
|
@@ -249,12 +249,12 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
249
249
|
const uniqueRules = dedupeRules(subCommandResults);
|
|
250
250
|
if (uniqueRules.length === 1) {
|
|
251
251
|
return (new MarkdownString(
|
|
252
|
-
localize(
|
|
252
|
+
localize(12362, "Auto approved by rule {0}", formatRuleLinks(uniqueRules)),
|
|
253
253
|
mdTrustSettings
|
|
254
254
|
));
|
|
255
255
|
} else if (uniqueRules.length > 1) {
|
|
256
256
|
return (new MarkdownString(
|
|
257
|
-
localize(
|
|
257
|
+
localize(12363, "Auto approved by rules {0}", formatRuleLinks(uniqueRules)),
|
|
258
258
|
mdTrustSettings
|
|
259
259
|
));
|
|
260
260
|
}
|
|
@@ -267,7 +267,7 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
267
267
|
{
|
|
268
268
|
if (commandLineResult.rule) {
|
|
269
269
|
return (new MarkdownString(localize(
|
|
270
|
-
|
|
270
|
+
12364,
|
|
271
271
|
"Auto approval denied by rule {0}",
|
|
272
272
|
formatRuleLinks(commandLineResult)
|
|
273
273
|
), mdTrustSettings));
|
|
@@ -279,12 +279,12 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
279
279
|
const uniqueRules = dedupeRules(subCommandResults.filter(e => e.result === "denied"));
|
|
280
280
|
if (uniqueRules.length === 1) {
|
|
281
281
|
return (new MarkdownString(
|
|
282
|
-
localize(
|
|
282
|
+
localize(12364, "Auto approval denied by rule {0}", formatRuleLinks(uniqueRules)),
|
|
283
283
|
mdTrustSettings
|
|
284
284
|
));
|
|
285
285
|
} else if (uniqueRules.length > 1) {
|
|
286
286
|
return (new MarkdownString(
|
|
287
|
-
localize(
|
|
287
|
+
localize(12365, "Auto approval denied by rules {0}", formatRuleLinks(uniqueRules)),
|
|
288
288
|
mdTrustSettings
|
|
289
289
|
));
|
|
290
290
|
}
|
|
@@ -149,12 +149,12 @@ let CommandLineFileWriteAnalyzer = class CommandLineFileWriteAnalyzer extends Di
|
|
|
149
149
|
)).join(", ");
|
|
150
150
|
if (!isAutoApproveAllowed) {
|
|
151
151
|
disclaimers.push(( localize(
|
|
152
|
-
|
|
152
|
+
12366,
|
|
153
153
|
"File write operations detected that cannot be auto approved: {0}",
|
|
154
154
|
fileWritesList
|
|
155
155
|
)));
|
|
156
156
|
} else {
|
|
157
|
-
disclaimers.push(( localize(
|
|
157
|
+
disclaimers.push(( localize(12367, "File write operations detected: {0}", fileWritesList)));
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
160
|
return {
|
|
@@ -12,7 +12,7 @@ const GetTerminalLastCommandToolData = {
|
|
|
12
12
|
id: TerminalToolId.TerminalLastCommand,
|
|
13
13
|
toolReferenceName: "terminalLastCommand",
|
|
14
14
|
legacyToolReferenceFullNames: ["runCommands/terminalLastCommand"],
|
|
15
|
-
displayName: ( localize(
|
|
15
|
+
displayName: ( localize(12368, "Get Terminal Last Command")),
|
|
16
16
|
modelDescription: "Get the last command run in the active terminal.",
|
|
17
17
|
source: ToolDataSource.Internal,
|
|
18
18
|
icon: Codicon.terminal
|
|
@@ -24,8 +24,8 @@ let GetTerminalLastCommandTool = class GetTerminalLastCommandTool extends Dispos
|
|
|
24
24
|
}
|
|
25
25
|
async prepareToolInvocation(context, token) {
|
|
26
26
|
return {
|
|
27
|
-
invocationMessage: ( localize(
|
|
28
|
-
pastTenseMessage: ( localize(
|
|
27
|
+
invocationMessage: ( localize(12369, "Getting last terminal command")),
|
|
28
|
+
pastTenseMessage: ( localize(12370, "Got last terminal command"))
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
async invoke(invocation, _countTokens, _progress, token) {
|
|
@@ -10,7 +10,7 @@ const GetTerminalOutputToolData = {
|
|
|
10
10
|
id: TerminalToolId.GetTerminalOutput,
|
|
11
11
|
toolReferenceName: "getTerminalOutput",
|
|
12
12
|
legacyToolReferenceFullNames: ["runCommands/getTerminalOutput"],
|
|
13
|
-
displayName: ( localize(
|
|
13
|
+
displayName: ( localize(12371, "Get Terminal Output")),
|
|
14
14
|
modelDescription: `Get the output of a terminal command previously started with ${TerminalToolId.RunInTerminal}`,
|
|
15
15
|
icon: Codicon.terminal,
|
|
16
16
|
source: ToolDataSource.Internal,
|
|
@@ -28,8 +28,8 @@ const GetTerminalOutputToolData = {
|
|
|
28
28
|
class GetTerminalOutputTool extends Disposable {
|
|
29
29
|
async prepareToolInvocation(context, token) {
|
|
30
30
|
return {
|
|
31
|
-
invocationMessage: ( localize(
|
|
32
|
-
pastTenseMessage: ( localize(
|
|
31
|
+
invocationMessage: ( localize(12372, "Checking background terminal output")),
|
|
32
|
+
pastTenseMessage: ( localize(12373, "Checked background terminal output"))
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
async invoke(invocation, _countTokens, _progress, token) {
|
|
@@ -11,7 +11,7 @@ const GetTerminalSelectionToolData = {
|
|
|
11
11
|
id: TerminalToolId.TerminalSelection,
|
|
12
12
|
toolReferenceName: "terminalSelection",
|
|
13
13
|
legacyToolReferenceFullNames: ["runCommands/terminalSelection"],
|
|
14
|
-
displayName: ( localize(
|
|
14
|
+
displayName: ( localize(12374, "Get Terminal Selection")),
|
|
15
15
|
modelDescription: "Get the current selection in the active terminal.",
|
|
16
16
|
source: ToolDataSource.Internal,
|
|
17
17
|
icon: Codicon.terminal
|
|
@@ -23,8 +23,8 @@ let GetTerminalSelectionTool = class GetTerminalSelectionTool extends Disposable
|
|
|
23
23
|
}
|
|
24
24
|
async prepareToolInvocation(context, token) {
|
|
25
25
|
return {
|
|
26
|
-
invocationMessage: ( localize(
|
|
27
|
-
pastTenseMessage: ( localize(
|
|
26
|
+
invocationMessage: ( localize(12375, "Reading terminal selection")),
|
|
27
|
+
pastTenseMessage: ( localize(12376, "Read terminal selection"))
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
async invoke(invocation, _countTokens, _progress, token) {
|
|
@@ -9,7 +9,7 @@ import { TerminalToolId } from './toolIds.js';
|
|
|
9
9
|
const KillTerminalToolData = {
|
|
10
10
|
id: TerminalToolId.KillTerminal,
|
|
11
11
|
toolReferenceName: "killTerminal",
|
|
12
|
-
displayName: ( localize(
|
|
12
|
+
displayName: ( localize(12377, "Kill Terminal")),
|
|
13
13
|
modelDescription: `Kill a terminal by its ID. Use this to clean up terminals that are no longer needed (e.g., after stopping a server or when a long-running task completes). The terminal ID is returned by ${TerminalToolId.RunInTerminal} when isBackground=true.`,
|
|
14
14
|
icon: Codicon.terminal,
|
|
15
15
|
source: ToolDataSource.Internal,
|
|
@@ -27,8 +27,8 @@ const KillTerminalToolData = {
|
|
|
27
27
|
class KillTerminalTool extends Disposable {
|
|
28
28
|
async prepareToolInvocation(_context, _token) {
|
|
29
29
|
return {
|
|
30
|
-
invocationMessage: ( localize(
|
|
31
|
-
pastTenseMessage: ( localize(
|
|
30
|
+
invocationMessage: ( localize(12378, "Killing terminal")),
|
|
31
|
+
pastTenseMessage: ( localize(12379, "Killed terminal"))
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
async invoke(invocation, _countTokens, _progress, _token) {
|
|
@@ -521,11 +521,11 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
521
521
|
const {
|
|
522
522
|
promise: userPrompt,
|
|
523
523
|
part
|
|
524
|
-
} = this._createElicitationPart(token, execution.sessionId, ( new MarkdownString(( localize(
|
|
525
|
-
|
|
524
|
+
} = this._createElicitationPart(token, execution.sessionId, ( new MarkdownString(( localize(12380, "The terminal is awaiting input.")))), ( new MarkdownString(( localize(
|
|
525
|
+
12381,
|
|
526
526
|
"{0}\nPlease provide the required input to the terminal.\n\n",
|
|
527
527
|
confirmationPrompt.prompt
|
|
528
|
-
)))), "", ( localize(
|
|
528
|
+
)))), "", ( localize(12382, "Focus terminal")), undefined, () => {
|
|
529
529
|
this._showInstance(execution.instance.instanceId);
|
|
530
530
|
return focusTerminalSelection;
|
|
531
531
|
});
|
|
@@ -578,13 +578,13 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
578
578
|
const {
|
|
579
579
|
promise: userPrompt,
|
|
580
580
|
part
|
|
581
|
-
} = this._createElicitationPart(token, execution.sessionId, ( new MarkdownString(( localize(
|
|
582
|
-
|
|
581
|
+
} = this._createElicitationPart(token, execution.sessionId, ( new MarkdownString(( localize(12383, "The terminal is awaiting input.")))), ( new MarkdownString(( localize(
|
|
582
|
+
12384,
|
|
583
583
|
"{0}\n Do you want to send `{1}`{2} followed by `Enter` to the terminal?",
|
|
584
584
|
confirmationPrompt.prompt,
|
|
585
585
|
suggestedOptionValue,
|
|
586
586
|
isString(suggestedOption) ? "" : suggestedOption.description ? " (" + suggestedOption.description + ")" : ""
|
|
587
|
-
)))), "", ( localize(
|
|
587
|
+
)))), "", ( localize(12385, "Allow")), ( localize(12386, "Focus Terminal")), async value => {
|
|
588
588
|
let option = undefined;
|
|
589
589
|
if (value === true) {
|
|
590
590
|
option = suggestedOptionValue;
|
|
@@ -768,8 +768,8 @@ function detectsNonInteractiveHelpPattern(cursorLine) {
|
|
|
768
768
|
].some(e => e.test(cursorLine)));
|
|
769
769
|
}
|
|
770
770
|
const taskFinishMessages = [(
|
|
771
|
-
localize(
|
|
772
|
-
localize(
|
|
771
|
+
localize(12387, "Terminal will be reused by tasks, press any key to close it.")), ( localize(12388, "Terminal will be reused by tasks, press any key to close it.")), (
|
|
772
|
+
localize(12389, "Press any key to close the terminal.")), ( localize(12390, "Press any key to close the terminal."))];
|
|
773
773
|
function detectsVSCodeTaskFinishMessage(cursorLine) {
|
|
774
774
|
const normalized = cursorLine.replace(/\s/g, "").toLowerCase();
|
|
775
775
|
return (taskFinishMessages.some(msg => normalized.includes(msg.replace(/\s/g, "").toLowerCase())));
|
|
@@ -8,7 +8,7 @@ import { TerminalToolId } from './toolIds.js';
|
|
|
8
8
|
|
|
9
9
|
const ConfirmTerminalCommandToolData = {
|
|
10
10
|
id: TerminalToolId.ConfirmTerminalCommand,
|
|
11
|
-
displayName: ( localize(
|
|
11
|
+
displayName: ( localize(12391, "Confirm Terminal Command")),
|
|
12
12
|
modelDescription: [
|
|
13
13
|
"This tool allows you to get explicit user confirmation for a terminal command without executing it.",
|
|
14
14
|
"",
|
|
@@ -26,7 +26,7 @@ const ConfirmTerminalCommandToolData = {
|
|
|
26
26
|
"",
|
|
27
27
|
"After confirmation, use a tool to actually execute the command."
|
|
28
28
|
].join("\n"),
|
|
29
|
-
userDescription: ( localize(
|
|
29
|
+
userDescription: ( localize(12392, "Tool for confirming terminal commands")),
|
|
30
30
|
source: ToolDataSource.Internal,
|
|
31
31
|
icon: Codicon.shield,
|
|
32
32
|
inputSchema: {
|
|
@@ -193,9 +193,9 @@ async function createRunInTerminalToolData(accessor) {
|
|
|
193
193
|
id: TerminalToolId.RunInTerminal,
|
|
194
194
|
toolReferenceName: TOOL_REFERENCE_NAME,
|
|
195
195
|
legacyToolReferenceFullNames: LEGACY_TOOL_REFERENCE_FULL_NAMES,
|
|
196
|
-
displayName: ( localize(
|
|
196
|
+
displayName: ( localize(12393, "Run in Terminal")),
|
|
197
197
|
modelDescription,
|
|
198
|
-
userDescription: ( localize(
|
|
198
|
+
userDescription: ( localize(12394, "Run commands in the terminal")),
|
|
199
199
|
source: ToolDataSource.Internal,
|
|
200
200
|
icon: Codicon.terminal,
|
|
201
201
|
inputSchema: {
|
|
@@ -233,7 +233,7 @@ var TerminalToolStorageKeysInternal;
|
|
|
233
233
|
const telemetryIgnoredSequences = [
|
|
234
234
|
"\u001b[I",
|
|
235
235
|
"\u001b[O"];
|
|
236
|
-
const altBufferMessage = ( localize(
|
|
236
|
+
const altBufferMessage = ( localize(12395, "The command opened the alternate buffer."));
|
|
237
237
|
let RunInTerminalTool = class RunInTerminalTool extends Disposable {
|
|
238
238
|
static {
|
|
239
239
|
RunInTerminalTool_1 = this;
|
|
@@ -490,16 +490,16 @@ let RunInTerminalTool = class RunInTerminalTool extends Disposable {
|
|
|
490
490
|
cdPrefix
|
|
491
491
|
};
|
|
492
492
|
confirmationTitle = args.isBackground ? ( localize(
|
|
493
|
-
|
|
493
|
+
12396,
|
|
494
494
|
"Run `{0}` command in background within `{1}`?",
|
|
495
495
|
shellType,
|
|
496
496
|
directoryLabel
|
|
497
|
-
)) : ( localize(
|
|
497
|
+
)) : ( localize(12397, "Run `{0}` command within `{1}`?", shellType, directoryLabel));
|
|
498
498
|
} else {
|
|
499
499
|
toolSpecificData.confirmation = {
|
|
500
500
|
commandLine: commandToDisplay
|
|
501
501
|
};
|
|
502
|
-
confirmationTitle = args.isBackground ? ( localize(
|
|
502
|
+
confirmationTitle = args.isBackground ? ( localize(12398, "Run `{0}` command in background?", shellType)) : ( localize(12399, "Run `{0}` command?", shellType));
|
|
503
503
|
}
|
|
504
504
|
const commandForPresenter = extractedCd?.command ?? commandToDisplay;
|
|
505
505
|
let presenterInput = commandForPresenter;
|
|
@@ -519,13 +519,13 @@ let RunInTerminalTool = class RunInTerminalTool extends Disposable {
|
|
|
519
519
|
};
|
|
520
520
|
if (extractedCd && toolSpecificData.confirmation?.cwdLabel) {
|
|
521
521
|
confirmationTitle = args.isBackground ? ( localize(
|
|
522
|
-
|
|
522
|
+
12400,
|
|
523
523
|
"Run `{0}` command in `{1}` in background within `{2}`?",
|
|
524
524
|
presenterResult.languageDisplayName,
|
|
525
525
|
shellType,
|
|
526
526
|
toolSpecificData.confirmation.cwdLabel
|
|
527
527
|
)) : ( localize(
|
|
528
|
-
|
|
528
|
+
12401,
|
|
529
529
|
"Run `{0}` command in `{1}` within `{2}`?",
|
|
530
530
|
presenterResult.languageDisplayName,
|
|
531
531
|
shellType,
|
|
@@ -533,12 +533,12 @@ let RunInTerminalTool = class RunInTerminalTool extends Disposable {
|
|
|
533
533
|
));
|
|
534
534
|
} else {
|
|
535
535
|
confirmationTitle = args.isBackground ? ( localize(
|
|
536
|
-
|
|
536
|
+
12402,
|
|
537
537
|
"Run `{0}` command in `{1}` in background?",
|
|
538
538
|
presenterResult.languageDisplayName,
|
|
539
539
|
shellType
|
|
540
540
|
)) : ( localize(
|
|
541
|
-
|
|
541
|
+
12403,
|
|
542
542
|
"Run `{0}` command in `{1}`?",
|
|
543
543
|
presenterResult.languageDisplayName,
|
|
544
544
|
shellType
|
|
@@ -552,7 +552,7 @@ let RunInTerminalTool = class RunInTerminalTool extends Disposable {
|
|
|
552
552
|
}
|
|
553
553
|
const confirmationMessages = isFinalAutoApproved ? undefined : {
|
|
554
554
|
title: confirmationTitle,
|
|
555
|
-
message: ( new MarkdownString(( localize(
|
|
555
|
+
message: ( new MarkdownString(( localize(12404, "Explanation: {0}\n\nGoal: {1}", args.explanation, args.goal)))),
|
|
556
556
|
disclaimer,
|
|
557
557
|
terminalCustomActions: customActions
|
|
558
558
|
};
|
|
@@ -79,7 +79,7 @@ let CreateAndRunTaskTool = class CreateAndRunTaskTool {
|
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
_progress.report({
|
|
82
|
-
message: ( new MarkdownString(( localize(
|
|
82
|
+
message: ( new MarkdownString(( localize(12405, "Resolving the task"))))
|
|
83
83
|
});
|
|
84
84
|
let task;
|
|
85
85
|
const start = Date.now();
|
|
@@ -96,11 +96,11 @@ let CreateAndRunTaskTool = class CreateAndRunTaskTool {
|
|
|
96
96
|
kind: "text",
|
|
97
97
|
value: `Task not found: ${args.task.label}`
|
|
98
98
|
}],
|
|
99
|
-
toolResultMessage: ( new MarkdownString(( localize(
|
|
99
|
+
toolResultMessage: ( new MarkdownString(( localize(12406, "Task not found: `{0}`", args.task.label))))
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
102
|
_progress.report({
|
|
103
|
-
message: ( new MarkdownString(( localize(
|
|
103
|
+
message: ( new MarkdownString(( localize(12407, "Running task `{0}`", args.task.label))))
|
|
104
104
|
});
|
|
105
105
|
const raceResult = await Promise.race([
|
|
106
106
|
this._tasksService.run(task, undefined, TaskRunSource.ChatAgent),
|
|
@@ -119,7 +119,7 @@ let CreateAndRunTaskTool = class CreateAndRunTaskTool {
|
|
|
119
119
|
value: `Task started but no terminal was found for: ${args.task.label}`
|
|
120
120
|
}],
|
|
121
121
|
toolResultMessage: ( new MarkdownString(( localize(
|
|
122
|
-
|
|
122
|
+
12408,
|
|
123
123
|
"Task started but no terminal was found for: `{0}`",
|
|
124
124
|
args.task.label
|
|
125
125
|
))))
|
|
@@ -182,26 +182,26 @@ let CreateAndRunTaskTool = class CreateAndRunTaskTool {
|
|
|
182
182
|
const allTasks = await this._tasksService.tasks();
|
|
183
183
|
if (allTasks?.find(t => t._label === task.label)) {
|
|
184
184
|
return {
|
|
185
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
186
|
-
pastTenseMessage: ( new MarkdownString(( localize(
|
|
185
|
+
invocationMessage: ( new MarkdownString(( localize(12409, "Task `{0}` already exists.", task.label)))),
|
|
186
|
+
pastTenseMessage: ( new MarkdownString(( localize(12410, "Task `{0}` already exists.", task.label)))),
|
|
187
187
|
confirmationMessages: undefined
|
|
188
188
|
};
|
|
189
189
|
}
|
|
190
190
|
const activeTasks = await this._tasksService.getActiveTasks();
|
|
191
191
|
if (activeTasks.find(t => t._label === task.label)) {
|
|
192
192
|
return {
|
|
193
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
194
|
-
pastTenseMessage: ( new MarkdownString(( localize(
|
|
193
|
+
invocationMessage: ( new MarkdownString(( localize(12411, "Task `{0}` is already running.", task.label)))),
|
|
194
|
+
pastTenseMessage: ( new MarkdownString(( localize(12411, "Task `{0}` is already running.", task.label)))),
|
|
195
195
|
confirmationMessages: undefined
|
|
196
196
|
};
|
|
197
197
|
}
|
|
198
198
|
return {
|
|
199
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
200
|
-
pastTenseMessage: ( new MarkdownString(( localize(
|
|
199
|
+
invocationMessage: ( new MarkdownString(( localize(12412, "Created task `{0}`", task.label)))),
|
|
200
|
+
pastTenseMessage: ( new MarkdownString(( localize(12413, "Created task `{0}`", task.label)))),
|
|
201
201
|
confirmationMessages: {
|
|
202
|
-
title: ( localize(
|
|
202
|
+
title: ( localize(12414, "Allow task creation and execution?")),
|
|
203
203
|
message: ( new MarkdownString(( localize(
|
|
204
|
-
|
|
204
|
+
12415,
|
|
205
205
|
"A task `{0}` with command `{1}`{2} will be created.",
|
|
206
206
|
task.label,
|
|
207
207
|
task.command,
|
|
@@ -216,9 +216,9 @@ const CreateAndRunTaskToolData = {
|
|
|
216
216
|
id: TerminalToolId.CreateAndRunTask,
|
|
217
217
|
toolReferenceName: "createAndRunTask",
|
|
218
218
|
legacyToolReferenceFullNames: ["runTasks/createAndRunTask"],
|
|
219
|
-
displayName: ( localize(
|
|
219
|
+
displayName: ( localize(12416, "Create and run Task")),
|
|
220
220
|
modelDescription: "Creates and runs a build, run, or custom task for the workspace by generating or adding to a tasks.json file based on the project structure (such as package.json or README.md). If the user asks to build, run, launch and they have no tasks.json file, use this tool. If they ask to create or add a task, use this tool.",
|
|
221
|
-
userDescription: ( localize(
|
|
221
|
+
userDescription: ( localize(12417, "Create and run a task in the workspace")),
|
|
222
222
|
source: ToolDataSource.Internal,
|
|
223
223
|
inputSchema: {
|
|
224
224
|
"type": "object",
|
|
@@ -18,7 +18,7 @@ const GetTaskOutputToolData = {
|
|
|
18
18
|
id: TerminalToolId.GetTaskOutput,
|
|
19
19
|
toolReferenceName: "getTaskOutput",
|
|
20
20
|
legacyToolReferenceFullNames: ["runTasks/getTaskOutput"],
|
|
21
|
-
displayName: ( localize(
|
|
21
|
+
displayName: ( localize(12418, "Get Task Output")),
|
|
22
22
|
modelDescription: "Get the output of a task",
|
|
23
23
|
source: ToolDataSource.Internal,
|
|
24
24
|
when: TasksAvailableContext,
|
|
@@ -65,19 +65,19 @@ let GetTaskOutputTool = class GetTaskOutputTool extends Disposable {
|
|
|
65
65
|
);
|
|
66
66
|
if (!task) {
|
|
67
67
|
return {
|
|
68
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
68
|
+
invocationMessage: ( new MarkdownString(( localize(12419, "Task not found: `{0}`", args.id))))
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
const taskLabel = task._label;
|
|
72
72
|
const activeTasks = await this._tasksService.getActiveTasks();
|
|
73
73
|
if (activeTasks.includes(task)) {
|
|
74
74
|
return {
|
|
75
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
75
|
+
invocationMessage: ( new MarkdownString(( localize(12420, "The task `{0}` is already running.", taskLabel))))
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
78
|
return {
|
|
79
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
80
|
-
pastTenseMessage: ( new MarkdownString(( localize(
|
|
79
|
+
invocationMessage: ( new MarkdownString(( localize(12421, "Checking output for task `{0}`", taskLabel)))),
|
|
80
|
+
pastTenseMessage: ( new MarkdownString(( localize(12422, "Checked output for task `{0}`", taskLabel))))
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
async invoke(invocation, _countTokens, _progress, token) {
|
|
@@ -97,7 +97,7 @@ let GetTaskOutputTool = class GetTaskOutputTool extends Disposable {
|
|
|
97
97
|
kind: "text",
|
|
98
98
|
value: `Task not found: ${args.id}`
|
|
99
99
|
}],
|
|
100
|
-
toolResultMessage: ( new MarkdownString(( localize(
|
|
100
|
+
toolResultMessage: ( new MarkdownString(( localize(12419, "Task not found: `{0}`", args.id))))
|
|
101
101
|
};
|
|
102
102
|
}
|
|
103
103
|
const dependencyTasks = await resolveDependencyTasks(task, args.workspaceFolder, this._configurationService, this._tasksService);
|
|
@@ -112,7 +112,7 @@ let GetTaskOutputTool = class GetTaskOutputTool extends Disposable {
|
|
|
112
112
|
kind: "text",
|
|
113
113
|
value: `Terminal not found for task ${taskLabel}`
|
|
114
114
|
}],
|
|
115
|
-
toolResultMessage: ( new MarkdownString(( localize(
|
|
115
|
+
toolResultMessage: ( new MarkdownString(( localize(12423, "Terminal not found for task `{0}`", taskLabel))))
|
|
116
116
|
};
|
|
117
117
|
}
|
|
118
118
|
const store = ( new DisposableStore());
|
|
@@ -57,7 +57,7 @@ let RunTaskTool = class RunTaskTool {
|
|
|
57
57
|
kind: "text",
|
|
58
58
|
value: `Task not found: ${args.id}`
|
|
59
59
|
}],
|
|
60
|
-
toolResultMessage: ( new MarkdownString(( localize(
|
|
60
|
+
toolResultMessage: ( new MarkdownString(( localize(12424, "Task not found: `{0}`", args.id))))
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
const taskLabel = task._label;
|
|
@@ -68,7 +68,7 @@ let RunTaskTool = class RunTaskTool {
|
|
|
68
68
|
kind: "text",
|
|
69
69
|
value: `The task ${taskLabel} is already running.`
|
|
70
70
|
}],
|
|
71
|
-
toolResultMessage: ( new MarkdownString(( localize(
|
|
71
|
+
toolResultMessage: ( new MarkdownString(( localize(12425, "The task `{0}` is already running.", taskLabel))))
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
const raceResult = await Promise.race([
|
|
@@ -84,7 +84,7 @@ let RunTaskTool = class RunTaskTool {
|
|
|
84
84
|
kind: "text",
|
|
85
85
|
value: `Task started but no terminal was found for: ${taskLabel}`
|
|
86
86
|
}],
|
|
87
|
-
toolResultMessage: ( new MarkdownString(( localize(
|
|
87
|
+
toolResultMessage: ( new MarkdownString(( localize(12426, "Task started but no terminal was found for: `{0}`", taskLabel))))
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
90
|
const terminals = this._terminalService.instances.filter(t => ( resources.some(r => r.path === t.resource.path && r.scheme === t.resource.scheme)));
|
|
@@ -94,7 +94,7 @@ let RunTaskTool = class RunTaskTool {
|
|
|
94
94
|
kind: "text",
|
|
95
95
|
value: `Task started but no terminal was found for: ${taskLabel}`
|
|
96
96
|
}],
|
|
97
|
-
toolResultMessage: ( new MarkdownString(( localize(
|
|
97
|
+
toolResultMessage: ( new MarkdownString(( localize(12426, "Task started but no terminal was found for: `{0}`", taskLabel))))
|
|
98
98
|
};
|
|
99
99
|
}
|
|
100
100
|
const store = ( new DisposableStore());
|
|
@@ -161,29 +161,29 @@ let RunTaskTool = class RunTaskTool {
|
|
|
161
161
|
);
|
|
162
162
|
if (!task) {
|
|
163
163
|
return {
|
|
164
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
164
|
+
invocationMessage: ( new MarkdownString(( localize(12424, "Task not found: `{0}`", args.id))))
|
|
165
165
|
};
|
|
166
166
|
}
|
|
167
167
|
const taskLabel = task._label;
|
|
168
168
|
const activeTasks = await this._tasksService.getActiveTasks();
|
|
169
169
|
if (task && activeTasks.includes(task)) {
|
|
170
170
|
return {
|
|
171
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
171
|
+
invocationMessage: ( new MarkdownString(( localize(12427, "The task is already running."))))
|
|
172
172
|
};
|
|
173
173
|
}
|
|
174
174
|
if (await this._isTaskActive(task)) {
|
|
175
175
|
return {
|
|
176
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
177
|
-
pastTenseMessage: ( new MarkdownString(( localize(
|
|
176
|
+
invocationMessage: ( new MarkdownString(( localize(12428, "`{0}` is already running.", taskLabel)))),
|
|
177
|
+
pastTenseMessage: ( new MarkdownString(( localize(12429, "`{0}` was already running.", taskLabel)))),
|
|
178
178
|
confirmationMessages: undefined
|
|
179
179
|
};
|
|
180
180
|
}
|
|
181
181
|
return {
|
|
182
|
-
invocationMessage: ( new MarkdownString(( localize(
|
|
183
|
-
pastTenseMessage: ( new MarkdownString(task?.configurationProperties.isBackground ? ( localize(
|
|
182
|
+
invocationMessage: ( new MarkdownString(( localize(12430, "Running `{0}`", taskLabel)))),
|
|
183
|
+
pastTenseMessage: ( new MarkdownString(task?.configurationProperties.isBackground ? ( localize(12431, "Started `{0}`", taskLabel)) : ( localize(12432, "Ran `{0}`", taskLabel)))),
|
|
184
184
|
confirmationMessages: task ? {
|
|
185
|
-
title: ( localize(
|
|
186
|
-
message: ( localize(
|
|
185
|
+
title: ( localize(12433, "Allow task run?")),
|
|
186
|
+
message: ( localize(12434, "Allow to run the task `{0}`?", taskLabel))
|
|
187
187
|
} : undefined
|
|
188
188
|
};
|
|
189
189
|
}
|
|
@@ -193,9 +193,9 @@ const RunTaskToolData = {
|
|
|
193
193
|
id: TerminalToolId.RunTask,
|
|
194
194
|
toolReferenceName: "runTask",
|
|
195
195
|
legacyToolReferenceFullNames: ["runTasks/runTask"],
|
|
196
|
-
displayName: ( localize(
|
|
196
|
+
displayName: ( localize(12435, "Run Task")),
|
|
197
197
|
modelDescription: `Runs a VS Code task.\n\n- If you see that an appropriate task exists for building or running code, prefer to use this tool to run the task instead of using the ${TerminalToolId.RunInTerminal} tool.\n- Make sure that any appropriate build or watch task is running before trying to run tests or execute code.\n- If the user asks to run a task, use this tool to do so.`,
|
|
198
|
-
userDescription: ( localize(
|
|
198
|
+
userDescription: ( localize(12436, "Run tasks in the workspace")),
|
|
199
199
|
icon: Codicon.tools,
|
|
200
200
|
source: ToolDataSource.Internal,
|
|
201
201
|
when: TasksAvailableContext,
|
|
@@ -26,7 +26,7 @@ function toolResultMessageFromResponse(
|
|
|
26
26
|
) {
|
|
27
27
|
let resultSummary = "";
|
|
28
28
|
if (result?.exitCode) {
|
|
29
|
-
resultSummary = ( localize(
|
|
29
|
+
resultSummary = ( localize(12437, "Task `{0}` failed with exit code {1}.", taskLabel, result.exitCode));
|
|
30
30
|
} else {
|
|
31
31
|
resultSummary += `\`${taskLabel}\` task `;
|
|
32
32
|
const problemCount = toolResultDetails.length;
|