Files
boltun-ai/CLAUDE.md
yunogasai 99c4660da9 Telegram-бот Boltun AI на grammY + Mastra
- Отвечает только администраторам из ADMIN_IDS
- Личности на чат: встроенные и пользовательские (/personas, /persona, /persona_add, /persona_del)
- Вопросы через /ask, упоминание, ответ боту или личку
- Сохраняет сообщения чата в SQLite; агент по просьбе читает их инструментом read_chat_messages
- Модели через OpenRouter (по умолчанию DeepSeek)
- Слои: libs, repositories, services, bot/handlers
- Dockerfile для деплоя в Dokploy

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 18:31:44 +02:00

42 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Boltun AI
Telegram-бот на Node.js + TypeScript + grammY, AI через Mastra (модели через OpenRouter, например DeepSeek). Хранилище — SQLite (better-sqlite3).
## Команды
- `pnpm dev` — запуск с автоперезагрузкой (читает `.env`)
- `pnpm typecheck` — проверка типов
- `pnpm build` / `pnpm start` — сборка в `dist/` и запуск
- Node.js 24 (`.nvmrc`); Mastra требует Node >= 22.13
## Архитектура
Зависимости идут сверху вниз: `bot` → `services` → `repositories` → `libs`. Сборка всех слоёв (composition root) — в `src/index.ts`.
```
src/
index.ts — создание зависимостей и запуск бота
config.ts — чтение и валидация env
types.ts — доменные типы (Persona, ChatMessage)
constants/ — встроенные личности и прочие константы
libs/ — инфраструктура без бизнес-логики (SQLite, форматирование Telegram-сообщений)
repositories/ — только SQL и маппинг строк в доменные типы, по репозиторию на таблицу
services/ — бизнес-логика; зависят от репозиториев, не знают про grammY
assistant/ — AI на Mastra: агент, промпты, tools
bot/ — grammY: сборка бота, общие хелперы ответа
handlers/ — тонкие Composer'ы: разбор команды → вызов сервиса → ответ
```
- Каждый модуль — фабрика `createX(deps)`, тип экспортируется как `ReturnType<typeof createX>`.
- Хендлеры не ходят в репозитории напрямую — только через сервисы.
- Правила доступа (только админы) — в `bot/create-bot.ts` через `bot.filter`.
## Стиль кода
- Пиши функционально: стрелочные функции и фабрики (`const createX = (...) => ({ ... })`), без классов.
- Не используй ключевое слово `function` — только `const fn = (...) => ...`.
- Не используй `let` (и `var`) — только `const`; вместо циклов с мутацией — `map`/`filter`/`reduce`/рекурсия.
- Отделяй пустой строкой объявления констант и логические блоки друг от друга.
- Импорты локальных файлов — с расширением `.js` (ESM, `module: NodeNext`).
- Тексты для пользователей бота и комментарии — на русском.