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
+19 -1
View File
@@ -62,6 +62,20 @@
.dot.ok { background: var(--ok); }
.dot.warn { background: var(--warn); }
.dot.err { background: var(--err); }
.nav {
display: flex;
gap: 4px;
}
.nav-link {
text-decoration: none;
color: var(--muted);
padding: 6px 12px;
border-radius: 6px;
font-size: 13px;
font-weight: 500;
}
.nav-link:hover { background: var(--chip-bg); color: var(--fg); }
.nav-link.active { background: var(--accent); color: #fff; }
.stats {
margin-left: auto;
font-size: 13px;
@@ -324,7 +338,11 @@
<body>
<header>
<h1>Chat Agent for Patients — Debug</h1>
<h1>Chat Agent for Patients</h1>
<nav class="nav">
<a href="/" class="nav-link active">Отладка</a>
<a href="/sandbox.html" class="nav-link">Песочница</a>
</nav>
<span class="status"><span class="dot" id="dot"></span><span id="status-text">проверяю…</span></span>
<span class="stats" id="stats"></span>
</header>