108 lines
3.6 KiB
HTML
108 lines
3.6 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>DuckLM WebChat</title>
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
</head>
|
|
<body>
|
|
<div class="app-shell">
|
|
<aside class="sidebar">
|
|
<div class="brand">
|
|
<div class="brand-mark">D</div>
|
|
<div>
|
|
<h1>DuckLM</h1>
|
|
<p>Local cognitive runtime</p>
|
|
</div>
|
|
</div>
|
|
|
|
<nav class="side-nav" aria-label="DuckLM sections">
|
|
<a href="/" class="active">Chat</a>
|
|
<a href="/approvals">Approvals</a>
|
|
<a href="/skills">Skills</a>
|
|
<a href="/memory">Memory</a>
|
|
<a href="/experience">Experience</a>
|
|
</nav>
|
|
|
|
<section class="conversation-panel" aria-labelledby="conversations-title">
|
|
<div class="panel-heading">
|
|
<h2 id="conversations-title">Chats</h2>
|
|
<button id="new-chat" type="button" title="New chat">+</button>
|
|
</div>
|
|
<div id="conversation-list" class="conversation-list"></div>
|
|
</section>
|
|
|
|
<section class="settings-panel" aria-labelledby="settings-title">
|
|
<h2 id="settings-title">Session</h2>
|
|
<label>
|
|
Workspace
|
|
<input id="workspace" value="./workspace" autocomplete="off">
|
|
</label>
|
|
<label class="toggle-row">
|
|
<input id="debug" type="checkbox" checked>
|
|
<span>Show reasoning and events</span>
|
|
</label>
|
|
</section>
|
|
|
|
<section class="status-panel" aria-labelledby="status-title">
|
|
<h2 id="status-title">Runtime</h2>
|
|
<dl>
|
|
<div>
|
|
<dt>API</dt>
|
|
<dd id="api-status">checking</dd>
|
|
</div>
|
|
<div>
|
|
<dt>Model</dt>
|
|
<dd id="model-status">checking</dd>
|
|
</div>
|
|
<div>
|
|
<dt>Last task</dt>
|
|
<dd id="task-status">none</dd>
|
|
</div>
|
|
</dl>
|
|
</section>
|
|
</aside>
|
|
|
|
<main class="chat-shell">
|
|
<header class="chat-header">
|
|
<div>
|
|
<h2 id="chat-title">Chat</h2>
|
|
<p id="chat-subtitle">Messages are processed by the local Qwen role mapping through Duck Core.</p>
|
|
</div>
|
|
<button id="reload-chat" class="secondary-button" type="button">Reload</button>
|
|
</header>
|
|
|
|
<section id="messages" class="messages" aria-live="polite">
|
|
<article class="message assistant">
|
|
<div class="avatar">D</div>
|
|
<div class="bubble">
|
|
<div class="message-meta">
|
|
<strong>DuckLM</strong>
|
|
<span>ready</span>
|
|
</div>
|
|
<p>Готов. Напиши задачу, я отправлю её в локальный runtime и покажу ответ, reasoning и timeline.</p>
|
|
</div>
|
|
</article>
|
|
</section>
|
|
|
|
<section id="debug-panel" class="debug-panel">
|
|
<div class="debug-column">
|
|
<h3>Event Timeline</h3>
|
|
<ol id="events"></ol>
|
|
</div>
|
|
</section>
|
|
|
|
<form id="composer" class="composer">
|
|
<textarea id="message" rows="3" placeholder="Напиши сообщение DuckLM...">Скажи коротко, что ты DuckLM</textarea>
|
|
<div class="composer-actions">
|
|
<span id="composer-hint">Enter sends, Shift+Enter inserts a new line</span>
|
|
<button id="run" type="submit">Send</button>
|
|
</div>
|
|
</form>
|
|
</main>
|
|
</div>
|
|
<script src="/static/app.js"></script>
|
|
</body>
|
|
</html>
|