Skip to content

Commit 1274f2b

Browse files
authored
release: fix non-edit codeblocks in thinking (#298521)
fix non-edit codeblocks in thinking
1 parent 58bc1a8 commit 1274f2b

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

src/vs/workbench/contrib/chat/browser/widget/chatListRenderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import { AccessibilitySignal, IAccessibilitySignalService } from '../../../../..
5050
import { IChatEntitlementService } from '../../../../services/chat/common/chatEntitlementService.js';
5151
import { IWorkbenchIssueService } from '../../../issue/common/issue.js';
5252
import { CodiconActionViewItem } from '../../../notebook/browser/view/cellParts/cellActionView.js';
53-
import { annotateSpecialMarkdownContent, extractSubAgentInvocationIdFromText, hasCodeblockUriTag } from '../../common/widget/annotations.js';
53+
import { annotateSpecialMarkdownContent, extractSubAgentInvocationIdFromText, hasEditCodeblockUriTag } from '../../common/widget/annotations.js';
5454
import { checkModeOption } from '../../common/chat.js';
5555
import { IChatAgentMetadata } from '../../common/participants/chatAgents.js';
5656
import { ChatContextKeys } from '../../common/actions/chatContextKeys.js';
@@ -1484,7 +1484,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
14841484
if (part.kind !== 'markdownContent') {
14851485
return false;
14861486
}
1487-
return hasCodeblockUriTag(part.content.value);
1487+
return hasEditCodeblockUriTag(part.content.value);
14881488
}
14891489

14901490
private isCodeblockComplete(part: IChatRendererContent, element: ChatTreeItem): boolean {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,10 @@ export function hasCodeblockUriTag(text: string): boolean {
222222
return text.includes('<vscode_codeblock_uri');
223223
}
224224

225+
export function hasEditCodeblockUriTag(text: string): boolean {
226+
return text.includes('<vscode_codeblock_uri isEdit');
227+
}
228+
225229
export function extractVulnerabilitiesFromText(text: string): { newText: string; vulnerabilities: IMarkdownVulnerability[] } {
226230
const vulnerabilities: IMarkdownVulnerability[] = [];
227231
let newText = text;

src/vs/workbench/contrib/chat/test/common/widget/annotations.test.ts

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { URI } from '../../../../../../base/common/uri.js';
99
import { assertSnapshot } from '../../../../../../base/test/common/snapshot.js';
1010
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../base/test/common/utils.js';
1111
import { IChatMarkdownContent, IChatResponseCodeblockUriPart } from '../../../common/chatService/chatService.js';
12-
import { annotateSpecialMarkdownContent, extractCodeblockUrisFromText, extractSubAgentInvocationIdFromText, extractVulnerabilitiesFromText, isInsideCodeContext } from '../../../common/widget/annotations.js';
12+
import { annotateSpecialMarkdownContent, extractCodeblockUrisFromText, extractSubAgentInvocationIdFromText, extractVulnerabilitiesFromText, hasEditCodeblockUriTag, hasCodeblockUriTag, isInsideCodeContext } from '../../../common/widget/annotations.js';
1313

1414
function content(str: string): IChatMarkdownContent {
1515
return { kind: 'markdownContent', content: new MarkdownString(str) };
@@ -240,4 +240,54 @@ suite('Annotations', function () {
240240
assert.ok(md.content.value.endsWith('index.ts'));
241241
});
242242
});
243+
244+
suite('hasEditCodeblockUriTag', () => {
245+
test('returns true for edit codeblock URI tags', () => {
246+
const editTag = '<vscode_codeblock_uri isEdit>file:///test.ts</vscode_codeblock_uri>';
247+
assert.strictEqual(hasEditCodeblockUriTag(editTag), true);
248+
});
249+
250+
test('returns false for non-edit codeblock URI tags', () => {
251+
const nonEditTag = '<vscode_codeblock_uri>file:///test.ts</vscode_codeblock_uri>';
252+
assert.strictEqual(hasEditCodeblockUriTag(nonEditTag), false);
253+
});
254+
255+
test('returns true for edit codeblock URI tags with subAgentInvocationId', () => {
256+
const editTagWithSubAgent = '<vscode_codeblock_uri isEdit subAgentInvocationId="agent-123">file:///test.ts</vscode_codeblock_uri>';
257+
assert.strictEqual(hasEditCodeblockUriTag(editTagWithSubAgent), true);
258+
});
259+
260+
test('returns false for non-edit codeblock URI tags with subAgentInvocationId', () => {
261+
const nonEditTagWithSubAgent = '<vscode_codeblock_uri subAgentInvocationId="agent-123">file:///test.ts</vscode_codeblock_uri>';
262+
assert.strictEqual(hasEditCodeblockUriTag(nonEditTagWithSubAgent), false);
263+
});
264+
265+
test('returns false for text without codeblock URI tags', () => {
266+
assert.strictEqual(hasEditCodeblockUriTag('some plain text'), false);
267+
});
268+
269+
test('returns false for text with only partial tag prefix', () => {
270+
assert.strictEqual(hasEditCodeblockUriTag('<vscode_codebloc'), false);
271+
});
272+
273+
test('returns true for text containing multiple edit codeblock URI tags', () => {
274+
const multipleEditTags = 'some text <vscode_codeblock_uri isEdit>file:///test.ts</vscode_codeblock_uri> more <vscode_codeblock_uri isEdit>file:///other.ts</vscode_codeblock_uri>';
275+
assert.strictEqual(hasEditCodeblockUriTag(multipleEditTags), true);
276+
});
277+
278+
test('returns false for text containing only non-edit codeblock URI tags', () => {
279+
const multipleNonEditTags = 'some text <vscode_codeblock_uri>file:///test.ts</vscode_codeblock_uri> more <vscode_codeblock_uri>file:///other.ts</vscode_codeblock_uri>';
280+
assert.strictEqual(hasEditCodeblockUriTag(multipleNonEditTags), false);
281+
});
282+
283+
test('matches hasCodeblockUriTag for edit tags', () => {
284+
const editTag = '<vscode_codeblock_uri isEdit>file:///test.ts</vscode_codeblock_uri>';
285+
assert.strictEqual(hasEditCodeblockUriTag(editTag), hasCodeblockUriTag(editTag));
286+
});
287+
288+
test('differs from hasCodeblockUriTag for non-edit tags', () => {
289+
const nonEditTag = '<vscode_codeblock_uri>file:///test.ts</vscode_codeblock_uri>';
290+
assert.notStrictEqual(hasEditCodeblockUriTag(nonEditTag), hasCodeblockUriTag(nonEditTag));
291+
});
292+
});
243293
});

0 commit comments

Comments
 (0)