@runic-labs/cache
सिग्नेचर-कुंजीबद्ध आर्टिफैक्ट स्टोरेज — इन-मेमोरी और फ़ाइल-आधारित।
@runic-labs/cache एक सामान्यीकृत निर्णय सिग्नेचर को उससे निर्मित आर्टिफैक्ट से मैप करता है। अधिकांश इंटीग्रेशन को इस पैकेज की सीधे आवश्यकता नहीं होती — @runic-labs/sdk इसे रैप करता है — लेकिन यह कस्टम स्टोर सेटअप या कैश के आंतरिक हिस्सों की जाँच के लिए उपयोगी है।
npm install @runic-labs/cachepnpm add @runic-labs/cacheyarn add @runic-labs/cachebun add @runic-labs/cachesignature(decision)
एक Decision को सामान्यीकृत करता है और उसका SHA-256 सिग्नेचर लौटाता है। params में ऑब्जेक्ट कुंजियों को पुनरावर्ती रूप से सॉर्ट किया जाता है, इसलिए कुंजी क्रम कभी हैश को प्रभावित नहीं करता। पूरे एल्गोरिदम के लिए यह कैसे काम करता है देखें।
import { signature } from "@runic-labs/cache";
signature({ intent: "summarize_pr", params: { repo: "acme/widgets", pr: 482 } });
// => same hash regardless of param key order
createCache(store?)
import { createCache, FileCacheStore, defaultCacheFilePath } from "@runic-labs/cache";
const cache = createCache(new FileCacheStore({ filePath: defaultCacheFilePath() }));
यदि कोई स्टोर पास नहीं किया जाता, तो डिफ़ॉल्ट रूप से .runic/cache.json (या $RUNIC_HOME/cache.json) के अंतर्गत FileCacheStore उपयोग होता है।
get(decision)?CachedEntry | null
Looks up a decision. Bumps hit stats on a hit.
CachedEntry | nullset(decision, artifact, meta)?CachedEntry
Stores an artifact for a decision. meta = { tokensSpent }.
CachedEntrylist()?CachedEntry[]
All entries currently in the store.
CachedEntry[]clear()?void
Removes all entries.
voidस्टोरेज बैकएंड
MemoryCacheStore
केवल इन-मेमोरी, प्रक्रिया के जीवनकाल तक रहता है। इसका उपयोग बेंचमार्क और परीक्षण, दोनों द्वारा किया जाता है, इसलिए रन स्व-निहित और दोहराने योग्य होते हैं।
import { createCache, MemoryCacheStore } from "@runic-labs/cache";
const cache = createCache(new MemoryCacheStore({ staleAfterMs: 60_000 }));
FileCacheStore
JSON फ़ाइल में स्थायी रूप से सहेजता है, ताकि CLI प्रक्रिया और एजेंट प्रक्रिया किसी चल रहे सर्वर के बिना एक ही कैश पढ़ सकें।
import { createCache, FileCacheStore } from "@runic-labs/cache";
const cache = createCache(new FileCacheStore({ filePath: "./my-agent/.runic/cache.json" }));
किसी भ्रष्ट या आंशिक रूप से लिखी गई फ़ाइल को त्रुटि फेंकने के बजाय खाली माना जाता है — लिखने के बीच में होने वाला क्रैश अगली रीड को कभी बाधित नहीं करना चाहिए।
अपना CacheStore लागू करना
दोनों अंतर्निहित स्टोर एक ही छोटे इंटरफ़ेस को लागू करते हैं, इसलिए Redis- या SQLite-आधारित स्टोर एक ड्रॉप-इन प्रतिस्थापन है:
interface CacheStore {
get(signature: string): CachedEntry | null;
set(signature: string, artifact: unknown, meta: { tokensSpent: number }): CachedEntry;
touch(signature: string): CachedEntry | null;
list(): CachedEntry[];
clear(): void;
}
हर कैश हिट पर hitCount और lastUsedAt बढ़ाने के लिए touch को आंतरिक रूप से कॉल किया जाता है — इसे अपने चुने हुए बैकिंग स्टोर के विरुद्ध रीड-मॉडिफ़ाई-राइट के रूप में लागू करें।