diff --git a/apps/frontend/src/renderer/components/terminal/useXterm.ts b/apps/frontend/src/renderer/components/terminal/useXterm.ts index 3c46bca3..f2382c7d 100644 --- a/apps/frontend/src/renderer/components/terminal/useXterm.ts +++ b/apps/frontend/src/renderer/components/terminal/useXterm.ts @@ -139,11 +139,18 @@ export function useXterm({ terminalId, onCommandEnter, onResize, onDimensionsRea }; // Helper function to handle paste from clipboard + // Cap paste size to prevent GPU/memory pressure from extremely large clipboard contents. + const MAX_PASTE_BYTES = 1_048_576; // 1 MB const handlePasteFromClipboard = (): void => { navigator.clipboard.readText() .then((text) => { if (text) { - xterm.paste(text); + if (text.length > MAX_PASTE_BYTES) { + console.warn(`[useXterm] Paste truncated from ${text.length} to ${MAX_PASTE_BYTES} bytes`); + xterm.paste(text.slice(0, MAX_PASTE_BYTES)); + } else { + xterm.paste(text); + } } }) .catch((err) => {