Files
Assistant/cmd/creator-web/static/chat.html
T
m eab7d11bdd
CI / test (push) Failing after 26s
fix: refine chat composer controls
2026-08-29 15:42:52 +03:00

134 lines
10 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="dark">
<meta name="theme-color" content="#101714">
<title>Домовой - чат</title>
<link rel="stylesheet" href="/assets/chat.css">
</head>
<body>
<main class="chat-shell">
<section id="login-view" class="login-panel">
<div class="brand-mark" aria-hidden="true">Д</div>
<h1>Домовой</h1>
<form id="login-form" class="login-form">
<label for="username">Логин</label>
<input id="username" autocomplete="username" required autofocus>
<label for="password">Пароль</label>
<input id="password" type="password" autocomplete="current-password" required>
<button type="submit">Войти</button>
<p id="login-error" role="alert"></p>
</form>
</section>
<section id="chat-view" class="chat-view" hidden>
<header class="chat-header">
<a href="/" aria-label="Домовой">Домовой</a>
<button id="cognitive-status" class="cognitive-status" data-state="checking" type="button" role="status" aria-live="polite" title="Проверить канал ещё раз">проверяю канал мышления</button>
<a id="cognitive-console-link" class="cognitive-console-link" href="/admin" hidden>настроить в консоли</a>
<div class="build-meta" aria-label="Версия и время обновления">
<span>версия __ASSISTANT_BUILD_REVISION__</span>
<time datetime="__ASSISTANT_BUILD_DATETIME__">обновлено __ASSISTANT_BUILD_TIME__</time>
</div>
<a href="/admin" class="operator-link">Консоль</a>
<button id="logout" type="button" aria-label="Выйти">↗</button>
</header>
<div class="chat-layout">
<aside class="chat-side chat-left" aria-label="Навигация и текущий фокус">
<div class="side-intro">
<p class="side-index">DOMOVOY / COCKPIT</p>
<h1>Домовой</h1>
<p>Спокойное рабочее пространство для разговора, фокуса и текущих задач.</p>
</div>
<div class="side-section side-focus">
<span class="section-label">ТЕКУЩИЙ ФОКУС</span>
<strong id="active-focus">не выбран</strong>
</div>
<div class="side-section quick-context">
<span class="section-label">ОБЛАСТИ РАБОТЫ</span>
<div class="context-list"><span>Дом</span><span>Работа</span><span>Текущая задача</span></div>
</div>
<nav class="human-nav" aria-label="Разделы Домового">
<button class="nav-tab active" data-tab="chat-panel" type="button"><b>01</b><span>Разговор</span><small>живой чат</small></button>
<button class="nav-tab" data-tab="today-panel" type="button"><b>02</b><span>Сегодня</span><small>что требует внимания</small></button>
<button class="nav-tab" data-tab="history-panel" type="button"><b>03</b><span>История</span><small>это окно разговора</small></button>
</nav>
<div class="side-section work-list"><span class="section-label">АКТИВНЫЕ РАБОТЫ</span><p class="quiet-state">Нет активных долгих работ</p></div>
<button class="new-conversation" type="button">+ Новый разговор</button>
<div class="side-note"><span class="section-label">ОБЩЕЕ СОСТОЯНИЕ</span><strong id="session-state">Сессия активна</strong><small>Сведения сохраняются в текущем разговоре.</small></div>
<div class="build-meta side-build" aria-label="Версия и время обновления">
<span>версия __ASSISTANT_BUILD_REVISION__</span>
<time datetime="__ASSISTANT_BUILD_DATETIME__">обновлено __ASSISTANT_BUILD_TIME__</time>
</div>
</aside>
<main class="chat-main">
<section id="chat-panel" class="surface-panel active-panel">
<div id="messages" class="messages" aria-live="polite"></div>
<div class="conversation-starters" aria-label="Предложения для начала разговора">
<span>Можно начать так</span>
<button type="button" data-starter="Проверь локальный канал мышления">Проверь канал</button>
<button type="button" data-starter="Что сейчас доступно?">Что доступно?</button>
<button type="button" data-starter="Хочу изменить настройку локальной модели">Изменить настройку</button>
</div>
<form id="chat-form" class="composer">
<div class="composer-input-wrap">
<textarea id="message" rows="1" maxlength="16384" aria-label="Сообщение Домовому" placeholder="Напишите Домовому обычное сообщение..." required></textarea>
<div class="composer-actions">
<button id="attach-toggle" class="composer-tool" type="button" aria-expanded="false" aria-controls="attachment-menu" title="Вложить">+</button>
<span class="context-indicator" title="Лимит сообщения"><span>лимит</span><output id="message-count" aria-live="polite">0 / 16 384</output></span>
<span class="composer-hint">Enter — отправить · Shift+Enter — новая строка</span>
<button id="send" class="send-button" type="submit" aria-label="Отправить" title="Отправить"><span id="send-label" class="sr-only">Отправить</span><span id="send-icon" aria-hidden="true">↑</span><span id="stop-icon" aria-hidden="true" hidden>■</span></button>
</div>
</div>
</form>
<div class="composer-toolbar media-tools" aria-label="Вложения и голос">
<button id="toolbar-attach" class="toolbar-button" type="button" aria-expanded="false" aria-controls="attachment-menu">+ Вложить</button>
<button id="photo-trigger" class="toolbar-button" type="button">Фото</button>
<button id="mic-trigger" class="toolbar-button" type="button">Микрофон</button>
<div id="attachment-menu" class="attachment-menu" hidden>
<button type="button" data-input="image-input">Фото</button>
<button type="button" data-input="audio-input">Аудио / голос</button>
<button type="button" data-input="ocr-input">Текст с фото</button>
</div>
<input id="audio-input" type="file" accept="audio/*" hidden>
<input id="image-input" type="file" accept="image/*" hidden>
<input id="ocr-input" type="file" accept="image/*" hidden>
<span id="media-status" role="status" aria-live="polite"></span>
</div>
</section>
<section id="today-panel" class="surface-panel attention-surface" hidden>
<div class="surface-heading"><p>Сегодня / внимание</p><button id="refresh-today" type="button">Обновить</button></div>
<div id="today-list" class="attention-list"></div>
</section>
<section id="history-panel" class="surface-panel history-surface" hidden>
<div class="surface-heading"><p>История</p><span>Последние сообщения текущего окна</span></div>
<div id="history-list" class="history-list"></div>
</section>
</main>
<aside class="chat-side chat-right" aria-label="Текущее понимание Домового">
<div class="side-intro"><p class="side-index">02 / КОНТЕКСТ</p><h2>Что сейчас понятно</h2><p>Здесь собраны рабочие сигналы разговора. Скрытые рассуждения модели не показываются.</p></div>
<div class="insight-grid">
<section class="insight-card"><span>FOCUS</span><strong id="right-focus">не выбран</strong><small>текущая область внимания</small></section>
<section class="insight-card"><span>SCOPE</span><strong>текущий разговор</strong><small>границы контекста</small></section>
<section class="insight-card"><span>CONTINUITY</span><strong>готова к продолжению</strong><small>задачи и долгие работы</small></section>
<section class="insight-card"><span>CAPABILITIES</span><strong>проверяются по запросу</strong><small>доступность может меняться</small></section>
</div>
<div class="ai-info-card"><span>ДАННЫЕ ДЛЯ РАЗГОВОРА</span><strong>Описание локального ИИ</strong><p>Можно передать назначение, ограничения или заметки о локальной модели. Не вставляйте пароли, токены и ключи.</p></div>
<form id="ai-data-form" class="ai-data-form">
<label for="ai-data">Данные для текущего разговора</label>
<textarea id="ai-data" rows="8" maxlength="12000" placeholder="Например: локальная модель нужна для коротких ответов на русском; контекст ограничен; внешняя сеть запрещена."></textarea>
<button type="submit">Передать Домовому</button>
<p id="ai-data-error" class="ai-data-error" role="alert" hidden></p>
<small>Это отправится как обычное сообщение в чат.</small>
</form>
<a class="side-console-link" href="/admin">Открыть консоль настройки <span>→</span></a>
</aside>
</div>
</section>
</main>
<script src="/assets/chat.js"></script>
</body>
</html>