import { createTool } from "@mastra/core/tools"; import { z } from "zod"; import type { ChatHistoryService } from "../../chat-history-service.js"; import { formatChatMessages } from "../format-chat-messages.js"; const MAX_HISTORY_READ = 300; const assistantRequestContextSchema = z.object({ chatId: z.number() }); export type AssistantRequestContext = z.infer; export const createReadChatMessagesTool = (chatHistoryService: ChatHistoryService) => createTool({ id: "read_chat_messages", description: "Загружает последние сообщения текущего Telegram-чата (включая твои ответы). " + "Вызывай, когда пользователь просит посмотреть, прочитать, пересказать или проанализировать " + "сообщения/переписку в чате, или когда без контекста беседы ответить нельзя.", inputSchema: z.object({ limit: z .number() .int() .min(1) .max(MAX_HISTORY_READ) .default(50) .describe(`Сколько последних сообщений загрузить (1–${MAX_HISTORY_READ}).`), }), requestContextSchema: assistantRequestContextSchema, execute: async ({ limit }, { requestContext }) => { const messages = chatHistoryService.latest(requestContext.get("chatId"), limit); return { count: messages.length, messages: messages.length > 0 ? formatChatMessages(messages) : "В сохранённой истории чата пока нет сообщений.", }; }, });