Все значимые изменения в этом проекте документируются в этом файле.
Формат основан на Keep a Changelog, и проект придерживается семантического версионирования.
📱 Мобильный редизайн Генератора Изображений (/image-generator):
create): полноразмерная форма ввода промпта, кнопка улучшения AI Enhance, интерактивные touch-friendly чипы выбора пропорций (1:1, 9:16, 16:9, 3:4, 4:3), сворачиваемый блок Negative Prompt (Collapsible) и акцентная кнопка генерации с автоматическим переключением на экран результата.result): полноэкранный холст (h-dvh), анимированное состояние ожидания генерации и плавающая Glassmorphism панель действий (скачивание в высоком качестве, полноэкранный Lightbox/зум, копирование промпта в буфер, повтор настроек, удаление).history): 2-колоночная адаптивная сетка истории генераций с бейджами соотношения сторон, датами создания и быстрыми действиями в одно касание.<CreditsDisplay variant="compact" />.ru, en, ua, de, ja).🧠 Глубокая модернизация промптов генерации (AI Prompt Engineering):
lib/prompts/image.ts):
buildEnhanceImagePrompt() под современные диффузионные архитектуры (SDXL / Illustrious): базовый якорь качества, ракурс и кадрирование, взгляд и эмоции, текстуры тканей и украшений, динамика позы, окружающее пространство, кинематографическое освещение.DEFAULT_NEGATIVE_PROMPT по умолчанию для устранения анатомических артефактов (деформированные руки, лишние пальцы, размытие, дефекты мутаций).visualTraits) и кинематографических деталей сцены из контекста ролевого чата (buildImageTagsPrompt()).lib/prompts/character.ts):
🖼 Редизайн OpenGraph баннера (/opengraph-image):
Icons.logo из components/common/icons.tsx.public/icons/logo.svg и public/icons/logo-full.svg.🚀 Комплексная SEO-оптимизация и микроразметка Schema.org:
app/layout.tsx добавлены метатеги hreflang / alternates.languages и openGraph.alternateLocale для всех 5 языков (en-US, ru-RU, uk-UA, de-DE, ja-JP).WebSite с (поисковые подсказки в выдаче Google), и , а также на страницах персонажей.💳 Оплата Telegram Stars прямо в браузере (In-Browser Checkout & QR Code):
GET /api/telegram/invoice) каждые 2 секунды с экрана подтверждения, анимацией успешной оплаты и автоматическим перенаправлением в /chat.📩 Форма обратной связи (/contact) и панель обращений в Админке:
/contact с интерактивной отправкой сообщений в службу поддержки.POST /api/contact с серверной валидацией, привязкой к профилю пользователя и мгновенной обработкой./admin) с фильтрацией по статусам («Новое», «В работе», «Решено») и быстрым просмотром деталей.💎 Масштабирование кредитных лимитов тарифов:
lib/credits.ts, вебхуке Telegram POST /api/telegram/webhook, инвойсах, а также карточках и сравнительных таблицах тарифов на главной странице и /pricing.🌐 Глубокая мультиязычная локализация главной страницы и футера:
Hero, Features, Pricing, FAQ, ) и футер переведены на использование словарей .👤 Выдвижная боковая инфо-панель персонажа (CharacterInfoPanel):
Info в тулбаре.#жанр, #характер), информация о создателе (@creator).📌 Закрепление чатов (Pinned Chats) и группировка по датам в сайдбаре:
usePinnedChats на базе для мгновенного сохранения закрепленных диалогов в .⚡ Оптимизация мобильной производительности и устранение задержек при печати:
localStorage (400 мс) вместо синхронной блокирующей записи на каждое нажатие клавиши.ChatHeader с использованием стабильного геттера getDraftMessage, что полностью исключило холостые ре-рендеры шапки при вводе текста.backdrop-blur-xl на плавающей панели ввода на легковесный bg-card со сплошным цветом для максимального FPS.blur(40px) и scale(1.15).📱 Жесты и мобильный UX:
✨ Редизайн hero-секции главной страницы:
gradient-background.jpg с затемняющими overlay-слоями для стабильной читаемости текста.🎨 Обновлен landing header:
Icons.logo и использует currentColor для корректной окраски в разных состояниях header.🧱 Подготовлены базовые настройки редизайна:
.gitignore.🧠 Структурная долговременная память (State & Consequence Simulation):
CharacterState и PlotEvent, а также enum PlotActorType (USER, CHARACTER, WORLD) для наблюдаемого состояния персонажей и хроники последствий.CharacterState хранит метрики отношений (trust, hostility, fear, ) и текущий статус (, , , , ) отдельно по , , .🌿 Память веток чата:
branchId = null переносится в созданную ветку Main вместе с сообщениями.CharacterState и PlotEvent из parent branch.buildMemoryContext() умеет fallback на legacy-память branchId = null, чтобы уже созданные ветки не показывали пустое состояние.📝 Усиленная суммаризация контекста:
buildSummaryPrompt() переписан на структурный формат: Current State, , , , .app/api/chat/route.ts — содержал IDOR (прямой доступ к чужим чатам по chatId без проверки владельца).deductCredits() переписан на raw SQL UPDATE WHERE credits >= cost, исключая race condition между проверкой баланса и списанием.auth_date в Telegram-авторизации — initData старше 5 минут отклоняются (защита от replay-атак).decrypt() больше не утекает шифротекст — при ошибке дешифровки возвращается "[Decryption Error]" вместо исходного ciphertext.lib/schemas.ts).lib/api-auth.ts):
requireAuth() (сессия + бан), requireAdmin() (+ проверка ADMIN), isErrorResponse() (type guard).AuthResult содержит userId, email, role — все роутеры получают данные из единого места.user/*, , , , , , .⚡ Рефакторинг lib/image-storage.ts:
saveToStorage() и getExtension() — устранено 4× дублирование логики выбора хранилища (~150 строк).getGeneratedImagesForUser использует Promise.all для параллелизации запросов.⚡ Оптимизация хуков:
use-chat-logic.ts — 4 обработчика обёрнуты в useCallback, извлечена чистая функция stripImageTag.hooks/use-mobile.tsx (оставлен .ts).lib/price-utils.ts (0 импортов).ui-demo, toast-demo, textarea-demo, svg-demo..md-файлов (оставлены README, CHANGELOG, SECURITY).ChatModel, CharacterBuilderModel из .🧠 Защита суммаризации (Bootstrap Summarization):
isSummarized: true) до вызова LLM, что исключает дублирование при параллельных after() колбеках.isSummarized при ошибке LLM — сообщения не теряются и будут обработаны в следующем цикле.SUMMARIZE_THRESHOLD, SUMMARIZE_BATCH, BOOTSTRAP_THRESHOLD, BOOTSTRAP_BATCH.🏷️ :
components/common/role-icon.tsx, содержащий общие компоненты <RoleIcon> и <PlanBanner>.<RoleIcon> во всех компонентах интерфейса (боковая панель чатов, профиль, настройки аккаунта, настройки ИИ, кредиты).<PlanBanner>, адаптирующимся под роль.🛒 Отдельная страница Checkout (Telegram Stars):
/checkout/[plan] с использованием готовых компонентов Shadcn UI (Card).window.Telegram.WebApp.openInvoice и обработка коллбеков оплаты.🌍 Локализация Checkout:
next-intl.Plus для энтузиастов (1000 сообщений, 15 персонажей, приоритетная генерация).PLUS (вместе с USER, PREMIUM, ADMIN) в schema.prisma.lib/credits.ts.Star, изумрудный цвет text-emerald-500) во всех компонентах: , , и боковой панели чатов.📊 Редизайн компонента Pricing:
pricing-table.tsx) полностью переписана на Data-Driven подход.rows в языковых файлах.overlayStyle).🌍 Локализация:
▶️ Кнопка «Продолжить» (Continue):
skipUserMessage: true)🎭 Typing indicator с именем персонажа (групповой чат):
**Name**: ...)📝 Редизайн редактора сообщений:
bg-background для textarea вместо bg-primaryoutlinevariant="default") для user и assistant🌿 Кнопка «Создать ветку» (Create Branch):
🏷️ Генерация тегов персонажей:
masterpiece, 1girl, best quality)🎭 Пол персонажа (Gender):
gender (MALE / FEMALE) в модели Character❤️ Система лайков персонажей:
CharacterLike (связь User ↔ Character)GET/POST /api/characters/[id]/like📑 Табы для персонажей (All / My / Public):
🎨 Редизайн карточек персонажей:
⚡ Кеширование лайков:
CharacterGrid в CharacterTabs🐛 Стриминг сообщений (Blur анимация):
ReactMarkdown (блочный <p>) и голый <span> — что ломало markdown-разметкуReactMarkdown, blur-эффект применяется на уровне контейнераblur-in → streaming-pulse (opacity-based, без filter blur)🐛 Суммаризация срабатывала только один раз:
branchMessagesCount % 8 === 0 на подсчёт несуммаризированных сообщений🛡️ Rate Limiter (/api/chat/send):
lib/rate-limit.ts — in-memory sliding window rate limiter429 Too Many Requests с заголовком Retry-After🖼️ Автогенерация изображений в чате:
[GENERATE_IMAGE: prompt] в ответafter() (Replicate)imageUrl обновляется в БД после генерации⚡ Фоновая суммаризация (after()):
after() callback (Next.js)🧠 RAG память:
similarity > 0.3 — нерелевантные воспоминания больше не попадают в контекстUser said: "..." / CharName said: "..."⚡ Производительность API /api/chat/send:
* из *действие*)**Name:**) — закрывающие ** больше не попадают в сообщениеparse-single-response.ts — разделяет контент на блоки речи и нарративаActionTemplate в базе данных для хранения пользовательских шаблоновGET/POST /api/user/action-templates, PATCH/DELETE /api/user/action-templates/[id]Bookmark в области ввода чата с popover списком шаблоновActionTemplatesDialog для управления шаблонами (создание/редактирование/удаление){{char}} — автозамена на имя персонажа в одиночных чатах{{char}} удаляется, курсор ставится на место удаления для быстрого ввода имениcomponents/chat/message/common/:
MessageActions — кнопки действий (копировать, редактировать, регенерировать, форк)MessageImage — превью и лайтбокс изображенийMessageEditForm — форма редактирования сообщенияuseMessageActions вынесен в /hooks/use-message-actions.ts/lib/parse-group-response.tschat-message.tsx уменьшен с 349 до 165 строк, с 560 до 215 строк🎭 AI Промпты (Chat):
userPersona в групповых чатах — теперь используется общая функция buildUserPersonaSection() вместо прямой подстановки🔄 Парсер группового чата (Group Chat Parser):
\n\n) вместо построчного анализа---, ***, ___ автоматически пропускаются и не создают лишних блоков✨ Анимация blur для стриминга сообщений:
AnimatedText для плавного появления текста с эффектом blurblur-in с переходом opacity и blurChatMessage и GroupChatMessage компоненты🎨 UI Demo страница:
/ui-demo с демонстрацией всех UI компонентов📳 Тактильный отклик (Haptic Feedback):
use-haptic.ts для управления вибрацией на мобильных устройствахlightTap (10ms), mediumTap (20ms), success, errornavigator.vibrate)👆 Свайп-жесты для мобильного сайдбара:
🌿 Визуальное дерево веток (Branch Tree):
BranchTreeDialog для графического отображения структуры ветокparentBranchId и структуры дерева🗑️ API для удаления сообщений:
DELETE /api/messages/[messageId]/route.ts📱 Toast уведомления для мобильных устройств:
🎨 Рефакторинг стилей диалогов:
w-[95%] max-w-{size} для адаптивной шириныtext-start для левого выравниванияsize-5 для всех иконокadd-participant-dialog.tsx, manage-participants-dialog.tsx, edit-chat-dialog.tsx, , confirm() на UI компонент AlertDialog в branch-selector.tsx и branch-tree-dialog.tsxconfirm() в некоторых браузерах (Chrome)deleteBranchWarning, cancel, delete/components/chat/:
/dialogs/ — перенесены 5 диалогов:
add-participant-dialog.tsx, branch-tree-dialog.tsx, edit-chat-dialog.tsxgroup-chat-dialog.tsx, manage-participants-dialog.tsx/branch/ — перенесён branch-selector.tsx/api/dodo/ со всеми эндпоинтами (webhook, portal, subscription)dodoCustomerId, dodoSubscriptionId из модели User@dodopayments/nextjs, dodopaymentstest-dodo из package.jsonDODO-INTEGRATION-SUMMARY.md, docs/DODO-PAYMENTS.md, docs/QUICKSTART-DODO.md🔄 API Реструктуризация:
/api/generate-image → /api/images/generate/api/enhance-prompt → /api/images/enhance/api/message/[messageId] → /api/messages/[messageId]/api/chats/share → /api/chat/shareCHAT-SHARING.md, , 🗂️ Архитектура (Централизация промптов):
/lib/prompts/ для централизованного управления всеми AI промптамиimage.ts - промпты для генерации и улучшения изображенийsummary.ts - промпты для суммаризации истории чатаcharacter.ts - промпты для генерации тегов и личности персонажейcontext.ts - промпты для улучшения контекста сценindex.ts - централизованный экспорт всех промптовlib/ai.ts - использует , , @/lib/prompts🧠 AI (Улучшение контекста):
/api/chat/enhance-context🎭 Character Builder (Селектор моделей):
mistral-large-latest (максимальное качество)mistral-medium-latest (баланс)mistral-small-latest (по умолчанию)ministral-14b-latest на mistral-small-latest во всех компонентахlib/ai.ts (3 места)components/chat/interface/chat-input-area.tsxapp/api/characters/[characterId]/generate-tags/route.tsapp/api/chat/enhance-context/route.tsapp/textarea-demo/page.tsxprisma/schema.prisma (default значение)🎨 UI/UX (Акцентные цвета):
🧠 AI (Суммаризация контекста):
summarizeMessages (lib/ai.ts)initialMessagesGET /api/chat/[chatId]/branch/active для загрузки только активной ветки без сообщенийdisplayLimit сообщенийauth.webp)AuthLayout для поддержки автоматического blurDataURL (эффект размытия при загрузке)handleGeneratePersonality (Character Builder)*actions*POST /api/upload/image для универсальной загрузки файловuseCharacterBuilderLogic для мгновенной загрузки и предпросмотра✨ Новый индикатор набора:
🎭 Улучшенный парсинг групп:
⌨️ Парсинг ответов:
🎨 Полировка UI чата:
border) у сообщений для более чистого и легкого видаw-fit) и отступы — теперь он не растягивается на всю ширинуChatBranch) теперь хранит свою собственную суммаризацию (summary)summary в модель ChatBranch (Prisma)🌿 Ветвление диалога (Dialog Branching):
ChatBranch в базе данных для хранения ветокBranchSelector в header чата для переключения между веткамиGET/POST/PATCH/DELETE /api/chat/[chatId]/branch⌨️ Индикатор набора текста (Typing Indicator):
💾 Автосохранение черновика:
📊 Счетчик символов:
PATCH /api/chat/[chatId]/update-context🎭 Proactive Storytelling в AI промптах:
⚙️ Параметры AI модели:
presencePenalty: 0.1 - поощряет введение новых тем и элементов🔄 Унифицированная логика контекста:
🧹 Упрощен диалог создания группового чата:
Кнопка действий в чате:
*действие*Предпросмотр сообщения:
*текст* отображаются курсивом с приглушенным цветомGroupChatMessage для обработки ответов бэкэнда ([Имя]: Сообщение) и преобразования их в отдельные визуальные всплывающие окна с индивидуальными аватарами.frequencyPenalty: 0.1, presencePenalty: 0.0) настроены для предотвращения повторяющихся циклов при сохранении естественного языка.summarizeMessages с более низкой температурой (0.1) и явной инструкцией отслеживать физическое местоположение и ключевые факты.Дублирование контекста RAG:
Галлюцинации в групповом чате:
[Имя]: в запросе директора.✨ Features Section - Интерактивные эффекты:
💬 Анимированный чат-превью:
🎨 Улучшенная визуальная структура:
useInView hook для определения видимости компонентаmotion/react🌍 Автоматическое определение языка браузера:
Accept-LanguageNEXT_LOCALE на 1 годi18n/request.ts для fallback🇯🇵 Японский язык (日本語):
🇩🇪 Немецкий язык (Deutsch):
EROFS: read-only file system на serverless платформахuploadUserAvatar() в lib/image-storage.ts🎨 Auth Layout - Редизайн страниц авторизации:
✨ Hero Section - Яркость обводки поля:
typewriterPhrases в i18n файлах🎨 Hero Section - Переработка поля ввода:
aspect-square w-[150%]✨ PricingCard свечение:
🏠 Home Page оптимизация:
👤 User Persona System:
☑️ Per-Chat Persona Control:
usePersona в модели Chat (по умолчанию true)🔐 Smart Persona Injection:
chat.usePersona !== false/api/chat/create: добавлен параметр usePersona (по умолчанию true)/api/chat/group/create: добавлен параметр usePersona (по умолчанию true)/api/chat/send: проверка chat.usePersona перед инъекцией персоныusePersona Boolean @default(true) в модель Chat20251217145416_add_use_persona_to_chat✨ Кнопки действий для групповых чатов:
🖼️ Улучшенная генерация изображений:
🔄 Революция в системе суммаризации:
isSummarized - каждое сообщение отслеживается индивидуально📊 API /messages оптимизация:
messageHistoryLimit из настроек пользователяhistory.length > 12Суммаризация:
// Старый подход (неправильный)
const messagesToSummarize = history.slice(0, -8); // Терял старые данные
// Новый подход (правильный)
const newMessages = await prisma.message.findMany({
where: { chatId, isSummarized: false },
take: 20,
});
await prisma.$transaction([
prisma.chat.update({ summary: newSummary }),
prisma.message.updateMany({ isSummarized: true }),
]);
Генерация изображений:
isGroupChat и characterNames[]🔗 Система шеринга чатов:
/api/chats/share (POST):
/share/[slug]:
nanoid v5.1.6 для генерации slugisActive для оптимизации запросов✨ Функция копирования сообщений:
🎤 Голосовой ввод в чате:
character-info-card.tsx (153 строки) - форма с полями name, description, visualTraits, tagscharacter-prompt-card.tsx (66 строк) - System prompt с генерацией личностиcharacter-avatar-card.tsx (120 строк) - управление аватаром (generate/upload/delete/select)image-selector-dialog.tsx (78 строк) - диалог выбора сгенерированных изображенийuseCharacterBuilderLogic (389 строк)/api/enhance-prompt - улучшение промптов для изображений/api/characters/[id]/generate-tags - генерация тегов персонажей/api/chat/send - отправка сообщений AI (уже было)/api/generate-image - создание изображений (уже было)chat-header.tsx (255 строк) - шапка с кнопками управления, менюchat-image-sidebar.tsx (108 строк) - боковая панель с галереей изображенийchat-input-area.tsx (172 строки) - поле ввода сообщений и контекстаchat-lightbox.tsx (91 строка) - полноэкранный просмотр изображенийuseChatLogic (415 строк)next-pwa@5.6.0 на @ducanh2912/next-pwa@10.2.9cacheOnFrontEndNav)aggressiveFrontEndNavCaching)reloadOnOnline)workboxOptions.disableDevLogs)% 10 === 0 на % 10 <= 1
use-accent-color.ts - resolvedTheme передаётся как параметр/api/chat/enhance-context для обработки контекста через AIuseCallback:
handleContainerClick, handleKeyPress, sendMessagestreamResponse, handleRegenerate, scrollToMessagerequestAnimationFrame для батчинга обновлений высотыInviteCode в базе данных:
code - Уникальный код приглашенияmaxUses - Максимальное количество использованийusedCount - Текущее количество использованийisActive - Статус активности (автоматическая деактивация при достижении лимита)expiresAt - Опциональная дата истеченияUser.inviteCodeId для отслеживания использованных кодовpnpm generate-invite [code] [maxUses] [expiresInDays]REGISTRATION_ENABLED = true (теперь контролируется инвайт-кодами)inviteCode20251207192943_add_invite_codes:
InviteCodeinviteCodeId в таблицу Usercode и isActive для оптимизации[Имя Персонажа]: ответPOST /api/chat/group/create - Создание группового чатаPOST /api/chat/group/add-participant - Добавление участникаGroupChatDialog - Диалог создания группового чатаAddParticipantDialog - Добавление участников/api/chat/send для поддержки группового режимаChat.isGroup - Флаг группового чатаChat.title - Название группового чатаChat.characterId теперь nullable для групповых чатовChatParticipant с порядком отображенияCharacter.participants для участия в группахgenerate-image routeGROUP-CHATS.md:
🧠 AI Memory Settings - Полное управление памятью AI:
/api/user/ai-settings (GET/POST)🔍 SEO Оптимизация:
📊 База данных:
enableSummarization, enableRAG, messageHistoryLimit в модель Useradd_ai_settings успешно применена🌐 Переводы:
settingsSaved - "Настройки сохранены"failedToSave - "Не удалось сохранить настройки"imageGenerated, /api/chat/senddocs/AI-MEMORY-SETTINGS.md с полным описанием системыdocs/SEO-GUIDE.md с инструкциями по SEO оптимизации🖼️ Управление Изображениями в Чате:
👤 Аватары Пользователей:
🎨 Оптимизация Image Generator:
🤖 AI Промпты:
🎨 UI/UX:
🐛 TypeScript:
🔄 State Management:
Analytics от Vercel для аналитики./terms) с подробным описанием условий использования./privacy) с политикой конфиденциальности и обработки данных./refund) с четкой политикой возврата для цифровых товаров./terms, /privacy, /refund.🌍 Полная Интернационализация (i18n):
LanguageSwitcher для переключения языков на всех страницах.✉️ Email Верификация:
EditProfileDialog теперь полностью переведен.CreditsDisplay поддерживает локализацию названий ролей и статусов.useMemo для оптимизации производительности.pgvector и модели mistral-embed.lib/memory.ts для семантического поиска похожих сообщений.JSON.stringify и ::vector).Context. Теперь AI понимает и фиксирует ситуацию, описанную пользователем (например, «на сцене», «в кабинете»), а не только черты характера.🧠 Оптимизация AI Моделей:
mistral-small (быстрее и экономнее).mistral-medium (более качественные ответы).⚡ Оптимизация Памяти:
PricingTable), наглядно показывающая различия между планами (Free, Premium, Credits).Tabs для удобного переключения между месячной и годовой оплатой.🎨 Дизайн Лендинга (Рестайлинг):
primary), убран старый зеленый оттенок.📱 Мобильная адаптация:
hyphens-auto, break-words) для корректного отображения длинных заголовков на русском и украинском.hidden lg:block) для улучшения UX.🌍 Локализация:
en, , ) для новых секций тарифов и фич.isPublic добавлено в базу данных./).Lexara (Hero, Features, Pricing, FAQ).useAccentColor, возникающая из-за несоответствия типов AccentColor и начального значения "default".default: null в colorPresets (lib/accent-colors.ts).ReadableStream на сервере и TextDecoder на клиенте.summary в Chat и isSummarized в Message.Enter на мобильных теперь делает перенос строки, а не отправку.route.ts (/api/chat/send) для поддержки стриминга и фоновой суммаризации./, из-за чего абсолютные URL (например, Vercel blob storage) и относительные пути без ведущего слэша не показывались.normalizeAvatarUrl в lib/utils.ts и обновлены компоненты ChatSidebar, ChatInterface, CharacterGrid и ChatMessage для корректной поддержки абсолютных URL и относительных путей без ведущего слэша.--primary и --ring, что исправляет цвет кнопок и фокуса.ThemeProvider./api/admin/users/[userId]/* (ban, role, credits).params теперь обрабатывается как Promise в соответствии с требованиями Next.js 15.hooks/use-accent-color.ts для централизованного управления цветами.lib/accent-colors.ts с расширенной палитрой (добавлен Оранжевый цвет).👤 Конструктор персонажей
/character-builder для создания кастомных персонажей/api/characters/create (POST/GET)/public/avatars/🎨 Динамическая генерация изображений персонажей
generateImagePrompt() для поддержки кастомных базовых тегов🐛 Баг "Призрака Райли" - Селестина генерировала изображения с внешностью Райли
/api/chat/[chatId]/generate-imageCharacter.visualTraits в БД💬 Проблема с длинными ответами AI
maxTokens🌍 Проблема с языком ответов
📁 Разделение хранения изображений
/public/avatars/ - постоянные аватары персонажей🎨 Улучшен интерфейс конструктора персонажей
🔧 Рефакторинг AI утилит
generateImagePrompt() принимает baseCharacterTags как опциональный параметрvisualTraits🎨 Генератор изображений
/image-generator с полнофункциональным интерфейсом генерацииGeneratedImage в Prisma для хранения истории/api/generate-image (GET/POST)🪄 AI улучшайзер промптов
/api/enhance-prompt🎯 Действия с изображениями
📦 Обновлена структура базы данных
GeneratedImage с полями: id, userId, prompt, negativePrompt, imageUrl, width, height, createdAt🎨 Улучшен UI компонент select из shadcn/ui
🎯 Улучшена функция generateImage в lib/ai.ts
generateCustomImage с параметрами ширины и высоты📱 Адаптивный дизайн генератора
🔄 Исправлена работа скролла в sidebar чатов
overflow-hidden на контейнерScrollArea при переполненииreact-toastify для красивых уведомленийToaster с поддержкой темной/светлой темыlib/toast.tsx для удобного использованияalert() на toast уведомления
AlertDialog для критичных действий🔐 Шифрование сообщений с использованием AES-256-GCM
lib/encryption.tsscripts/generate-encryption-key.ts, scripts/encrypt-messages.tsSECURITY.md, docs/ENCRYPTION.md🖼️ Постоянное хранение изображений
public/generated-images/lib/image-storage.tsapp/chat/session/[chatId]/page.tsxapp/chat/page.tsxapp/chat/new/[characterId]/page.tsxlib/encryption.tsENCRYPTION_KEY должен храниться в безопасном местеbuildCharacterPersonalityPrompt(): построение объемной 3D-психологии персонажа (глубинная мотивация, уязвимости, триггеры, внутренние конфликты), 3 показательных примера реплик с языком тела в *звездочках* и строгие директивы ролевой игры (персонаж инициативен, но никогда не решает и не говорит за {{user}}).buildRandomCharacterPrompt(): генерация оригинальных взрослых персонажей (21+) с готовыми английскими тегами внешности для автогенерации аватаров.lib/prompts/context.ts):
buildEnhanceContextPrompt(): сенсорное кинематографическое описание (свет, температура, акустика, погодные эффекты) с сохранением языка пользователя.SearchActionSoftwareApplicationOrganizationschema.org/Personapp/sitemap.ts: автоматическая подгрузка публичных персонажей из базы данных Prisma (isPublic: true) с актуальными датами updatedAt.app/robots.ts с явной блокировкой приватных и требующих логина зон (/chat, /image-generator, /admin/, /api/, /auth/, /checkout/)./image-generator, /pricing, /contact, /changelog.CTAnext-intlru), английский (en), украинский (ua), немецкий (de) и японский (ja).🎨 Полировка интерфейса лендинга:
/pricing.useSyncExternalStorelocalStoragePin и опцией «Закрепить» / «Открепить» в меню действий [...].🖼 Управление фоном чата (ChatWallpaper):
useChatWallpaper для синхронизации настройки в реальном времени.min-h-0 для стабильной прокрутки списка чатов на любых экранах.[...] перенесено на правую сторону строки чата и больше не перекрывает аватар при наведении.🌐 Локализация:
ru, en, ua, de, ja).romancemoodlocationphysicalConditionappearancebehaviorConstraintchatIdbranchIdcharacterIdPlotEvent хранит сюжетные события с description, consequence, importance, resolved, actorType, actorId, targetId; добавлены индексы для быстрых выборок по [chatId, branchId, resolved].20260608133000_add_state_consequence_memory.⚡ Быстрый слой памяти перед генерацией ответа:
hostility и fear, снижают trust и создают PlotEvent важности 4.🧩 Медленный слой памяти в after():
lib/prompts/memory.ts, который требует строгий JSON с metrics, status, behaviorConstraint, newEvents, resolvedEventIds.$transaction.importance <= 2; тяжелые события (importance >= 4) не закрываются LLM без явного сценария.🛡️ Hard Constraints в системном промпте чата:
[CURRENT WORLD STATE & HARD CONSTRAINTS] из CharacterState и незакрытых PlotEvent.stateContext.behaviorConstraint) заставляют модель учитывать высокий hostility, fear, низкий trust, травмы и физические ограничения.🧪 ADMIN debug-view памяти в чате:
GET /api/chat/[chatId]/memory, защищенный через requireAdmin().MemoryDebugDialog с отображением CharacterState, незакрытых PlotEvent и итогового injected prompt block.ChatHeader добавлена кнопка с иконкой BrainCircuit; на desktop она рядом с Summary, на mobile — в dropdown меню.Durable ContinuityUnresolved ConsequencesRecent DevelopmentContinuity LocksmaxTokens для суммаризации увеличен с 400 до 750, чтобы новый формат не обрезался.🔧 Устойчивость LLM extraction:
actorType: значения NPC, AI, ASSISTANT приводятся к CHARACTER, неизвестные значения — к WORLD.NPC и требует только USER | CHARACTER | WORLD.📦 Техническое обслуживание зависимостей:
0.34.0.pnpm-workspace.yaml добавлен override для baseline-browser-mapping.chat/*characters/*messages/*upload/*images/*telegram/invoiceconst session = await auth(); if (!session) ... и избыточные DB-запросы для роли/бана.use-character-builder-logic.ts — все 7 обработчиков обёрнуты в useCallback с корректными зависимостями.use-translated-content.ts — 3 возвращаемых массива обёрнуты в useMemo (устранена пересоздание объектов на каждом рендере).chat-interface.tsx — исправлены пропущенные зависимости useMemo (isLoading, handleContinue, characterName), удалены мёртвые пропсы newChat и isUser.🌍 Голосовой ввод с учётом локали (use-voice-input.ts):
locale, маппинг BCP-47 для 5 языков (ru→ru-RU, en→en-US, ua→uk-UA, ja→ja-JP, de→de-DE).chat-input-area.tsx передаёт текущую локаль через useLocale().🔔 Единообразные тосты (lib/toast.tsx):
showToast.dismiss() — потребители не импортируют сырой toast.react-toastify → showToast: chat-header, settings, edit-profile-dialog, image-selector-dialog, character-preview-modal, email-verification-modal, email-verification-banner, use-chat-logic, use-character-builder-logic, use-voice-input.🔧 lib/ai.ts — безопасный доступ choices?.[0]?.message?.content (4 места), удалена мёртвая переменная fullPrompt, добавлен MAX_POLL_ATTEMPTS = 300.
🔧 lib/rate-limit.ts — исправлен комментарий «sliding window» → «fixed window».
lib/models.tslib/models.ts)lib/models.ts со всеми идентификаторами моделей Mistral.MODEL_CHAT_DEFAULT, MODEL_SUMMARIZATION, MODEL_IMAGE_TAGS, MODEL_AI_RESPONSE, MODEL_EMBEDDING, MODEL_CHARACTER_BUILDER.CHAT_MODELS, CHARACTER_BUILDER_MODELS — UI-селекторы рендерятся динамически через .map().ChatModel, CharacterBuilderModel.lib/ai.ts, app/api/chat/send/route.ts, hooks/use-chat-logic.ts, hooks/use-character-builder-logic.ts, components/chat/interface/chat-input-area.tsx, components/character-builder/character-prompt-card.tsx.CreditsDisplayProfileDialogAccountSettingsFree (базовый), Plus и Premium.buildCharacterTagsPrompt из lib/prompts🗣️ Имена персонажей в групповых промптах:
📱 Sidebar и навигация:
SWIPE_THRESHOLD: 50, EDGE_ZONE: 250CharacterTabs с тремя вкладками🔍 Модальное окно предпросмотра персонажа:
CharacterPreviewModalmax-h-[40vh])isSummarized: false)🐛 Осиротевшие сообщения при обрыве соединения:
user-сообщения подряд, что путало модельPromise.allslice(-30) в summarizeMessages📦 Vercel:
@vercel/speed-insightsgroup-chat-message.tsxbg-muted/60), курсив, приглушённый цвет текста🔄 Контекст сайдбара (SidebarContext):
sidebar-context.tsx для передачи состояния сайдбара между компонентамиuseSidebar() и useSidebarSafe() хуки для использования в компонентахbranch-tree-dialog.tsxgroup-chat-dialog.tsx🎨 UI компонентов:
rounded-[inherit] из ScrollAreaViewport для предсказуемого поведенияw-2.5 до w-2 для более аккуратного видаGroupChatDialog: обновлён ScrollArea (rounded-2xl, overflow-y-hidden)flex flex-col gap-1 вместо space-y-2 для списка персонажейrounded-md → rounded-lg)/message/ — перенесены 3 компонента:
chat-message.tsx, group-chat-message.tsx, typing-indicator.tsxindex.ts) для всех подпапокcomponents/chat/index.tsscripts/test-dodo-integration.tssubscription-settings.tsx, chat-sidebar.tsx, settings/index.tsxdodoPaymentId переименовано в paymentId для будущих интеграцийQUICKSTART-CREDITS.mdCREDITS-IMPLEMENTATION.md🗂️ Components Реструктуризация:
components/common/ для общих переиспользуемых компонентов:
icons.tsx, theme-toggle.tsx, theme-provider.tsxlanguage-switcher.tsx, accent-color-selector.tsx, credits-display.tsxcomponents/layout/ для лейаутов:
client-providers.tsx, landing-header.tsx, landing-footer.tsxcomponents/auth/ для аутентификации:
email-verification-banner.tsx, email-verification-modal.tsxcomponents/profile/ для профиля:
profile-dialog.tsx, edit-profile-dialog.tsxsettings-dialog.tsx в components/settings/buildImageTagsPromptbuildSummaryPromptbuildCriticalResponseRulesapp/api/images/enhance/route.ts - использует buildEnhanceImagePromptapp/api/characters/[characterId]/generate-tags/route.ts - использует buildCharacterTagsPromptapp/api/chat/enhance-context/route.ts - использует buildEnhanceContextPrompthooks/use-character-builder-logic.ts - использует buildCharacterPersonalityPrompt🤖 AI Промпты (Вариативность):
buildMistralSmallPrompt с новой секцией VOCABULARY & VARIETY:
mistral-small-latest/api/enhance-prompt обновлено для поддержки параметра model⏰ Кнопка "Пропустить время" (Time Skip):
orderBy: desc + take + reverse🎨 Поддержка Data URL для аватаров:
normalizeAvatarUrl() для обработки Data URLs🎤 Улучшения голосового ввода:
shouldRestartRef для управления перезапускомlastProcessedIndexRef для предотвращения повторов👥 Исправления системы персонажей:
isActive: true)forkCharacter()getUserCreditsInfo() - только активные/api/characters/create - только активные/app/actions/fork-character - проверка перед копированием🧪 Тестовый аккаунт:
📋 Страница Changelog (/changelog):
🏷️ Система тегов для персонажей:
tags String[] в модель Character/api/characters/[characterId]/generate-tags - AI генерация с проверкой кредитов/api/characters/[characterId] - поддержка тегов/api/characters/create - поддержка теговINVITE-CODES.md с полным описанием системыChatParticipant для управления участникамиChat.context для хранения начального контекста чатаfailedGenerateinsufficientCredits, required🎨 UI Компоненты:
ruua{"baseTraits": "..."} (для простых персонажей){"tags": "..."} (для детальных описаний)downloadAndSaveAvatar() в image-storage.tscelestina_1732465123456.png/public/generated-images/ - временные сгенерированные изображения♻️ Работа с историей
🧹 Управление формой
🧭 Навигация
scripts/migrate-images.tsBUGFIX-IMAGE-STORAGE.md