Skip to main content
Glama

Hi-AI

by su-record
autoSaveContext.ts3.62 kB
// Memory management tool - completely independent import { promises as fs } from 'fs'; import path from 'path'; interface ToolResult { content: Array<{ type: 'text'; text: string; }>; } interface ToolDefinition { name: string; description: string; inputSchema: { type: 'object'; properties: Record<string, any>; required: string[]; }; } interface MemoryItem { key: string; value: string; category: string; timestamp: string; lastAccessed: string; } const MEMORY_DIR = path.join(process.cwd(), 'memories'); const MEMORY_FILE = path.join(MEMORY_DIR, 'memories.json'); async function ensureMemoryDir() { try { await fs.access(MEMORY_DIR); } catch { await fs.mkdir(MEMORY_DIR, { recursive: true }); } } async function loadMemories(): Promise<MemoryItem[]> { try { await ensureMemoryDir(); const data = await fs.readFile(MEMORY_FILE, 'utf-8'); return JSON.parse(data); } catch { return []; } } async function saveMemories(memories: MemoryItem[]): Promise<void> { await ensureMemoryDir(); await fs.writeFile(MEMORY_FILE, JSON.stringify(memories, null, 2)); } async function addMemory(key: string, value: string, category: string = 'general'): Promise<void> { const memories = await loadMemories(); const timestamp = new Date().toISOString(); const existingIndex = memories.findIndex(m => m.key === key); if (existingIndex >= 0) { memories[existingIndex] = { key, value, category, timestamp, lastAccessed: timestamp }; } else { memories.push({ key, value, category, timestamp, lastAccessed: timestamp }); } await saveMemories(memories); } export const autoSaveContextDefinition: ToolDefinition = { name: 'auto_save_context', description: 'IMPORTANT: This tool should be automatically called when users say "커밋", "commit", "저장", "save", "checkpoint", "backup" or similar keywords. Automatically save current context', inputSchema: { type: 'object', properties: { urgency: { type: 'string', description: 'Urgency level', enum: ['low', 'medium', 'high', 'critical'] }, contextType: { type: 'string', description: 'Type of context to save', enum: ['progress', 'decisions', 'code-snippets', 'debugging', 'planning'] }, sessionId: { type: 'string', description: 'Current session identifier' }, summary: { type: 'string', description: 'Brief summary of current context' } }, required: ['urgency', 'contextType'] } }; export async function autoSaveContext(args: { urgency: string; contextType: string; sessionId?: string; summary?: string }): Promise<ToolResult> { const { urgency, contextType, sessionId, summary } = args; try { const contextData = { timestamp: new Date().toISOString(), urgency, contextType, sessionId, summary, priority: urgency === 'high' || urgency === 'critical' ? 'critical' : urgency === 'medium' ? 'important' : 'normal' }; const contextKey = sessionId ? `session_${sessionId}_context` : `auto_context_${Date.now()}`; await addMemory(contextKey, JSON.stringify(contextData), 'context'); const saveResult = { action: 'auto_save_context', urgency, contextType, sessionId, contextData, status: 'success' }; return { content: [{ type: 'text', text: `Context auto-saved successfully:\n${JSON.stringify(saveResult, null, 2)}` }] }; } catch (error) { return { content: [{ type: 'text', text: `Error auto-saving context: ${error instanceof Error ? error.message : 'Unknown error'}` }] }; } }

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/su-record/hi-ai'

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