Skip to content

Commit 9c3c935

Browse files
authored
Merge pull request #2427 from KJ7LNW/fix-vscode-lm-content-preservation
fix: preserve content integrity in VS Code LM provider
1 parent 9dead72 commit 9c3c935

File tree

1 file changed

+3
-45
lines changed

1 file changed

+3
-45
lines changed

src/api/providers/vscode-lm.ts

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -282,54 +282,13 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
282282
return this.client
283283
}
284284

285-
private cleanTerminalOutput(text: string): string {
286-
if (!text) {
287-
return ""
288-
}
289-
290-
return (
291-
text
292-
// Нормализуем переносы строк
293-
.replace(/\r\n/g, "\n")
294-
.replace(/\r/g, "\n")
295-
296-
// Удаляем ANSI escape sequences
297-
.replace(/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g, "") // Полный набор ANSI sequences
298-
.replace(/\x9B[0-?]*[ -/]*[@-~]/g, "") // CSI sequences
299-
300-
// Удаляем последовательности установки заголовка терминала и прочие OSC sequences
301-
.replace(/\x1B\][0-9;]*(?:\x07|\x1B\\)/g, "")
302-
303-
// Удаляем управляющие символы
304-
.replace(/[\x00-\x09\x0B-\x0C\x0E-\x1F\x7F]/g, "")
305-
306-
// Удаляем escape-последовательности VS Code
307-
.replace(/\x1B[PD].*?\x1B\\/g, "") // DCS sequences
308-
.replace(/\x1B_.*?\x1B\\/g, "") // APC sequences
309-
.replace(/\x1B\^.*?\x1B\\/g, "") // PM sequences
310-
.replace(/\x1B\[[\d;]*[HfABCDEFGJKST]/g, "") // Cursor movement and clear screen
311-
312-
// Удаляем пути Windows и служебную информацию
313-
.replace(/^(?:PS )?[A-Z]:\\[^\n]*$/gm, "")
314-
.replace(/^;?Cwd=.*$/gm, "")
315-
316-
// Очищаем экранированные последовательности
317-
.replace(/\\x[0-9a-fA-F]{2}/g, "")
318-
.replace(/\\u[0-9a-fA-F]{4}/g, "")
319-
320-
// Финальная очистка
321-
.replace(/\n{3,}/g, "\n\n") // Убираем множественные пустые строки
322-
.trim()
323-
)
324-
}
325-
326285
private cleanMessageContent(content: any): any {
327286
if (!content) {
328287
return content
329288
}
330289

331290
if (typeof content === "string") {
332-
return this.cleanTerminalOutput(content)
291+
return content
333292
}
334293

335294
if (Array.isArray(content)) {
@@ -352,16 +311,15 @@ export class VsCodeLmHandler extends BaseProvider implements SingleCompletionHan
352311
this.ensureCleanState()
353312
const client: vscode.LanguageModelChat = await this.getClient()
354313

355-
// Clean system prompt and messages
356-
const cleanedSystemPrompt = this.cleanTerminalOutput(systemPrompt)
314+
// Process messages
357315
const cleanedMessages = messages.map((msg) => ({
358316
...msg,
359317
content: this.cleanMessageContent(msg.content),
360318
}))
361319

362320
// Convert Anthropic messages to VS Code LM messages
363321
const vsCodeLmMessages: vscode.LanguageModelChatMessage[] = [
364-
vscode.LanguageModelChatMessage.Assistant(cleanedSystemPrompt),
322+
vscode.LanguageModelChatMessage.Assistant(systemPrompt),
365323
...convertToVsCodeLmMessages(cleanedMessages),
366324
]
367325

0 commit comments

Comments
 (0)