Add a '⬡ forge ↗' link to the per-agent page's meta row, next to the stats + screen links. It opens the agent's Forgejo profile (http://<host>:3000/<label> — the per-agent forge user is named after the agent) in a new tab. - web_ui.rs: StateSnapshot gains forge_present, true when the agent's forge-token file exists in the state dir (same signal that tells the agent it has a forge account). - index.html / app.js: hidden link, shown + href-filled when forge_present, mirroring the existing gui_enabled/screen-link pattern. Host comes from window.location so it works off whatever host the page is served from. closes #185
59 lines
2.6 KiB
HTML
59 lines
2.6 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>
|
|
<a id="forge-link" href="#" target="_blank" rel="noopener"
|
|
title="this agent's profile on the hive forge"
|
|
style="display:none; color: var(--cyan); text-decoration: none; margin-left: 1em;">⬡ forge ↗</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>
|