Fix issue where we were passing the model content reflecting terminal line wrapping. (#14566)

This commit is contained in:
Jacob Richman
2025-12-04 20:42:57 -08:00
committed by GitHub
parent d284fa66c0
commit 934b309b4c
2 changed files with 40 additions and 2 deletions

View File

@@ -305,6 +305,24 @@ describe('ShellExecutionService', () => {
);
});
it('should not wrap long lines in the final output', async () => {
// Set a small width to force wrapping
const narrowConfig = { ...shellExecutionConfig, terminalWidth: 10 };
const longString = '123456789012345'; // 15 chars, should wrap at 10
const { result } = await simulateExecution(
'long-line-command',
(pty) => {
pty.onData.mock.calls[0][0](longString);
pty.onExit.mock.calls[0][0]({ exitCode: 0, signal: null });
},
narrowConfig,
);
expect(result.exitCode).toBe(0);
expect(result.output.trim()).toBe(longString);
});
it('should not add extra padding but preserve explicit trailing whitespace', async () => {
const { result } = await simulateExecution('cmd', (pty) => {
// "value" should not get terminal-width padding

View File

@@ -116,8 +116,28 @@ const getFullBufferText = (terminal: pkg.Terminal): string => {
const lines: string[] = [];
for (let i = 0; i < buffer.length; i++) {
const line = buffer.getLine(i);
const lineContent = line ? line.translateToString(true) : '';
lines.push(lineContent);
if (!line) {
continue;
}
// If the NEXT line is wrapped, it means it's a continuation of THIS line.
// We should not trim the right side of this line because trailing spaces
// might be significant parts of the wrapped content.
// If it's not wrapped, we trim normally.
let trimRight = true;
if (i + 1 < buffer.length) {
const nextLine = buffer.getLine(i + 1);
if (nextLine?.isWrapped) {
trimRight = false;
}
}
const lineContent = line.translateToString(trimRight);
if (line.isWrapped && lines.length > 0) {
lines[lines.length - 1] += lineContent;
} else {
lines.push(lineContent);
}
}
// Remove trailing empty lines