UNPKG

@nanocollective/nanocoder

Version:

A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter

66 lines 1.8 kB
/** * Circular buffer implementation for efficient log storage */ /** * Circular buffer for storing log entries with O(1) add/remove */ export class CircularBuffer { entries; head = 0; // Index of oldest entry tail = 0; // Index where next entry goes count = 0; // Current number of entries maxEntries; constructor(maxEntries) { this.maxEntries = maxEntries; this.entries = new Array(maxEntries); // Pre-allocate array } /** * Add entry to buffer - O(1) operation * Returns the removed entry if buffer was full, undefined otherwise */ add(entry) { let removed; // If buffer is full, remove oldest entry if (this.count === this.maxEntries) { removed = this.entries[this.head]; // Advance head (oldest entry pointer) this.head = (this.head + 1) % this.maxEntries; } else { this.count++; } // Write new entry at tail position - O(1) this.entries[this.tail] = entry; this.tail = (this.tail + 1) % this.maxEntries; return removed; } /** * Get all entries as array (oldest to newest) */ getAll() { const result = []; for (let i = 0; i < this.count; i++) { const entry = this.entries[(this.head + i) % this.maxEntries]; if (entry) { result.push(entry); } } return result; } /** * Get current count of entries */ getCount() { return this.count; } /** * Clear all entries */ clear() { this.entries = new Array(this.maxEntries); this.head = 0; this.tail = 0; this.count = 0; } } //# sourceMappingURL=circular-buffer.js.map