feat(util): Add bounded LRU cache utility #9141
Open
+90
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Add a bounded LRU (Least Recently Used) cache utility with eviction callbacks to prevent unbounded memory growth.
Fixes #9143
Problem
Several places in the codebase use unbounded
Mapobjects for caching:project/instance.tsprovider/provider.tsThese can grow without limit in long-running processes or when handling many directories/providers.
Solution
Add a reusable
createLruCacheutility that:maxEntriesoptiononEvictcallback for cleanup logicChanges
packages/opencode/src/util/cache.ts- New LRU cache utility with:maxEntrieslimit (default: Infinity for backward compatibility)onEvictcallback for disposal logiclastAccesstimestampfor...ofloopsTesting
bun turbo typecheck)Note: Manual memory testing (monitoring heap growth over time) was not performed.