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

  1. Increase maxBufferSize when constructing the parser to exceed the expected response size.
  2. Reduce the response size: limit items per request or page the generation into multiple streams.
  3. Verify the stream is not stuck in a loop producing endless text; add upstream timeouts/max-token limits.
  4. 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

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


AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29). Data as JSON: /api/errors/22f81c737cebda72. Report an issue: GitHub.