new wire request AgentRequest::Recent { limit } / ManagerRequest::Recent
(plus matching responses with Vec<InboxRow>). InboxRow moved to
hive-sh4re so it lives on both surfaces without an internal-to-wire
conversion. host-side dispatch in agent_server / manager_server
calls broker.recent_for(name, limit).
per-agent web_ui /api/state grew an inbox: Vec<InboxRow> populated
via the same per-agent socket (best-effort; transport failure
returns empty). frontend renders as a collapsible <details> section
between the state row and the terminal — fmt timestamp / from /
body in a tight grid, capped at 16em scrollable. only visible when
there are rows.
34 lines
1 KiB
HTML
34 lines
1 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>hyperhive agent</title>
|
|
<link rel="stylesheet" href="/static/agent.css">
|
|
</head>
|
|
<body>
|
|
<pre class="banner" id="banner">░▒▓█▓▒░ … ░▒▓█▓▒░ hyperhive ag3nt ░▒▓█▓▒░</pre>
|
|
<h2 id="title">◆ … ◆</h2>
|
|
|
|
<div id="status">
|
|
<p class="meta">loading…</p>
|
|
</div>
|
|
|
|
<div id="state-row">
|
|
<span id="state-badge" class="state-badge state-loading">… booting</span>
|
|
<span id="last-turn" class="last-turn" hidden></span>
|
|
<button type="button" id="cancel-btn" class="btn-cancel-turn" hidden>■ cancel turn</button>
|
|
</div>
|
|
|
|
<details id="inbox-section" class="agent-inbox" hidden>
|
|
<summary>▸ <span id="inbox-summary">inbox</span></summary>
|
|
<ul id="inbox-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/app.js" defer></script>
|
|
</body>
|
|
</html>
|