import { stringWidth } from './stringWidth.js' // During streaming, text grows but completed lines are immutable. // Caching stringWidth per-line avoids re-measuring hundreds of // unchanged lines on every token (~50x reduction in stringWidth calls). const cache = new Map() const MAX_CACHE_SIZE = 4096 export function lineWidth(line: string): number { const cached = cache.get(line) if (cached !== undefined) return cached const width = stringWidth(line) // Evict when cache grows too large (e.g. after many different responses). // Simple full-clear is fine — the cache repopulates in one frame. if (cache.size >= MAX_CACHE_SIZE) { cache.clear() } cache.set(line, width) return width }