Skip to content

Commit e3550cf

Browse files
authored
Merge pull request #260139 from microsoft/tyriar/r_1_103_258542_2
Cover other cases for legacy terminal toolSpecificData
2 parents 30d9251 + 15df7aa commit e3550cf

File tree

6 files changed

+49
-30
lines changed

6 files changed

+49
-30
lines changed

src/vs/workbench/contrib/chat/browser/chatAccessibilityProvider.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { AcceptToolConfirmationActionId } from './actions/chatToolActions.js';
1717
import { CancelChatActionId } from './actions/chatExecuteActions.js';
1818
import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';
1919
import { IChatToolInvocation } from '../common/chatService.js';
20+
import { migrateLegacyTerminalToolSpecificData } from '../common/chat.js';
2021

2122
export const getToolConfirmationAlert = (accessor: ServicesAccessor, toolInvocation: IChatToolInvocation[]) => {
2223
const keybindingService = accessor.get(IKeybindingService);
@@ -28,7 +29,8 @@ export const getToolConfirmationAlert = (accessor: ServicesAccessor, toolInvocat
2829
let input = '';
2930
if (v.toolSpecificData) {
3031
if (v.toolSpecificData.kind === 'terminal') {
31-
input = v.toolSpecificData.commandLine.toolEdited ?? v.toolSpecificData.commandLine.original;
32+
const terminalData = migrateLegacyTerminalToolSpecificData(v.toolSpecificData);
33+
input = terminalData.commandLine.toolEdited ?? terminalData.commandLine.original;
3234
} else if (v.toolSpecificData.kind === 'extensions') {
3335
input = JSON.stringify(v.toolSpecificData.extensions);
3436
} else if (v.toolSpecificData.kind === 'input') {

src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import { MarkdownString } from '../../../../../../base/common/htmlContent.js';
88
import { ThemeIcon } from '../../../../../../base/common/themables.js';
99
import { MarkdownRenderer } from '../../../../../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js';
1010
import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js';
11-
import { IChatMarkdownContent, IChatToolInvocation, IChatToolInvocationSerialized, type IChatTerminalToolInvocationData } from '../../../common/chatService.js';
11+
import { migrateLegacyTerminalToolSpecificData } from '../../../common/chat.js';
12+
import { IChatMarkdownContent, IChatToolInvocation, IChatToolInvocationSerialized, type IChatTerminalToolInvocationData, type ILegacyChatTerminalToolInvocationData } from '../../../common/chatService.js';
1213
import { CodeBlockModelCollection } from '../../../common/codeBlockModelCollection.js';
1314
import { IChatCodeBlockInfo } from '../../chat.js';
1415
import { ICodeBlockRenderOptions } from '../../codeBlockPart.js';
@@ -27,7 +28,7 @@ export class ChatTerminalMarkdownProgressPart extends BaseChatToolInvocationSubP
2728

2829
constructor(
2930
toolInvocation: IChatToolInvocation | IChatToolInvocationSerialized,
30-
terminalData: IChatTerminalToolInvocationData,
31+
terminalData: IChatTerminalToolInvocationData | ILegacyChatTerminalToolInvocationData,
3132
context: IChatContentPartRenderContext,
3233
renderer: MarkdownRenderer,
3334
editorPool: EditorPool,
@@ -38,6 +39,8 @@ export class ChatTerminalMarkdownProgressPart extends BaseChatToolInvocationSubP
3839
) {
3940
super(toolInvocation);
4041

42+
terminalData = migrateLegacyTerminalToolSpecificData(terminalData);
43+
4144
const command = terminalData.commandLine.userEdited ?? terminalData.commandLine.toolEdited ?? terminalData.commandLine.original;
4245

4346
let content = `\`\`\`${terminalData.language}\n${command}\n\`\`\``;

src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import { localize } from '../../../../../../nls.js';
1616
import { IContextKeyService } from '../../../../../../platform/contextkey/common/contextkey.js';
1717
import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js';
1818
import { IKeybindingService } from '../../../../../../platform/keybinding/common/keybinding.js';
19+
import { migrateLegacyTerminalToolSpecificData } from '../../../common/chat.js';
1920
import { ChatContextKeys } from '../../../common/chatContextKeys.js';
20-
import { IChatToolInvocation, type IChatTerminalToolInvocationData } from '../../../common/chatService.js';
21+
import { IChatToolInvocation, type IChatTerminalToolInvocationData, type ILegacyChatTerminalToolInvocationData } from '../../../common/chatService.js';
2122
import { CancelChatActionId } from '../../actions/chatExecuteActions.js';
2223
import { AcceptToolConfirmationActionId } from '../../actions/chatToolActions.js';
2324
import { IChatCodeBlockInfo, IChatWidgetService } from '../../chat.js';
@@ -27,16 +28,6 @@ import { IChatContentPartRenderContext } from '../chatContentParts.js';
2728
import { EditorPool } from '../chatMarkdownContentPart.js';
2829
import { BaseChatToolInvocationSubPart } from './chatToolInvocationSubPart.js';
2930

30-
/**
31-
* @deprecated This is the old API shape, we should support this for a while before removing it so
32-
* we don't break existing chats
33-
*/
34-
interface ILegacyChatTerminalToolInvocationData {
35-
kind: 'terminal';
36-
command: string;
37-
language: string;
38-
}
39-
4031
export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSubPart {
4132
public readonly domNode: HTMLElement;
4233
public readonly codeblocks: IChatCodeBlockInfo[] = [];
@@ -62,18 +53,7 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub
6253
throw new Error('Confirmation messages are missing');
6354
}
6455

65-
// Migrate forward the old tool data format
66-
if ('command' in terminalData) {
67-
terminalData = {
68-
kind: 'terminal',
69-
commandLine: {
70-
original: terminalData.command,
71-
toolEdited: undefined,
72-
userEdited: undefined
73-
},
74-
language: terminalData.language
75-
} satisfies IChatTerminalToolInvocationData;
76-
}
56+
terminalData = migrateLegacyTerminalToolSpecificData(terminalData);
7757

7858
const title = toolInvocation.confirmationMessages.title;
7959
const message = toolInvocation.confirmationMessages.message;

src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { AccessibleViewProviderId, AccessibleViewType, IAccessibleViewContentPro
1111
import { IAccessibleViewImplementation } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js';
1212
import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';
1313
import { AccessibilityVerbositySettingId } from '../../accessibility/browser/accessibilityConfiguration.js';
14+
import { migrateLegacyTerminalToolSpecificData } from '../common/chat.js';
1415
import { ChatContextKeys } from '../common/chatContextKeys.js';
1516
import { isResponseVM } from '../common/chatViewModel.js';
1617
import { ChatTreeItem, IChatWidget, IChatWidgetService } from './chat.js';
@@ -87,15 +88,18 @@ class ChatResponseAccessibleProvider extends Disposable implements IAccessibleVi
8788
const message = typeof toolInvocation.confirmationMessages.message === 'string' ? toolInvocation.confirmationMessages.message : stripIcons(renderAsPlaintext(toolInvocation.confirmationMessages.message));
8889
let input = '';
8990
if (toolInvocation.toolSpecificData) {
90-
input = toolInvocation.toolSpecificData?.kind === 'terminal'
91-
? toolInvocation.toolSpecificData.commandLine.userEdited ?? toolInvocation.toolSpecificData.commandLine.toolEdited ?? toolInvocation.toolSpecificData.commandLine.original
92-
: toolInvocation.toolSpecificData?.kind === 'extensions'
91+
if (toolInvocation.toolSpecificData?.kind === 'terminal') {
92+
const terminalData = migrateLegacyTerminalToolSpecificData(toolInvocation.toolSpecificData);
93+
input = terminalData.commandLine.userEdited ?? terminalData.commandLine.toolEdited ?? terminalData.commandLine.original;
94+
} else {
95+
input = toolInvocation.toolSpecificData?.kind === 'extensions'
9396
? JSON.stringify(toolInvocation.toolSpecificData.extensions)
9497
: toolInvocation.toolSpecificData?.kind === 'todoList'
9598
? JSON.stringify(toolInvocation.toolSpecificData.todoList)
9699
: toolInvocation.toolSpecificData?.kind === 'pullRequest'
97100
? JSON.stringify(toolInvocation.toolSpecificData)
98101
: JSON.stringify(toolInvocation.toolSpecificData.rawInput);
102+
}
99103
}
100104
responseContent += `${title}`;
101105
if (input) {

src/vs/workbench/contrib/chat/common/chat.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import type { IChatTerminalToolInvocationData, ILegacyChatTerminalToolInvocationData } from './chatService.js';
67
import { ChatModeKind } from './constants.js';
78

89
export function checkModeOption(mode: ChatModeKind, option: boolean | ((mode: ChatModeKind) => boolean) | undefined): boolean | undefined {
@@ -14,3 +15,22 @@ export function checkModeOption(mode: ChatModeKind, option: boolean | ((mode: Ch
1415
}
1516
return option;
1617
}
18+
19+
/**
20+
* @deprecated This is the old API shape, we should support this for a while before removing it so
21+
* we don't break existing chats
22+
*/
23+
export function migrateLegacyTerminalToolSpecificData(data: IChatTerminalToolInvocationData | ILegacyChatTerminalToolInvocationData): IChatTerminalToolInvocationData {
24+
if ('command' in data) {
25+
data = {
26+
kind: 'terminal',
27+
commandLine: {
28+
original: data.command,
29+
toolEdited: undefined,
30+
userEdited: undefined
31+
},
32+
language: data.language
33+
} satisfies IChatTerminalToolInvocationData;
34+
}
35+
return data;
36+
}

src/vs/workbench/contrib/chat/common/chatService.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,14 +280,24 @@ export interface IChatTerminalToolInvocationData {
280280
language: string;
281281
}
282282

283+
/**
284+
* @deprecated This is the old API shape, we should support this for a while before removing it so
285+
* we don't break existing chats
286+
*/
287+
export interface ILegacyChatTerminalToolInvocationData {
288+
kind: 'terminal';
289+
command: string;
290+
language: string;
291+
}
292+
283293
export interface IChatToolInputInvocationData {
284294
kind: 'input';
285295
rawInput: any;
286296
}
287297

288298
export interface IChatToolInvocation {
289299
presentation: IPreparedToolInvocation['presentation'];
290-
toolSpecificData?: IChatTerminalToolInvocationData | IChatToolInputInvocationData | IChatExtensionsContent | IChatPullRequestContent | IChatTodoListContent;
300+
toolSpecificData?: IChatTerminalToolInvocationData | ILegacyChatTerminalToolInvocationData | IChatToolInputInvocationData | IChatExtensionsContent | IChatPullRequestContent | IChatTodoListContent;
291301
/** Presence of this property says that confirmation is required */
292302
confirmationMessages?: IToolConfirmationMessages;
293303
confirmed: DeferredPromise<boolean>;

0 commit comments

Comments
 (0)