diff --git a/packages/cli/src/ui/utils/TableRenderer.test.tsx b/packages/cli/src/ui/utils/TableRenderer.test.tsx
index 4735f682b8..7c88206872 100644
--- a/packages/cli/src/ui/utils/TableRenderer.test.tsx
+++ b/packages/cli/src/ui/utils/TableRenderer.test.tsx
@@ -265,6 +265,24 @@ describe('TableRenderer', () => {
unmount();
});
+ it('handles extremely small terminal widths without crashing', async () => {
+ const headers = ['Col 1', 'Col 2'];
+ const rows = [['Data 1', 'Data 2']];
+ // This width is much smaller than the overhead, which could lead to negative column widths
+ const terminalWidth = 1;
+
+ const renderResult = await renderWithProviders(
+ ,
+ );
+ const { unmount } = renderResult;
+ // If it didn't throw RangeError: Invalid count value, the test passes
+ unmount();
+ });
+
it.each([
{
name: 'handles non-ASCII characters (emojis and Asian scripts) correctly',
diff --git a/packages/cli/src/ui/utils/TableRenderer.tsx b/packages/cli/src/ui/utils/TableRenderer.tsx
index d6dd9c3303..effce82829 100644
--- a/packages/cli/src/ui/utils/TableRenderer.tsx
+++ b/packages/cli/src/ui/utils/TableRenderer.tsx
@@ -250,7 +250,9 @@ export const TableRenderer: React.FC = ({
};
const char = chars[type];
- const borderParts = adjustedWidths.map((w) => char.horizontal.repeat(w));
+ const borderParts = adjustedWidths.map((w) =>
+ char.horizontal.repeat(Math.max(0, w || 0)),
+ );
const border = char.left + borderParts.join(char.middle) + char.right;
return {border};