Контекст памяти теперь выбирает нерешенные события через семантическую дедупликацию и лимит на персонажа, чтобы group chat не забивался повторяющимися сценами.
LLM-extraction больше не должна создавать события на каждый повтор жеста, дрожи, румянца или усиления фиксации; такие изменения уходят в метрики, статус и behaviorConstraint.
Новые PlotEvent ограничены важными долгосрочными последствиями, а низковажные или повторные события не записываются в базу.
Существующие нерешенные события обновляются вместо создания зеркальных дублей от другого участника.
Behavior constraints теперь учитывают сильную привязанность, possessive-динамику и эмоциональную нестабильность персонажа.
Увеличен бюджет токенов memory extraction, чтобы JSON реже обрезался на сложных сценах.
Исправлено
Исправлен спам дубликатами PlotEvent в памяти персонажей, особенно в групповых чатах.
Добавлен compaction для нерешенных PlotEvent конкретной ветки чата; проблемный чат очищен от повторов без сброса важных последствий.
[0.34.1] - 2026-06-10
Улучшено
✨ Редизайн hero-секции главной страницы:
Добавлен полноэкранный градиентный фон gradient-background.jpg с затемняющими overlay-слоями для стабильной читаемости текста.
Обновлены композиция, типографика и интерактивное поле старта чата в стиле нового Figma-макета.
Hero-секция зафиксирована как темная брендовая сцена, чтобы светлая тема не ломала контраст элементов.
🎨 Обновлен landing header:
Текстовый бренд в header заменен на SVG-логотип.
Навигация, theme toggle и auth-кнопки сохраняют светлые цвета поверх hero и возвращаются к теме после скролла.
Логотип вынесен в Icons.logo и использует currentColor для корректной окраски в разных состояниях header.
🧱 Подготовлены базовые настройки редизайна:
Добавлены шрифты для новой hero-типографики.
Тема по умолчанию переключена на dark.
Dev-страницы исключены из Git через .gitignore.
[0.34.0] - 2026-06-08
Добавлено
🧠 Структурная долговременная память (State & Consequence Simulation):
Добавлены модели Prisma CharacterState и PlotEvent, а также enum PlotActorType (USER, CHARACTER, WORLD) для наблюдаемого состояния персонажей и хроники последствий.
CharacterState хранит метрики отношений (trust, hostility, fear, ) и текущий статус (, , , , ) отдельно по , , .
Улучшено
🌿 Память веток чата:
При первом fork legacy-память с branchId = null переносится в созданную ветку Main вместе с сообщениями.
При создании новой ветки копируется snapshot CharacterState и PlotEvent из parent branch.
buildMemoryContext() умеет fallback на legacy-память branchId = null, чтобы уже созданные ветки не показывали пустое состояние.
📝 Усиленная суммаризация контекста:
buildSummaryPrompt() переписан на структурный формат: Current State, , , , .
[0.33.0] - 2026-02-22
Безопасность
🔒 Удален уязвимый маршрут 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.
🔒 Усиление схемы пароля — минимум 8 символов, обязательная заглавная буква, цифра и спецсимвол (lib/schemas.ts).
🗑️ Удалены неиспользуемые типы ChatModel, CharacterBuilderModel из .
[0.32.3] - 2026-02-21
Добавлено
🧠 Защита суммаризации (Bootstrap Summarization):
При включении суммаризации на старом чате (>50 несуммаризированных сообщений) вместо десятков catch-up циклов выполняется одноразовый bootstrap: саммари строится из последних 30 свежих сообщений, а все старые помечаются как обработанные.
Race condition protection: в нормальном режиме сообщения атомарно «захватываются» (isSummarized: true) до вызова LLM, что исключает дублирование при параллельных after() колбеках.
Откат isSummarized при ошибке LLM — сообщения не теряются и будут обработаны в следующем цикле.
Создан components/common/role-icon.tsx, содержащий общие компоненты <RoleIcon> и <PlanBanner>.
Заменены библиотечные иконки (Crown, Star, User, Shield) на системную геометрическую иконку <RoleIcon> во всех компонентах интерфейса (боковая панель чатов, профиль, настройки аккаунта, настройки ИИ, кредиты).
Заменены дублирующиеся куски кода градиентных баннеров в карточках тарифов и на странице оплаты единым компонентом <PlanBanner>, адаптирующимся под роль.
[0.32.1] - 2026-02-21
Добавлено
🛒 Отдельная страница Checkout (Telegram Stars):
Создан новый маршрут /checkout/[plan] с использованием готовых компонентов Shadcn UI (Card).
Отображение названия тарифа, периода, выделенных фич плана и стоимости в Telegram Stars (⭐) и USD.
Интеграция с window.Telegram.WebApp.openInvoice и обработка коллбеков оплаты.
🌍 Локализация Checkout:
Полный перевод страницы оплаты на 5 языков (EN, RU, UA, DE, JA).
Динамическая подгрузка описаний фич и всех текстов (toast-уведомления, ошибки, кнопки) через next-intl.
[0.32.0] - 2026-02-21
Добавлено
💎 Новый тариф (роль) Plus:
Введен промежуточный тариф Plus для энтузиастов (1000 сообщений, 15 персонажей, приоритетная генерация).
Глубокая интеграция на уровне БД: добавлена роль PLUS (вместе с USER, PREMIUM, ADMIN) в schema.prisma.
Отдельные лимиты выдачи кредитов (1000/мес) и лимиты персонажей (15/шт) в lib/credits.ts.
Новый визуал роли (Иконка Star, изумрудный цвет text-emerald-500) во всех компонентах: , , и боковой панели чатов.
Улучшено
📊 Редизайн компонента Pricing:
Логика таблицы сравнения тарифов (pricing-table.tsx) полностью переписана на Data-Driven подход.
Убрано хрупкое совпадение по подстрокам. Теперь галочки и текст опираются на конфигурацию rows в языковых файлах.
Добавлено выделение колонки популярного тарифа (Premium) с эффектами свечения (overlayStyle).
Градиентные фоны для иконок-бейджей (Blue, Emerald, Violet) на каждом тарифе.
🌍 Локализация:
Полностью обновлены массивы цен, фич и таблиц в 5 языках (EN, RU, UA, DE, JA) для тарифов Free, Plus и Premium.
[0.31.0] - 2026-02-16
Добавлено
▶️ Кнопка «Продолжить» (Continue):
Новая кнопка рядом с «Регенерировать» на последнем сообщении ассистента
AI продолжает сцену без сохранения пользовательского сообщения в историю (skipUserMessage: true)
Переводы на 5 языков (EN, RU, UA, DE, JA)
🎭 Typing indicator с именем персонажа (групповой чат):
При стриминге определяется имя персонажа из первой строки ответа (**Name**: ...)
Вместо generic skeleton показывается аватар и имя персонажа + анимация набора
Улучшено
📝 Редизайн редактора сообщений:
Textarea вынесена за пределы цветного пузыря сообщения
Нейтральный фон bg-background для textarea вместо bg-primary
Кнопки выровнены вправо, Cancel в стиле outline
Единый стиль кнопки Save (variant="default") для user и assistant
🌿 Кнопка «Создать ветку» (Create Branch):
Кнопка убрана под сообщениями пользователя
🏷️ Генерация тегов персонажей:
Промпт переписан на классификационные теги (жанр, роль, личность, франшиза)
Запрещены image-generation теги (masterpiece, 1girl, best quality)
[0.30.0] - 2026-02-16
Добавлено
🎭 Пол персонажа (Gender):
Новое поле gender (MALE / FEMALE) в модели Character
Селектор пола в Character Builder с иконками ♂/♀
Отображение значка пола на карточках и в модальном окне
Переводы на 5 языков (EN, RU, UA, DE, JA)
❤️ Система лайков персонажей:
Новая модель CharacterLike (связь User ↔ Character)
API endpoints: GET/POST /api/characters/[id]/like
Плавающая кнопка-сердце на карточках персонажей
Счётчик лайков с оптимистичным обновлением
📑 Табы для персонажей (All / My / Public):
Улучшено
🎨 Редизайн карточек персонажей:
Полноразмерный аватар (3:4 соотношение) вместо маленькой иконки
Градиентный оверлей с именем, полом и описанием
Hover-эффект масштабирования изображения
Клик по карточке открывает модалку вместо прямого перехода в чат
⚡ Кеширование лайков:
Состояние лайков вынесено из CharacterGrid в CharacterTabs
Загрузка один раз для всех персонажей, результат шарится между табами
Лайк в одном табе мгновенно отражается в других
[0.29.0] - 2026-02-15
Исправлено
🐛 Стриминг сообщений (Blur анимация):
Исправлено съезжание и неправильное форматирование текста во время стриминга
Причина: контент разделялся на две части — ReactMarkdown (блочный <p>) и голый <span> — что ломало markdown-разметку
Теперь весь контент рендерится через один ReactMarkdown, blur-эффект применяется на уровне контейнера
Обновлена CSS-анимация: blur-in → streaming-pulse (opacity-based, без filter blur)
Новый модуль lib/rate-limit.ts — in-memory sliding window rate limiter
Ограничение: 1 сообщение в 2 секунды на пользователя
Ответ 429 Too Many Requests с заголовком Retry-After
Авто-очистка устаревших записей каждые 60 секунд
🖼️ Автогенерация изображений в чате:
AI может вставлять [GENERATE_IMAGE: prompt] в ответ
Тег автоматически вырезается из сохранённого текста
Изображение генерируется в фоне через after() (Replicate)
imageUrl обновляется в БД после генерации
Улучшено
⚡ Фоновая суммаризация (after()):
Суммаризация перенесена из синхронного блока в after() callback (Next.js)
Пользователь получает ответ сразу, без 1-3с задержки на суммаризацию
Суммаризация выполняется после отправки response
🧠 RAG память:
Добавлен порог similarity > 0.3 — нерелевантные воспоминания больше не попадают в контекст
Все сообщения в RAG теперь подписаны: User said: "..." / CharName said: "..."
⚡ Производительность API /api/chat/send:
Генерация эмбеддинга и загрузка истории теперь выполняются параллельно ()
[0.28.1] - 2026-01-26
Исправлено
🐛 Парсер групповых чатов:
Исправлена потеря звёздочки перед действием после двоеточия (regex убирал * из *действие*)
Исправлена обработка форматов имён с двоеточием внутри bold (**Name:**) — закрывающие ** больше не попадают в сообщение
Добавлено
✨ Нарративные блоки в одиночных чатах:
Новый парсер parse-single-response.ts — разделяет контент на блоки речи и нарратива
Нарративные блоки (текст полностью в звёздочках) отображаются с приглушённым фоном и курсивом
Визуальное разделение как в групповых чатах
[0.28.0] - 2026-01-24
Добавлено
📝 Шаблоны действий (Action Templates):
Новая модель ActionTemplate в базе данных для хранения пользовательских шаблонов
CRUD API эндпоинты: GET/POST /api/user/action-templates, PATCH/DELETE /api/user/action-templates/[id]
Кнопка Bookmark в области ввода чата с popover списком шаблонов
Диалог ActionTemplatesDialog для управления шаблонами (создание/редактирование/удаление)
Поддержка плейсхолдера {{char}} — автозамена на имя персонажа в одиночных чатах
Умная вставка в групповых чатах: {{char}} удаляется, курсор ставится на место удаления для быстрого ввода имени
Локализация на 3 языка (EN, RU, UA)
Рефакторинг
🔧 Компоненты чат-сообщений:
Вынесены общие компоненты в components/chat/message/common/:
MessageActions — кнопки действий (копировать, редактировать, регенерировать, форк)
MessageImage — превью и лайтбокс изображений
MessageEditForm — форма редактирования сообщения
Хук useMessageActions вынесен в /hooks/use-message-actions.ts
Парсер группового чата вынесен в /lib/parse-group-response.ts
Результат: chat-message.tsx уменьшен с 349 до 165 строк, с 560 до 215 строк
[0.27.1] - 2026-01-21
Улучшено
🎭 AI Промпты (Chat):
Смягчена формулировка правил: заменено "NEVER refuse a request" на "Respond naturally to any situation" для избежания конфликтов с safety-системой Mistral
Унифицирована обработка userPersona в групповых чатах — теперь используется общая функция buildUserPersonaSection() вместо прямой подстановки
🔄 Парсер группового чата (Group Chat Parser):
Полная переработка логики парсинга: контент теперь разбивается по параграфам (\n\n) вместо построчного анализа
Нарративные блоки: текст до первой реплики персонажа и между репликами теперь отображается как отдельный курсивный блок без аватара
Фильтрация разделителей: строки ---, ***, ___ автоматически пропускаются и не создают лишних блоков
[0.27.0] - 2026-01-20
Добавлено
✨ Анимация blur для стриминга сообщений:
Новый компонент AnimatedText для плавного появления текста с эффектом blur
Последние символы (30) анимируются с размытием, которое плавно исчезает
CSS keyframes анимация blur-in с переходом opacity и blur
Интеграция в ChatMessage и GroupChatMessage компоненты
Время анимации: 0.4 секунды для комфортного восприятия
🎨 UI Demo страница:
Создана страница /ui-demo с демонстрацией всех UI компонентов
Story: Краткое повествование о произошедших событиях и текущем обсуждении
Note: Опциональное поле для критически важных предметов/целей
Добавлено отслеживание времени, полученных предметов, раскрытых секретов и изменений в отношениях
Увеличен лимит с 150 до 200 слов для большей детализации
Результат: Структурированные саммари с лучшей парсируемостью и более точным отслеживанием состояния мира
Исправлено
🐛 Chat (Загрузка сообщений):
Исправлена проблема исчезающей кнопки "Загрузить старые сообщения"
Устранена перезагрузка всех сообщений при монтировании компонента, которая сбрасывала initialMessages
Создан отдельный endpoint GET /api/chat/[chatId]/branch/active для загрузки только активной ветки без сообщений
Улучшена стабильность отображения кнопки при наличии истории более чем displayLimit сообщений
[0.23.4] - 2026-01-01
Оптимизировано
⚡ Производительность (Assets):
Критическая оптимизация фонового изображения авторизации (auth.webp)
Размер файла уменьшен с 7.5 МБ до оптимального WebP формата
Включен статический импорт изображения в AuthLayout для поддержки автоматического blurDataURL (эффект размытия при загрузке)
Устранены задержки при первой загрузке страниц входа и регистрации, улучшен показатель LCP
[0.23.3] - 2026-01-01
Улучшено
🎭 AI Промпты (Генератор Личности):
Полный рефакторинг промпта в handleGeneratePersonality (Character Builder)
Переход от "анкетного" стиля к "режиссерскому" описанию
Новая структура System Prompt:
Identity: Добавлено поле "Vibe" для передачи атмосферы персонажа
Personality & Drives: Вместо простых черт теперь генерируются "Core Motivation" (Мотивация), "Key Flaws" (Недостатки/Конфликты) и "Emotional Baseline"
Speech Patterns: Критически важная секция с тональностью, речевыми привычками и Sample Lines (примерами реплик)
Body Language: Инструкции по физическим действиям персонажа для отыгрыша через звездочки *actions*
Результат: Персонажи создаются сразу с глубоким характером, уникальным голосом и внутренними конфликтами, готовые к качественному ролеплею
[0.23.2] - 2025-12-31
Исправлено
🐛 Загрузка аватаров персонажей:
Исправлена критическая ошибка при сохранении персонажа с загруженным вручную аватаром (ошибка длины строки Base64 в БД)
Теперь изображения загружаются асинхронно на сервер (Vercel Blob / Local), а в базу данных сохраняется только короткая ссылка
Устранена проблема "Payload too large" при отправке формы создания персонажа
Оптимизирована производительность базы данных за счет отказа от хранения тяжелых Base64 строк
Добавлено
📤 API загрузки изображений:
Новый endpoint POST /api/upload/image для универсальной загрузки файлов
Валидация типов файлов (только изображения) и размера (до 5MB)
Интеграция с useCharacterBuilderLogic для мгновенной загрузки и предпросмотра
[0.23.1] - 2025-12-30
Улучшено
🎨 Полировка UI чата:
Добавлены новые иконки для веток, GitBranchPlus и GitBranchMinus
Спрятана кнопка смены темы для мобильных устройств
[0.23.0] - 2025-12-30
Добавлено
✨ Новый индикатор набора:
Заменили скучные точки на магическую анимацию "Искры" (SVG + CSS), чтобы бот выглядел более живым и технологичным
🎭 Улучшенный парсинг групп:
Обновили логику (regex), теперь действия, описанные до имени персонажа, корректно обрабатываются и не ломают отображение
Улучшено
⌨️ Парсинг ответов:
Улучшена логика, которая корректно обрабатывает имена без скобок и действия перед репликой
🎨 Полировка UI чата:
Убрали границы (border) у сообщений для более чистого и легкого вида
Добавили "хвостики" сообщениям (настройка скругления углов), чтобы диалог выглядел естественнее
Оптимизировали размер пузыря набора текста (w-fit) и отступы — теперь он не растягивается на всю ширину
[0.22.0] - 2025-12-30
Улучшено
🧠 Суммаризация истории для веток:
Каждая ветка (ChatBranch) теперь хранит свою собственную суммаризацию (summary)
Суммаризация формируется только по сообщениям текущей ветки
При создании новой ветки (fork) суммаризация копируется из родительской ветки
AI использует summary только активной ветки для system prompt
Старые чаты без веток продолжают использовать общую суммаризацию
Миграция
Добавлено поле summary в модель ChatBranch (Prisma)
Миграция базы данных через prisma migrate
[0.21.1] - 2025-12-30
Исправлено
🐛 Текстовое поле в чате:
Дочерние компоненты теперь не выходят за поле ввода текста на мобильный устройствах
Улучшено
🎨 Текстовом поле чата:
Увеличен радиус поля(rounded-xl → rounded-2xl)
Уменшены внутрение отступы
Кнопки на мобильных устройтвах стали меньше (size-9 → size-8)
Убарана бесполезная кнопка (Plus)
[0.21.0] - 2025-12-30
Добавлено
🌿 Ветвление диалога (Dialog Branching):
Новая модель ChatBranch в базе данных для хранения веток
Кнопка Fork на каждом сообщении для создания альтернативной ветки
Компонент BranchSelector в header чата для переключения между ветками
API endpoints: GET/POST/PATCH/DELETE /api/chat/[chatId]/branch
При первом fork автоматически создается "Main" ветка и мигрируются существующие сообщения
Каждая ветка имеет свою историю сообщений
AI получает только историю активной ветки
⌨️ Индикатор набора текста (Typing Indicator):
Анимированные три точки при ожидании ответа AI
Интегрирован в обычные и групповые чаты
💾 Автосохранение черновика:
Сообщение автоматически сохраняется в localStorage
Восстанавливается при перезагрузке страницы
Отдельный черновик для каждого чата
📊 Счетчик символов:
Исправлено
🐛 Ветвление диалога:
Исправлена загрузка сообщений при обновлении страницы (теперь фильтруются по активной ветке на сервере)
BranchSelector теперь обновляется сразу после создания fork
Корректная миграция существующих сообщений при первом fork
AI теперь получает только историю активной ветки (исправлена фильтрация в send API)
RAG поиск теперь также фильтруется по активной ветке
Исправлена инициализация activeBranchId при загрузке чата
[0.20.2] - 2025-12-29
Добавлено
🔌 API для обновления контекста чата:
Новый endpoint PATCH /api/chat/[chatId]/update-context
Позволяет обновлять контекст и usePersona для существующих чатов
Используется при первом сообщении в групповых и существующих чатах
Улучшено
🎭 Proactive Storytelling в AI промптах:
Новый раздел PROACTIVE STORYTELLING (MANDATORY) для одиночных и групповых чатов
Конкретные примеры хорошего/плохого поведения персонажей
Персонажи обязаны активно продвигать сюжет, описывать окружение, вводить события
Запрет на пассивное ожидание и повторяющиеся реакции
⚙️ Параметры AI модели:
presencePenalty: 0.1 - поощряет введение новых тем и элементов
Улучшенные ANTI-LOOP правила с трекингом действий персонажей
🔄 Унифицированная логика контекста:
Групповые чаты теперь работают как одиночные - контекст задается на странице чата
Поле контекста показывается для любого пустого чата (messages.length === 0)
Контекст сохраняется при первом сообщении через новый API
🧹 Упрощен диалог создания группового чата:
Удалены поля контекста и персоны из диалога
Диалог теперь только выбирает персонажей и название
Очищен код от неиспользуемых импортов и функций
[0.20.1] - 2025-12-27
Добавлено
Кнопка действий в чате:
Новая кнопка с иконкой Asterisk для быстрого форматирования действий *действие*
Toggle режим: первое нажатие открывает звездочку, второе - закрывает
Умная валидация: автоматически удаляет пустые действия и добавляет пробелы
Визуальная индикация активного режима действий
Полная локализация на 5 языках (RU, EN, DE, JA, UA)
Предпросмотр сообщения:
Кнопка с иконкой Eye/EyeOff для просмотра форматированного сообщения перед отправкой
Действия *текст* отображаются курсивом с приглушенным цветом
Секция предпросмотра с рамкой и фоном над полем ввода
Парсинг форматирования в реальном времени
Кнопка автоматически отключается когда поле ввода пустое
Улучшено
Логика форматирования действий:
Проверка на пустые действия - звездочки удаляются если между ними ничего не написано
Автоматическое добавление пробела после закрывающей звездочки для удобства
Умная вставка пробела перед открывающей звездочкой при необходимости
Автоматический возврат фокуса на поле ввода после операций
[0.20.0] - 2025-12-27
Добавлено
Интерфейс группового чата:
Реализован компонент GroupChatMessage для обработки ответов бэкэнда ([Имя]: Сообщение) и преобразования их в отдельные визуальные всплывающие окна с индивидуальными аватарами.
Улучшено
Системные подсказки ИИ:
Введена роль «Креативный директор» для управления ходом и взаимодействием персонажей.
Улучшен структурированный формат с явными разделами «Идентичность/Контекст/Инструкции».
Параметры ИИ (frequencyPenalty: 0.1, presencePenalty: 0.0) настроены для предотвращения повторяющихся циклов при сохранении естественного языка.
Обновлен запрос summarizeMessages с более низкой температурой (0.1) и явной инструкцией отслеживать физическое местоположение и ключевые факты.
Исправлено
Дублирование контекста RAG:
Исправлена ошибка, из-за которой история текущей беседы некорректно повторно внедрялась как «Воспоминания». Теперь результаты RAG фильтруются по существующим идентификаторам сообщений.
Галлюцинации в групповом чате:
Исправлена путаница символов путем принудительного строгого форматирования [Имя]: в запросе директора.
[0.19.5] - 2025-12-18
Улучшено
✨ Features Section - Интерактивные эффекты:
Добавлен Spotlight Effect на карточки функций (MagicCard компонент)
Светящаяся обводка следует за курсором мыши с плавными переходами
Цветовые акценты для каждой карточки (primary, green, red, blue)
Улучшенный визуальный feedback при взаимодействии
💬 Анимированный чат-превью:
Интерактивная демонстрация переписки с AI ботом
6 сообщений с плавной анимацией появления
Автоматическая активация при скролле (Intersection Observer)
Типинг индикатор с динамической позицией (слева для пользователя, справа для бота)
Показ 2 сообщений одновременно с прокруткой переписки
Полная интернационализация всех сообщений
🎨 Улучшенная визуальная структура:
Bento Grid layout для оптимального отображения функций
Адаптивная сетка (1 колонка на мобильных, 3 на десктопе)
Motion анимации для всех элементов (Framer Motion)
Градиенты и эффекты глубины для улучшения восприятия
Технические улучшения
Использование useInView hook для определения видимости компонента
Оптимизированные анимации с motion/react
Правильная типизация TypeScript для всех компонентов
Поддержка всех 5 языков (en, ru, ua, ja, de) в новых элементах
[0.19.4] - 2025-12-17
Добавлено
🌍 Автоматическое определение языка браузера:
При первом посещении сайта автоматически определяется предпочитаемый язык из заголовка Accept-Language
Поддержка приоритетов языков (q-values) для точного определения
Автоматическая установка cookie NEXT_LOCALE на 1 год
Резервная логика в i18n/request.ts для fallback
🇯🇵 Японский язык (日本語):
Добавлена полная поддержка японского языка
Переводы для всех интерфейсов
Доступен в переключателе языков
🇩🇪 Немецкий язык (Deutsch):
Добавлена полная поддержка немецкого языка
Переводы для всех интерфейсов
Доступен в переключателе языков
Исправлено
🖼️ Загрузка аватаров на продакшене:
Исправлена ошибка EROFS: read-only file system на serverless платформах
Аватары теперь загружаются в Vercel Blob Storage на продакшене
Локальное хранение для development окружения
Автоматическая проверка типа и размера файла (макс 5MB)
Функция uploadUserAvatar() в lib/image-storage.ts
Улучшено
🌐 Расширенная поддержка интернационализации: en, ru, ua, ja, de
🎯 Более точное определение языка с учетом региональных настроек браузера
📁 Унифицированная система хранения файлов для всех типов изображений
[0.19.3] - 2025-12-17
Улучшено
🎨 Auth Layout - Редизайн страниц авторизации:
Split-screen дизайн с изображением AI персонажа
Адаптивный layout (изображение скрывается на мобильных)
Градиент overlay для лучшей читаемости текста
Анимация появления форм (fade-in + slide-in)
Добавлены переводы для auth hero секции (en, ru, ua)
Улучшенная компоновка с кнопками навигации
✨ Hero Section - Яркость обводки поля:
При фокусе обводка становится ярче (opacity-20 → opacity-60)
Плавный переход 500ms для комфортного визуального эффекта
Spotlight эффект отключается при фокусе
Равномерное свечение всей рамки при активном состоянии
[0.19.2] - 2025-12-17
Добавлено
⌨️ Typewriter эффект на главной странице:
Анимированная печать фраз в поле ввода
10 уникальных фраз для каждого языка (en, ru, ua)
Рандомный старт - каждая перезагрузка начинается со случайной фразы
Плавное удаление и смена текста
Интернационализация через typewriterPhrases в i18n файлах
Улучшено
🎨 Hero Section - Переработка поля ввода:
Улучшенная визуализация с тройным слоем эффектов:
Заднее свечение (glow) с вращающимся градиентом
Базовая обводка (dim layer) для постоянного эффекта
Spotlight эффект - следует за курсором мыши
Оптимизация вращающихся градиентов - использование aspect-square w-[150%]
Более плавные переходы opacity и blur
Адаптивная подсветка при фокусе
✨ PricingCard свечение:
Добавлен эффект свечения рамки у карточек тарифов в home-ui
Вращающийся conic-gradient для Premium эффекта
Анимация появляется при наведении
🏠 Home Page оптимизация:
Улучшена компоновка элементов для разных разрешений
[0.19.1] - 2025-12-17
Улучшено
🎨 Home Page
На мобильных экранах страница не плывет
Структура селекторов и ссылок изменена
[0.19.0] - 2025-12-17
Добавлено
👤 User Persona System:
Отдельная секция "User Persona" в настройках с иконкой UserRound
Поле для описания себя (до 400 символов)
Персонализация AI-ответов на основе информации о пользователе
Поддержка 3 языков (en, ru, ua) с полными переводами
☑️ Per-Chat Persona Control:
Checkbox "Use my persona" при создании нового чата
Checkbox в GroupChatDialog для групповых чатов
Поле usePersona в модели Chat (по умолчанию true)
Гибкий контроль: включать/выключать персону для каждого чата индивидуально
🔐 Smart Persona Injection:
Инъекция персоны в system prompt только если chat.usePersona !== false
Автоматическое добавление информации о пользователе в контекст AI
Персона инжектируется ненавязчиво с пометкой "use but don't mention explicitly"
Изменено
📝 Уменьшен лимит символов для User Persona с 1000 до 400 для краткости
🎨 User Persona вынесена из Account Settings в отдельную секцию
📍 Секция Persona размещена между "AI Settings" и "Data" в меню настроек
API Updates
/api/chat/create: добавлен параметр usePersona (по умолчанию true)
/api/chat/group/create: добавлен параметр usePersona (по умолчанию true)
/api/chat/send: проверка chat.usePersona перед инъекцией персоны
Database
Добавлено поле usePersona Boolean @default(true) в модель Chat
Миграция: 20251217145416_add_use_persona_to_chat
[0.18.0] - 2025-12-17
Добавлено
✨ Кнопки действий для групповых чатов:
Регенерация ответа (только для последнего сообщения)
Копирование сообщения в буфер обмена
Редактирование сообщения целиком
Генерация изображения из описания
Отображение сгенерированных изображений с модальным просмотром
Адаптивное отображение (всегда видны на мобильных, при наведении на desktop)
🖼️ Улучшенная генерация изображений:
Добавлен контекст предыдущих 3 сообщений для лучшего понимания сцены
Поддержка групповых чатов (передача имен всех персонажей)
Новый промпт фокусируется только на визуальных элементах
Удаление лишних тегов и случайных добавлений
Temperature снижена до 0.2 для более точной генерации
Комбинирование базовых тегов персонажа с контекстными
Улучшено
🔄 Революция в системе суммаризации:
Флаг isSummarized - каждое сообщение отслеживается индивидуально
Инкрементальное обновление - обрабатываются только новые необработанные сообщения
Атомарные транзакции - обновление саммари и пометка сообщений в одной транзакции
Периодичность - каждые 10 сообщений (настраиваемо)
Ограничитель - максимум 20 сообщений за раз для предотвращения перегрузки
Эволюционный подход - саммари обновляется и эволюционирует, а не перезаписывается
Поддержка длинных чатов - корректная работа с чатами 300+ сообщений
Улучшенный промпт:
Режим UPDATE для длинных разговоров
Обработка только последних 20 сообщений
Фокус на NEW и IMPORTANT информации
Удаление устаревших данных
Лимит 150 слов + maxTokens: 250
Temperature: 0.2 для детерминированности
Контекст о номере батча (batch 15 of long conversation)
📊 API /messages оптимизация:
Теперь учитывает messageHistoryLimit из настроек пользователя
Исправлено
🐛 Изображения не отображались в групповых чатах (только в sidebar)
🐛 Суммаризация застревала после первого обновления из-за логики history.length > 12
🐛 Потеря старой информации при суммаризации (брала slice из ограниченной history)
🐛 Суммаризация срабатывала только на конкретных числах (8, 16, 24...), пропуская обновления
🐛 Генерация изображений добавляла случайные теги не из описания
🐛 API /messages загружал все сообщения без учета пользовательских лимитов
Технические детали
Суммаризация:
// Старый подход (неправильный)
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 }),
]);
Генерация изображений:
Контекст: последние 3 сообщения
Промпт: "Extract ONLY visual elements: clothing, pose, expression, location"
Базовые теги + контекстные теги (без дублирования)
Поддержка isGroupChat и characterNames[]
[0.17.1] - 2025-12-11
Исправлено
🐛 Ошибка Button React.Children.only
🐛 Блокировка настроек памяти для FREE пользователей
[0.17.0] - 2025-12-11
Добавлено
🔗 Система шеринга чатов:
SharedChat модель в БД - сохранение снимков чатов с уникальными slug
API endpoint/api/chats/share (POST):
Генерация уникальной ссылки через nanoid (10 символов)
Сохранение полного снимка чата (сообщения, персонажи, участники)
Дешифровка сообщений для публичного доступа
Сохранение информации о пользователе, поделившемся чатом
Share кнопка в интерфейсе чата:
Диалог с автоматической генерацией URL
Копирование ссылки в буфер обмена
Доступно на desktop и в мобильном меню
Публичная страница/share/[slug]:
Просмотр чата в read-only режиме
Отображение всех сообщений и участников
Информация о пользователе, поделившемся чатом
SEO метаданные с названием и описанием чата
"Попробовать этот чат" кнопка:
Переход к созданию нового чата с тем же персонажем
Для групповых чатов - копирование всех участников
Групповые чаты:
Исправлено
🐛 Дублирование Share диалога при клике на кнопку
🐛 Аватары загруженные с устройства не отображались в чатах
🐛 Длинные названия чатов смещали другие компоненты
🐛 Голосовой ввод дублировал текст несколько раз
🐛 Голосовой ввод останавливался после короткой паузы
🐛 Групповые чаты отображали только один аватар для всех персонажей
🐛 AI добавлял markdown (★★[name]★★) ломая парсинг имен
🐛 Счетчик персонажей не уменьшался при удалении
🐛 Отсутствовала проверка лимита при копировании персонажа
Технические детали
Зависимости:
Добавлена библиотека nanoid v5.1.6 для генерации slug
База данных:
SharedChat модель с полями: id, originalChatId, snapshotData, slug, createdAt
Индекс на поле isActive для оптимизации запросов
[0.16.0] - 2025-12-11
Добавлено
✨ Функция копирования сообщений:
Добавлена кнопка "Копировать" для всех сообщений в чате
Визуальная обратная связь (иконка Check на 2 секунды после копирования)
Использование Clipboard API для надёжного копирования
Поддержка i18n для всех языков (en/ru/ua)
🎤 Голосовой ввод в чате:
Web Speech API интеграция (hooks/use-voice-input.ts):
Использование SpeechRecognition для распознавания речи
Поддержка русского языка (ru-RU)
Автоматическая остановка после паузы
Обработка ошибок с понятными сообщениями (нет речи, доступ запрещён, сеть)
Динамическая кнопка Mic/Send:
Показывает иконку микрофона когда поле ввода пустое
Переключается на иконку отправки когда есть текст
Анимация пульсации при активном прослушивании (красная кнопка)
Блокировка отправки сообщения во время записи голоса
UX оптимизация:
Автофокус на textarea после распознавания речи
Добавление распознанного текста к существующему
Проверка поддержки браузером (fallback для неподдерживаемых)
Tooltips для кнопок (startVoice/stopVoice)
i18n: Добавлены переводы для en/ru/ua:
startVoice, stopVoice
Рефакторинг
🏗️ Модульная архитектура Character Builder (78.7% сокращение основного компонента):
Семантически корректное использование AlertDialog для деструктивных действий
Responsive design с использованием Sheet компонента на мобильных
Плавные transition анимации для всех интерактивных элементов
Улучшенная типизация TypeScript с явным кастингом Prisma результатов
Исправлено
🐛 TypeScript:
Исправлены ошибки типизации в Prisma include queries
Добавлен явный type casting для chat и message объектов
Исправлена типизация в user export route
🔄 State Management:
Добавлен userAvatar в dependencies useMemo
Корректная обработка состояния lightbox и sidebar
[0.9.2] - 2025-12-04
Добавлено
📄 Vercel:
Добавлен комопнент Analytics от Vercel для аналитики.
[0.9.1] - 2025-12-03
Добавлено
📄 Юридические Страницы:
Создана страница Terms of Service (/terms) с подробным описанием условий использования.
Создана страница Privacy Policy (/privacy) с политикой конфиденциальности и обработки данных.
Создана страница Refund Policy (/refund) с четкой политикой возврата для цифровых товаров.
Все страницы содержат обязательные разделы для верификации на платёжных системах.
Добавлены описания цифровых товаров и процесса возврата средств.
Указаны сроки обработки возвратов (48 часов) и исключительные случаи.
Улучшено
🔗 Footer Navigation:
Обновлены ссылки в Legal секции: теперь ведут на реальные страницы /terms, /privacy, /refund.
Добавлена ссылка "Refund Policy" в список юридических документов.
Ссылка на Privacy Policy в newsletter subscription теперь корректно работает.
Временно Отключено
🚧 Subscription System:
Временно скрыта вкладка "Subscription" в настройках профиля.
Функционал подписок отключен для прохождения верификации на платёжной системе.
[0.9.0] - 2025-12-02
Добавлено
🌍 Полная Интернационализация (i18n):
Добавлена поддержка трех языков: английский (en), русский (ru), украинский (ua).
Реализовано переключение языков через cookie-based систему без изменения URL.
Интернационализированы все компоненты и страницы приложения:
Лендинг (Hero, Features, Pricing, FAQ, Footer)
Страницы авторизации (регистрация, вход, восстановление пароля)
Чат-интерфейс и сайдбар
Конструктор персонажей и управление персонажами
Генератор изображений
Профиль пользователя и настройки
Email-шаблоны для верификации и сброса пароля
Добавлен компонент LanguageSwitcher для переключения языков на всех страницах.
Создана динамическая валидация форм с переводами ошибок Zod.
Все translation files содержат ~570+ ключей на каждый язык.
✉️ Email Верификация:
Реализована система подтверждения email через OTP-коды.
Добавлен баннер верификации email на всех страницах для неподтвержденных пользователей.
Создан модальный диалог для ввода кода подтверждения.
Интеграция с Resend для отправки email.
Автоматическая генерация и валидация 6-значных кодов с истечением срока (10 минут).
Email-шаблоны поддерживают все три языка интерфейса.
Улучшено
🎨 UI/UX Улучшения:
Компонент EditProfileDialog теперь полностью переведен.
Компонент CreditsDisplay поддерживает локализацию названий ролей и статусов.
Динамические Zod-схемы с useMemo для оптимизации производительности.
Улучшена структура навигации с учетом языковых предпочтений пользователя.
Изменено
🔐 Аутентификация:
Все страницы авторизации используют динамические схемы валидации.
Сообщения об ошибках адаптируются под выбранный язык.
Email верификация является обязательной для доступа к функционалу.
[0.8.5] - 2025-11-30
Добавлено
🧠 Векторная Память (RAG):
Внедрена система долгосрочной памяти на базе pgvector и модели mistral-embed.
Бот теперь может находить релевантные факты из всей истории переписки, а не только из последних сообщений.
Создана утилита lib/memory.ts для семантического поиска похожих сообщений.
Добавлена генерация эмбеддингов для всех новых сообщений (даже для Free тарифа, чтобы накапливать базу знаний).
Поиск по памяти (Retrieval) активирован для Premium и Admin пользователей.
Изменено
⚡ Архитектура Чата:
Полностью удалена система суммаризации (сжатия) истории, так как RAG делает её избыточной.
Оптимизирован расход токенов: вместо огромных саммари в контекст попадают только 3-5 точных найденных фактов.
Исправлен баг с типами данных Prisma при сохранении векторов (добавлена конвертация через JSON.stringify и ::vector).
[0.8.4] - 2025-11-30
Улучшено
🎭 Конструктор Персонажей:
Контекст: В генерацию личности добавлена секция Context. Теперь AI понимает и фиксирует ситуацию, описанную пользователем (например, «на сцене», «в кабинете»), а не только черты характера.
Стиль инструкций: Изменен промпт генератора. Теперь он создает четкие, технические инструкции для бота вместо художественных и витиеватых описаний, что улучшает следование роли.
[0.8.3] - 2025-12-01
Изменено
🧠 Оптимизация AI Моделей:
Внедрено разделение моделей по тарифам:
Free: Использует mistral-small (быстрее и экономнее).
Premium/Admin: Использует mistral-medium (более качественные ответы).
⚡ Оптимизация Памяти:
Отключена фоновая суммаризация (долгосрочная память) для Free пользователей для экономии токенов.
Free пользователи теперь работают в режиме "скользящего окна" (помнят только последние 20 сообщений).
Premium пользователи сохраняют полную функциональность с "бесконечной" памятью.
[0.8.2] - 2025-11-30
Добавлено
💳 Новые тарифы и Экономика:
Добавлена карточка "Пополнение" (Credits) для разовой покупки кредитов без оформления подписки.
Внедрен компонент Tabs для удобного переключения между месячной и годовой оплатой.
Изменено
🎨 Дизайн Лендинга (Рестайлинг):
Features: Секция упрощена до 3-х ключевых карточек, цвета заменены на акцентный (primary), убран старый зеленый оттенок.
Footer: Обновлен логотип (Lexara) и описание (tagline) на тему AI, актуализированы ссылки на разделы приложения.
📱 Мобильная адаптация:
Полная оптимизация главной страницы под мобильные устройства.
Исправлены размеры шрифтов и отступы в карточках.
Добавлены правила переноса слов (hyphens-auto, break-words) для корректного отображения длинных заголовков на русском и украинском.
Таблица сравнения тарифов скрыта на мобильных экранах (hidden lg:block) для улучшения UX.
🌍 Локализация:
Синхронизированы файлы переводов (en, , ) для новых секций тарифов и фич.
[0.8.1] - 2025-11-28
Добавлено
🛠️ Главная страница:
Добавлен "Header" на главную страницу.
Исправлено
🎨 Акцентные цвета:
Исправлена проблема, когда акцентные цвета не применяются на страницах авторизации.
[0.8.0] - 2025-11-27
Добавлено
👥 Разделение доступа к персонажам:
Введена система приватности: Личные (видны только создателю) и Общие (видны всем) персонажи.
Поле isPublic добавлено в базу данных.
Админы: могут создавать публичных персонажей (доступных всем) через конструктор.
Пользователи: создают только личных персонажей.
Интерфейс: На странице выбора чата добавлены секции "Мои персонажи" и "Общие персонажи".
Безопасность: Реализована защита маршрутов и API — нельзя открыть чат с чужим личным ботом, даже имея прямую ссылку.
Изменено
🎨 Главная страница (Миграция):
Начата полная переработка главной страницы (/).
Перенесены современные UI-компоненты из проекта Lexara (Hero, Features, Pricing, FAQ).
Подключены новые секции и обновлен дизайн для соответствия стилистике.
[0.7.1] - 2025-11-26
Добавлено
🎨 Акцентные цвета:
Добавлен Оранжевый цвет в настройки персонализации.
Исправлено
🐛 Типизация:
Исправлена ошибка TypeScript в хуке useAccentColor, возникающая из-за несоответствия типов AccentColor и начального значения "default".
Добавлен явный ключ default: null в colorPresets (lib/accent-colors.ts).
[0.7.0] - 2025-11-26
Добавлено
⚡ Streaming (Потоковая передача):
Ответы нейросети теперь появляются в реальном времени (эффект печатания), не нужно ждать полной генерации.
Реализовано через ReadableStream на сервере и TextDecoder на клиенте.
🧠 Умная память (Суммаризация):
Реализована система "бесконечной" памяти: старые сообщения (старше 15) автоматически сжимаются в краткий пересказ.
Это позволяет помнить контекст длинных диалогов, сокращая расходы на токены в 3-4 раза.
Добавлены поля summary в Chat и isSummarized в Message.
🔄 Перегенерация ответа:
Добавлена кнопка "Перегенерировать" (Regenerate) для последнего сообщения бота.
Позволяет получить другой вариант ответа, если первый не устроил.
Улучшено
📱 Мобильный интерфейс чата:
Оптимизирована ширина сообщений на мобильных (до 90%).
Скрыты аватарки на маленьких экранах для экономии места.
Исправлена проблема с полем ввода, перекрывающим сообщения (переход на Flexbox).
Кнопка Enter на мобильных теперь делает перенос строки, а не отправку.
🛡️ Надежность:
Сообщения сохраняются в БД и кредиты списываются только после успешного завершения генерации потока.
Изменено
🔌 API Чата:
Полностью переписан route.ts (/api/chat/send) для поддержки стриминга и фоновой суммаризации.
Оптимизировано окно контекста: теперь загружаются последние 15 "живых" сообщений + саммари.
[0.6.2] - 2025-11-25
Исправлено
🖼️ Аватары персонажей:
Исправлена проблема с отображением аватаров в sidebar, карточках персонажей и чате: ранее изображения рендерились только если путь начинался с /, из-за чего абсолютные URL (например, Vercel blob storage) и относительные пути без ведущего слэша не показывались.
Добавлена утилита normalizeAvatarUrl в lib/utils.ts и обновлены компоненты ChatSidebar, ChatInterface, CharacterGrid и ChatMessage для корректной поддержки абсолютных URL и относительных путей без ведущего слэша.
Это исправление устраняет проблему, когда аватары, сгенерированные при создании персонажа, видны в управлении персонажами, но не отображались в интерфейсе чата.
[0.6.1] - 2025-11-25
Исправлено
🎨 Акцентные цвета:
Исправлена логика применения цветов: теперь корректно обновляются --primary и --ring, что исправляет цвет кнопок и фокуса.
Устранено "моргание" цветов при загрузке страницы благодаря выносу инициализации в ThemeProvider.
Значения цветов переведены в формат HEX/OKLCH для корректной работы с Tailwind CSS v4.
🐛 API Админки:
Исправлена ошибка компиляции в маршрутах /api/admin/users/[userId]/* (ban, role, credits).
Параметр params теперь обрабатывается как Promise в соответствии с требованиями Next.js 15.
Добавлено
🪝 Архитектура:
Создан хук hooks/use-accent-color.ts для централизованного управления цветами.
Добавлен файл конфигурации lib/accent-colors.ts с расширенной палитрой (добавлен Оранжевый цвет).
[0.6.0] - 2025-11-25
💰 Кредиты пользователя
Кредиты теперь часть профиля пользователя
Добавлено
🛠️ Модальное окно настроек
Новый дизайн: крупное окно, sidebar с разделами
Перевод всех пунктов и разделов на русский
Смена акцентного цвета сайта через настройки
Добавлен пункт "По умолчанию" для акцентного цвета
Динамическая смена акцентного цвета через CSS-переменные
Сохранение выбранного цвета в localStorage, автоматическое восстановление
Улучшено
🎨 Увеличен размер модального окна настроек
🖌️ Улучшен UX выбора акцентного цвета
🗂️ Сохранение пользовательских настроек между сессиями
Исправлено
🐞 Исправлен баг с исчезающим акцентным цветом при обновлении страницы
[0.5.0] - 2025-11-24
Добавлено
👤 Конструктор персонажей
Новая страница /character-builder для создания кастомных персонажей
Форма с полями: Имя, Краткое описание, Внешность (Visual Traits), System Prompt
Интеграция генератора аватаров (512x512) с использованием тегов внешности
Кнопка "Улучшить теги" - переводит простые описания в аниме-теги через Mistral AI
Кнопка "Сгенерировать личность" - создает структурированный system prompt:
Identity (кто персонаж)
Personality (черты характера)
Speaking Style (стиль общения)
Behavior (поведение с пользователем)
API роут /api/characters/create (POST/GET)
Автоматическое сохранение аватаров в /public/avatars/
Навигация к конструктору из sidebar
🎨 Динамическая генерация изображений персонажей
Рефакторинг generateImagePrompt() для поддержки кастомных базовых тегов
Поддержка двух форматов visualTraits:
Исправлено
🐛 Баг "Призрака Райли" - Селестина генерировала изображения с внешностью Райли
Удален хардкод базовых тегов из /api/chat/[chatId]/generate-image
Теперь базовые теги загружаются из Character.visualTraits в БД
Каждый персонаж использует свои уникальные визуальные характеристики
💬 Проблема с длинными ответами AI
Добавлены инструкции в system prompt вместо жесткого maxTokens
AI теперь генерирует лаконичные ответы (2-4 параграфа)
Ответы не обрываются на полуслове
🌍 Проблема с языком ответов
Добавлено правило "ALWAYS respond in Russian" в CRITICAL RESPONSE RULES
Персонажи отвечают на русском по умолчанию
📁 Разделение хранения изображений
/public/avatars/ - постоянные аватары персонажей
Изменено
🎨 Улучшен интерфейс конструктора персонажей
Двухколоночный layout (lg:grid-cols-2)
Компактные карточки с иконками
Адаптивный дизайн для мобильных устройств
🔧 Рефакторинг AI утилит
generateImagePrompt() принимает baseCharacterTags как опциональный параметр
Fallback на дефолтные теги Райли при отсутствии кастомных
Улучшенная обработка JSON в visualTraits
[0.4.0] - 2025-11-23
Добавлено
🎨 Генератор изображений
Новая страница /image-generator с полнофункциональным интерфейсом генерации
Три панели: промпты слева, превью по центру, галерея справа
Кастомизация промптов (основной и негативный)
Выбор соотношения сторон: 1:1, 16:9, 9:16, 4:3, 3:4
История генераций (последние 50 изображений)
Модель GeneratedImage в Prisma для хранения истории
API роут /api/generate-image (GET/POST)
🪄 AI улучшайзер промптов
Кнопка "волшебной палочки" для расширения простых описаний
Использует Mistral AI для генерации детальных промптов
API роут /api/enhance-prompt
Примеры: "девушка на пляже" → "masterpiece, best quality, 1girl, solo, standing on beach, sunset..."
Каждое новое сообщение пользователя проходит через детерминированный lightweight-классификатор триггеров.
Угрозы немедленно увеличивают hostility и fear, снижают trust и создают PlotEvent важности 4.
Извинения и проявления нежности дают ограниченные сдвиги метрик только при безопасных условиях.
Новые сообщения больше не записывают raw-message embeddings для старого RAG по сырым репликам.
🧩 Медленный слой памяти в after():
Вместе с циклом суммаризации запускается LLM-экстрактор состояния и последствий.
Добавлен prompt lib/prompts/memory.ts, который требует строгий JSON с metrics, status, behaviorConstraint, newEvents, resolvedEventIds.
Сохранение результатов выполняется через Prisma $transaction.
Добавлено deterministic emotional decay: метрики постепенно смещаются к нейтрали, если нет активных тяжелых конфликтов.
Автоматическое закрытие конфликтов разрешено только для событий importance <= 2; тяжелые события (importance >= 4) не закрываются LLM без явного сценария.
🛡️ Hard Constraints в системном промпте чата:
Перед генерацией ответа собирается [CURRENT WORLD STATE & HARD CONSTRAINTS] из CharacterState и незакрытых PlotEvent.
Блок инжектится в solo и group chat prompts через новый stateContext.
Поведенческие ограничения (behaviorConstraint) заставляют модель учитывать высокий hostility, fear, низкий trust, травмы и физические ограничения.
🧪 ADMIN debug-view памяти в чате:
Добавлен endpoint GET /api/chat/[chatId]/memory, защищенный через requireAdmin().
Добавлен MemoryDebugDialog с отображением CharacterState, незакрытых PlotEvent и итогового injected prompt block.
В ChatHeader добавлена кнопка с иконкой BrainCircuit; на desktop она рядом с Summary, на mobile — в dropdown меню.
Durable Continuity
Unresolved Consequences
Recent Development
Continuity Locks
Summary больше не должно стирать похищение, насилие, контроль, травму или сломанное доверие из-за пары нежных сообщений.
maxTokens для суммаризации увеличен с 400 до 750, чтобы новый формат не обрезался.
🔧 Устойчивость LLM extraction:
Добавлена нормализация actorType: значения NPC, AI, ASSISTANT приводятся к CHARACTER, неизвестные значения — к WORLD.
Prompt экстрактора памяти дополнительно запрещает возвращать NPC и требует только USER | CHARACTER | WORLD.
📦 Техническое обслуживание зависимостей:
Версия проекта поднята до 0.34.0.
В pnpm-workspace.yaml добавлен override для baseline-browser-mapping.
chat/*
characters/*
messages/*
upload/*
images/*
telegram/invoice
Убраны десятки дублирующихся блоков const 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.