feat(sprint2): страница «Песочница» + навигация между страницами

Завершающий кусок Спринта 2 — UI для ведения диалогов.

static/sandbox.html:
- Трёхколоночная раскладка во всю высоту экрана.
- Слева: список сохранённых диалогов (имя, дата последнего обновления,
  счётчик сообщений, превью первой реплики), кнопка «+ новый»;
  на каждой карточке — «переименовать» (prompt) и «удалить» (confirm).
- Центр: чат в привычной стилистике (пузыри, user справа, assistant
  слева), Enter — отправить, Shift+Enter — перенос строки. Заголовок
  сверху показывает имя активного треда.
- Справа: отладка ответа — найденные фрагменты со score в процентах
  + собранный промпт в моноширинном блоке на светлом фоне.
- При отправке первой реплики тред создаётся автоматически, API
  возвращает thread_id и thread_name — дальше реплики уходят в тот
  же тред.

static/index.html: в шапке добавлены ссылки «Отладка» / «Песочница»,
подсветка активной страницы; тот же стиль nav-ссылок продублирован
в sandbox.html.

routers/chat: detail сообщения ошибки теперь включает тип исключения
(удобнее при диагностике), trace пишется через logger.exception.

SPRINTS.md: Спринт 2 помечен как закрытый.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
AR 15 M4
2026-04-23 10:37:57 +05:00
parent 3c2657ab99
commit 22ac40450f
4 changed files with 649 additions and 3 deletions
+1 -1
View File
@@ -45,7 +45,7 @@
### Цель
Перейти от одиночного `/query` к полноценному диалогу: агент помнит историю, оператор ведёт разговор из 5+ реплик. Текущую страницу отладки (одиночный вопрос) оставляем без изменений, добавляем **вторую отладочную страницу** — «Песочница» со списком всех сохранённых диалогов.
### Статус: Запланирован
### Статус: Закрыт
### Задачи