Skip to main content
Glama
cache-manager.ts2.71 kB
/** * Cache Manager - Manages all message caches * * NOTE: "MessageCache" = in-memory message storage (not SessionInfo) */ import { MessageCache } from "./message-cache.js"; import { getChildLogger } from "../utils/logger.js"; const logger = getChildLogger("cache:manager"); /** * Manages all message caches (one per sessionId) * Top-level cache coordinator * * Each MessageCache links to a SessionInfo via sessionId */ export class CacheManager { private caches = new Map<string, MessageCache>(); /** * Get or create message cache for a session (called by Iris) * NOTE: Renamed from createSession to be explicit about what it does */ getOrCreateCache( sessionId: string, fromTeam: string, toTeam: string, ): MessageCache { if (this.caches.has(sessionId)) { logger.debug({ sessionId, }, "MessageCache already exists, returning existing"); return this.caches.get(sessionId)!; } const cache = new MessageCache(sessionId, fromTeam, toTeam); this.caches.set(sessionId, cache); logger.info({ sessionId, fromTeam, toTeam, totalCaches: this.caches.size, }, "MessageCache created in manager"); return cache; } /** * Get message cache by session ID */ getCache(sessionId: string): MessageCache | null { return this.caches.get(sessionId) ?? null; } /** * Get all message caches */ getAllCaches(): MessageCache[] { return Array.from(this.caches.values()); } /** * Delete message cache (available but not currently used) */ deleteCache(sessionId: string): void { const cache = this.caches.get(sessionId); if (cache) { cache.destroy(); this.caches.delete(sessionId); logger.info({ sessionId, remainingCaches: this.caches.size, }, "MessageCache deleted"); } else { logger.warn({ sessionId, }, "Attempted to delete non-existent MessageCache"); } } /** * Get aggregate stats across all caches */ getStats() { const allCaches = this.getAllCaches(); return { totalCaches: this.caches.size, totalEntries: allCaches.reduce((sum, c) => { return sum + c.getAllEntries().length; }, 0), cacheStats: allCaches.map((c) => ({ sessionId: c.sessionId, fromTeam: c.fromTeam, toTeam: c.toTeam, ...c.getStats(), })), }; } /** * Cleanup all message caches */ destroyAll(): void { logger.info({ totalCaches: this.caches.size, }, "Destroying all message caches"); for (const cache of this.caches.values()) { cache.destroy(); } this.caches.clear(); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jenova-marie/iris-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server