Skip to main content
Glama
integration.test.ts2.73 kB
import * as tf from '@tensorflow/tfjs-node'; import * as fs from 'fs/promises'; import * as path from 'path'; import * as os from 'os'; import { HopeMemoryServer } from '../index.js'; import { unwrapTensor } from '../types.js'; describe('HopeMemoryServer integration smoke tests', () => { let server: HopeMemoryServer; let tempDir: string; beforeAll(async () => { tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'hope-memory-test-')); }); afterAll(async () => { await fs.rm(tempDir, { recursive: true, force: true }); }); beforeEach(() => { server = new HopeMemoryServer({ memoryPath: tempDir }); }); afterEach(async () => { tf.disposeVariables(); // ensure auto-saved memory does not leak between tests await fs.rm(path.join(tempDir, 'memory_state.json'), { force: true }); }); test('ensureInitialized creates a model and memory scaffolding', async () => { await (server as any).ensureInitialized(); const memoryState = (server as any).memoryState; expect(memoryState).toBeDefined(); const shortTerm = unwrapTensor(memoryState.shortTerm); expect(shortTerm.shape).toHaveLength(2); expect(shortTerm.shape[1]).toBeGreaterThan(0); const longTerm = unwrapTensor(memoryState.longTerm); expect(longTerm.shape).toHaveLength(2); expect(longTerm.shape[1]).toBeGreaterThan(0); }); test('serialize and restore memory state round trip', async () => { await (server as any).ensureInitialized(); const serialized = (server as any).serializeMemoryState(); expect(serialized).toHaveProperty('shortTerm'); expect(Array.isArray(serialized.shortTerm)).toBe(true); // mutate memory state by restoring what we just serialized (server as any).restoreSerializedMemoryState(serialized); const restored = (server as any).serializeMemoryState(); expect(restored.shortTerm.length).toBe(serialized.shortTerm.length); expect(restored.meta.length).toBe(serialized.meta.length); }); test('saveMemoryState persists state to disk and loadMemoryState restores it', async () => { await (server as any).ensureInitialized(); await (server as any).saveMemoryState(); const checkpointPath = path.join(tempDir, 'memory_state.json'); const stat = await fs.stat(checkpointPath); expect(stat.isFile()).toBe(true); // reset memory to a fresh empty state before loading const freshState = (server as any).initializeEmptyState(); (server as any).memoryState = freshState; await (server as any).loadMemoryState(); const reloaded = (server as any).serializeMemoryState(); expect(reloaded.shortTerm.length).toBeGreaterThanOrEqual(0); expect(reloaded.shapes).toBeDefined(); }); });

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/henryhawke/mcp-titan'

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