import { LibSQLStore } from "@mastra/libsql"; import { Memory } from "@mastra/memory"; import { ensureParentDir } from "../../libs/db.js"; interface AssistantMemoryOptions { path: string; /** Бюджет токенов на весь промпт: сверх него Mastra срезает самые старые реплики диалога. */ maxTokens: number; } /** * Контекст диалога с ботом — Mastra Memory: тред на каждый чат, только история сообщений. * Архив переписки чата живёт отдельно (SQLite бота) и читается инструментами. */ export const createAssistantMemory = ({ path, maxTokens }: AssistantMemoryOptions): Memory => { ensureParentDir(path); return new Memory({ storage: new LibSQLStore({ id: "boltun-memory", url: `file:${path}` }), options: { messageHistory: { maxTokens }, semanticRecall: false, workingMemory: { enabled: false }, generateTitle: false, }, }); }; /** Один тред на чат: вопросы разных админов и ответы бота — общий диалог (шаблон Mastra для групповых чатов). */ export const chatThreadId = (chatId: number): string => `chat:${chatId}`;