Something went wrong. Try again.
source dump of claude code forked from oppi.li/claude-code
Something went wrong. Try again.
2.7 kB · 90 lines
TypeScript
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091import { getPastedTextRefNumLines } from 'src/history.js'import type { PastedContent } from 'src/utils/config.js'
const TRUNCATION_THRESHOLD = 10000 // Characters before we truncateconst PREVIEW_LENGTH = 1000 // Characters to show at start and end
type TruncatedMessage = { truncatedText: string placeholderContent: string}
/** * Determines whether the input text should be truncated. If so, it adds a * truncated text placeholder and neturns * * @param text The input text * @param nextPasteId The reference id to use * @returns The new text to display and separate placeholder content if applicable. */export function maybeTruncateMessageForInput( text: string, nextPasteId: number,): TruncatedMessage { // If the text is short enough, return it as-is if (text.length <= TRUNCATION_THRESHOLD) { return { truncatedText: text, placeholderContent: '', } }
// Calculate how much text to keep from start and end const startLength = Math.floor(PREVIEW_LENGTH / 2) const endLength = Math.floor(PREVIEW_LENGTH / 2)
// Extract the portions we'll keep const startText = text.slice(0, startLength) const endText = text.slice(-endLength)
// Calculate the number of lines that will be truncated const placeholderContent = text.slice(startLength, -endLength) const truncatedLines = getPastedTextRefNumLines(placeholderContent)
// Create a placeholder reference similar to pasted text const placeholderId = nextPasteId const placeholderRef = formatTruncatedTextRef(placeholderId, truncatedLines)
// Combine the parts with the placeholder const truncatedText = startText + placeholderRef + endText
return { truncatedText, placeholderContent, }}
function formatTruncatedTextRef(id: number, numLines: number): string { return `[...Truncated text #${id} +${numLines} lines...]`}
export function maybeTruncateInput( input: string, pastedContents: Record<number, PastedContent>,): { newInput: string; newPastedContents: Record<number, PastedContent> } { // Get the next available ID for the truncated content const existingIds = Object.keys(pastedContents).map(Number) const nextPasteId = existingIds.length > 0 ? Math.max(...existingIds) + 1 : 1
// Apply truncation const { truncatedText, placeholderContent } = maybeTruncateMessageForInput( input, nextPasteId, )
if (!placeholderContent) { return { newInput: input, newPastedContents: pastedContents } }
return { newInput: truncatedText, newPastedContents: { ...pastedContents, [nextPasteId]: { id: nextPasteId, type: 'text', content: placeholderContent, }, }, }}