Skip to content

Commit d3b5826

Browse files
authored
add rerun action to terminal chat to align w editor (microsoft#236381)
1 parent 625bae2 commit d3b5826

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChat.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export const enum TerminalChatCommandId {
1717
InsertCommand = 'workbench.action.terminal.chat.insertCommand',
1818
InsertFirstCommand = 'workbench.action.terminal.chat.insertFirstCommand',
1919
ViewInChat = 'workbench.action.terminal.chat.viewInChat',
20+
RerunRequest = 'workbench.action.terminal.chat.rerunRequest',
2021
}
2122

2223
export const MENU_TERMINAL_CHAT_WIDGET_INPUT_SIDE_TOOLBAR = MenuId.for('terminalChatWidget');

src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js';
88
import { localize2 } from '../../../../../nls.js';
99
import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js';
1010
import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';
11+
import { IChatWidgetService } from '../../../chat/browser/chat.js';
12+
import { ChatAgentLocation } from '../../../chat/common/chatAgents.js';
13+
import { IChatService } from '../../../chat/common/chatService.js';
1114
import { AbstractInlineChatAction } from '../../../inlineChat/browser/inlineChatActions.js';
1215
import { isDetachedTerminalInstance } from '../../../terminal/browser/terminal.js';
1316
import { registerActiveXtermAction } from '../../../terminal/browser/terminalActions.js';
@@ -209,6 +212,48 @@ registerActiveXtermAction({
209212
}
210213
});
211214

215+
registerActiveXtermAction({
216+
id: TerminalChatCommandId.RerunRequest,
217+
title: localize2('chat.rerun.label', "Rerun Request"),
218+
f1: false,
219+
icon: Codicon.refresh,
220+
category: AbstractInlineChatAction.category,
221+
precondition: ContextKeyExpr.and(
222+
ContextKeyExpr.or(TerminalContextKeys.processSupported, TerminalContextKeys.terminalHasBeenCreated),
223+
TerminalChatContextKeys.requestActive.negate(),
224+
),
225+
keybinding: {
226+
weight: KeybindingWeight.WorkbenchContrib,
227+
primary: KeyMod.CtrlCmd | KeyCode.KeyR
228+
},
229+
menu: {
230+
id: MENU_TERMINAL_CHAT_WIDGET_STATUS,
231+
group: '0_main',
232+
order: 5,
233+
when: ContextKeyExpr.and(TerminalChatContextKeys.inputHasText.toNegated(), TerminalChatContextKeys.requestActive.negate())
234+
},
235+
run: async (_xterm, _accessor, activeInstance) => {
236+
const chatService = _accessor.get(IChatService);
237+
const chatWidgetService = _accessor.get(IChatWidgetService);
238+
const contr = TerminalChatController.activeChatController;
239+
const model = contr?.terminalChatWidget?.inlineChatWidget.chatWidget.viewModel?.model;
240+
if (!model) {
241+
return;
242+
}
243+
244+
const lastRequest = model.getRequests().at(-1);
245+
if (lastRequest) {
246+
const widget = chatWidgetService.getWidgetBySessionId(model.sessionId);
247+
await chatService.resendRequest(lastRequest, {
248+
noCommandDetection: false,
249+
attempt: lastRequest.attempt + 1,
250+
location: ChatAgentLocation.Terminal,
251+
userSelectedModelId: widget?.input.currentLanguageModel
252+
});
253+
}
254+
}
255+
});
256+
212257
registerActiveXtermAction({
213258
id: TerminalChatCommandId.ViewInChat,
214259
title: localize2('viewInChat', 'View in Chat'),

src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ export class TerminalChatWidget extends Disposable {
127127
menu: MENU_TERMINAL_CHAT_WIDGET_STATUS,
128128
options: {
129129
buttonConfigProvider: action => ({
130+
showLabel: action.id !== TerminalChatCommandId.RerunRequest,
131+
showIcon: action.id === TerminalChatCommandId.RerunRequest,
130132
isSecondary: action.id !== TerminalChatCommandId.RunCommand && action.id !== TerminalChatCommandId.RunFirstCommand
131133
})
132134
}

0 commit comments

Comments
 (0)