Skip to content

TaleEngine v2.0.0 Beta

Choose a tag to compare

@Sonicspeedfly Sonicspeedfly released this 26 Sep 03:02
· 80 commits to main since this release
b489fe1

Полный редизайн интерфейса, четыре волны. Мажорная версия не из-за объёма, а
потому что изменилась модель навигации: чаты больше не живут внутри персонажа,
а выбор персонажа больше не открывает и не создаёт чат. Данные, API и формат
экспорта не менялись — обновление не требует миграций.

Исправлено — связь больше не «висит» до перезагрузки

Главный раздражитель: постоянный реконнект, который на телефоне и на компьютере
нельзя было вылечить ничем, кроме перезагрузки страницы. Причин оказалось три,
и все три починены.

  • Соединение застревало навсегда. Намеренное закрытие сокета помечалось одним
    общим флагом. Если connectWs вызывался на УЖЕ закрытом сокете, close() не
    порождал события, флаг оставался поднятым — и следующий НАСТОЯЩИЙ обрыв
    считался намеренным. Реконнект не планировался вообще никогда. Теперь у каждого
    сокета своё поколение, и обработчики устаревшего соединения не могут погасить
    живое.
  • Молчащий канал закрывали снаружи. Пауза в переписке — норма: люди читают
    ответ по несколько минут. Промежуточные прокси, мобильные операторы и
    энергосбережение телефона рвут такой сокет через 30–60 секунд тишины. Добавлен
    прикладной пульс: клиент шлёт ping раз в 25 секунд, сервер отвечает pong.
    Если на пульс не ответили, соединение считается мёртвым и переустанавливается,
    не дожидаясь, пока это заметит браузер.
  • Возвращение к вкладке ничего не запускало. На телефоне таймеры в фоне
    заморожены, поэтому запланированный реконнект мог не сработать вовсе. Теперь
    соединение восстанавливается сразу по visibilitychange, online и focus,
    без ожидания бэкоффа: если человек смотрит на приложение, оно обязано работать.
  • Потолок бэкоффа снижен с 15 до 8 секунд, добавлена обработка onerror.

Добавлено — приборы (волна 4)

  • Полоса заполнения окна контекста под полем ввода: сколько занято, сколько
    обрезано, цвет по приближению к границе. Раньше о переполнении узнавали
    постфактум, когда персонаж «забывал» события.
  • Инспектор хода — что РЕАЛЬНО уходит в модель: системный промпт с раскрытием
    текста, вес каждого блока в токенах, сработавшие записи памяти Horae с
    указанием вызвавшего слова, и явный блок «обрезано бюджетом». Разбор собирает
    сама сборка контекста, поэтому числа те же, что уйдут провайдеру.
  • Скорость и задержка первого токена во время генерации. Экран перестал
    выглядеть одинаково на второй секунде и на девяностой.
  • Стоимость хода — только если вы задали свой тариф: у каждого прокси он свой.

Добавлено — режимы ленты и сцена (волна 4)

  • Переключатель Обычный / Сцена / Работа с документом.
  • В режиме «Сцена» реплики лежат на собственной подложке: непрозрачность 0.88
    вычислена по худшему случаю (белое фото), текст держит 12.16:1, имя говорящего
    7.51:1. Раньше имя ложилось прямо на пользовательский фон и падало до ~1.55:1.
  • Именные реплики разрядкой, ремарки курсивом.

Добавлено — оболочка и поиск (волна 3)

  • Единый список чатов: личные, групповые и общие в одной ленте, отсортированы
    по активности, с фильтром по персонажу чипами. Разделы «Группы» и «Доступные
    мне» слились с ним.
  • Поиск по репликам — новый GET /api/search с переходом в найденное
    сообщение и догрузкой недостающей истории.
  • Командная палитра по Ctrl+K / Cmd+K: чаты, персонажи, команды, поиск.
  • Ветка чата — POST /api/sessions/{id}/fork: копия истории до выбранной
    реплики, исходный чат не меняется.
  • Один режим композера вместо трёх независимых флагов. Надпись на кнопке
    отправки и реальное действие теперь читают одно поле и не могут разойтись.
  • Шапка разгружена: 4 кнопки вместо 12, статус связи виден только при обрыве.

Добавлено — доступность (волна 2)

  • Строки списков стали настоящими кнопками: раньше с клавиатуры можно было
    удалить чат, но нельзя открыть.
  • 84 доступных имени кнопкам, включая четыре необратимых удаления, у которых не
    было даже подсказки.
  • Ловушка фокуса и возврат фокуса во всех оверлеях, role="dialog".
  • Поля выбора файла достижимы с клавиатуры (было display: none, что выключает
    элемент целиком).
  • Вежливый регион объявляет начало, завершение и ошибку генерации.
  • Блок быстрого старта вместо бледной строки «выберите слева», которая на
    телефоне указывала туда, где ничего нет.

Добавлено — фундамент (волна 1)

  • Семантические токены: поверхности, состояния, текст, границы, акцент, статусы,
    радиусы, отступы, шкала кегля 12–30 без микро-размеров.
  • Объявлен color-scheme — системные <select> перестали выпадать светлыми
    поверх тёмной панели. Светлая палитра подготовлена под data-theme="light".

Исправлено — фундамент и данные

  • Порядок чатов: сортировка шла по дате создания, а показывалось время
    последней активности. Чат, где писали час назад, лежал под пустыми.
  • Стирание метаданных группы: открытие группы затирало её Author's Note и
    часовой пояс. Сервер отбрасывает null, но пустую СТРОКУ записывал.
  • Несуществующий класс .btn: три кнопки загрузки файлов отрисовывались
    серым текстом 12px с контрастом 2.05:1.
  • Контрасты: ховер главной кнопки ронял пару с 4.26 до 2.50 (теперь темнеет,
    6.89), ползунок прокрутки был 1.12 к дорожке (стало 3.79), индикатор обрыва
    связи 2.71 (стало 4.94+).

Мобильный адаптив

  • Порог поднят с 760 до 768px — планшеты попадают в мобильную раскладку.
  • Инспектор и настройки открываются нижней шторкой, а не сжимают чат сбоку.
  • Канвас открывается на весь экран с подписанной кнопкой «← К чату».
  • Цели нажатия 44×44 вместо 40×40.
  • Строка действий под сообщением переносится: раньше она уезжала за левый край,
    до которого прокруткой не добраться.
  • Телеметрия сворачивается в микро-бейдж, не отнимая высоту переписки.