eyaltoledano/claude-task-master · error · StreamingError
BUFFER_SIZE_EXCEEDED
BUFFER_SIZE_EXCEEDED
Error message
Buffer size exceeded: ${newSize} bytes > ${this.maxSize} bytes maximum What it means
BufferValidator.validateChunk tracks the cumulative UTF-8 byte size of buffered stream text and throws a StreamingError with code BUFFER_SIZE_EXCEEDED once adding a new chunk would push the buffer past maxSize (configured as maxBufferSize). This guard prevents unbounded memory growth when a stream never terminates or produces enormous output.
Source
Thrown at src/utils/stream-parser.js:337
}
// If we have some items from streaming, continue with those
}
}
/**
* Buffer size validator
*/
class BufferSizeValidator {
constructor(maxSize) {
this.maxSize = maxSize;
this.currentSize = 0;
}
validateChunk(existingText, newChunk) {
const newSize = Buffer.byteLength(existingText + newChunk, 'utf8');
if (newSize > this.maxSize) {
throw new StreamingError(
`Buffer size exceeded: ${newSize} bytes > ${this.maxSize} bytes maximum`,
STREAMING_ERROR_CODES.BUFFER_SIZE_EXCEEDED
);
}
this.currentSize = newSize;
}
}
/**
* Main orchestrator for stream parsing
*/
class StreamParserOrchestrator {
constructor(config) {
this.config = new StreamParserConfig(config);
this.progressTracker = new ProgressTracker(this.config);
this.bufferValidator = new BufferSizeValidator(this.config.maxBufferSize);
this.jsonParser = new JSONStreamParser(this.config, this.progressTracker);View on GitHub (pinned to c0c98d367c)
Solutions
- Increase maxBufferSize when constructing the parser to exceed the expected response size.
- Reduce the response size: limit items per request or page the generation into multiple streams.
- Verify the stream is not stuck in a loop producing endless text; add upstream timeouts/max-token limits.
- If you must handle arbitrarily large inputs, process the stream in segments with separate parsers instead of one buffer.
Example fix
// before
new StreamParser({ jsonPaths: ['$.items'], maxBufferSize: 1024 * 1024 }) // 1 MB
// after
new StreamParser({ jsonPaths: ['$.items'], maxBufferSize: 10 * 1024 * 1024 }) // 10 MB Defensive patterns
Strategy: try-catch
Validate before calling
function assertBufferSizeFits(maxBufferSize, maxExpectedResponseBytes) {
if (maxBufferSize < maxExpectedResponseBytes) {
throw new RangeError(`maxBufferSize (${maxBufferSize}) is smaller than the largest expected response (${maxExpectedResponseBytes} bytes)`);
}
} Type guard
function fitsInBuffer(text, maxSize) {
return Buffer.byteLength(text, 'utf8') <= maxSize;
} Try / catch
try {
return await parser.parseStream(stream);
} catch (err) {
if (err.code === 'BUFFER_SIZE_EXCEEDED') {
return new StreamParser({ ...options, maxBufferSize: options.maxBufferSize * 4 }).parseStream(stream);
}
throw err;
} Prevention
- Size maxBufferSize above your worst-case expected response (remember UTF-8 multi-byte chars).
- Cap generation size via prompt limits / max tokens instead of relying on the buffer.
- Monitor for looping/stuck streams with upstream timeouts.
- If payloads are inherently large, chunk the work across multiple parser runs.
When it happens
Trigger: Streaming a very large AI response larger than maxBufferSize; a malformed/looping stream that never completes; setting maxBufferSize too small for the expected payload size; multi-byte characters making byte size exceed expectations.
Common situations: Default buffer size (often 1-10 MB) too small for large batch generations; run-away model output; forgetting to raise maxBufferSize after increasing expected output length in prompts.
Related errors
- Failed to generate tasks using generateObject fallback
- Schema is required for object streaming
- jsonPaths is required and must be an array
- jsonPaths array cannot be empty
- STREAM_NOT_ITERABLE
AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29).
Data as JSON: /api/errors/22f81c737cebda72.
Report an issue: GitHub.