Consumes the GET /icon endpoint from #139: - Dashboard: each container card shows the agent's icon next to its name (26px). Loaded from <agent-url>/icon; onerror hides it for a stopped container whose web server isn't answering. - Per-agent web UI: the agent's icon next to the page title (40px), and /icon as the favicon on the index, stats, and screen pages. /icon always returns an image (configured SVG or the default hyperhive logo), so no presence check is needed. Closes #140
56 lines
2.4 KiB
HTML
56 lines
2.4 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>hyperhive agent</title>
|
|
<link rel="icon" type="image/svg+xml" href="/icon">
|
|
<link rel="stylesheet" href="/static/agent.css">
|
|
</head>
|
|
<body>
|
|
<pre class="banner" id="banner">░▒▓█▓▒░ … ░▒▓█▓▒░ hyperhive ag3nt ░▒▓█▓▒░</pre>
|
|
<div class="title-row">
|
|
<img class="agent-icon" src="/icon" alt="">
|
|
<h2 id="title">◆ … ◆</h2>
|
|
</div>
|
|
<p class="meta">
|
|
<a href="/stats" style="color: var(--cyan); text-decoration: none;">📊 stats →</a>
|
|
<a id="screen-link" href="/screen" target="_blank" rel="noopener"
|
|
style="display:none; color: var(--cyan); text-decoration: none; margin-left: 1em;">🖥 screen →</a>
|
|
</p>
|
|
|
|
<div id="status">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
|
|
<div id="state-row">
|
|
<span id="alive-badge" class="status-badge status-loading" title="harness reachability">…</span>
|
|
<span id="state-badge" class="state-badge state-loading">… booting</span>
|
|
<span id="model-chip" class="model-chip" hidden></span>
|
|
<span id="ctx-badge" class="ctx-badge" hidden title="tokens used in the current context window"></span>
|
|
<span id="cost-badge" class="ctx-badge" hidden title="cumulative tokens billed across the last turn (sum across every inference; tool-heavy turns rebill the cached prompt per call)"></span>
|
|
<span id="last-turn" class="last-turn" hidden></span>
|
|
<button type="button" id="cancel-btn" class="btn-cancel-turn" hidden>■ cancel turn</button>
|
|
<button type="button" id="new-session-btn" class="btn-new-session"
|
|
title="next turn runs without --continue, starting a fresh claude session">↻ new session</button>
|
|
</div>
|
|
|
|
<details id="inbox-section" class="agent-inbox" hidden>
|
|
<summary>▸ <span id="inbox-summary">inbox</span></summary>
|
|
<ul id="inbox-list"></ul>
|
|
</details>
|
|
|
|
<details id="loose-ends-section" class="agent-inbox" hidden>
|
|
<summary>▸ <span id="loose-ends-summary">loose ends</span></summary>
|
|
<ul id="loose-ends-list"></ul>
|
|
</details>
|
|
|
|
<div class="terminal-wrap">
|
|
<div id="live" class="live terminal"><div class="meta">connecting…</div></div>
|
|
<div id="term-input" class="term-input"></div>
|
|
</div>
|
|
|
|
<script src="/static/marked.js" defer></script>
|
|
<script src="/static/hive-fr0nt.js" defer></script>
|
|
<script src="/static/app.js" defer></script>
|
|
</body>
|
|
</html>
|