gabriel / musehub public
agents_swarm.html html
168 lines 6.2 KB
Raw
sha256:f99af7b1a7f36c4d537d1c630d4b71fc39222b1255f82e930929e2fc89015e11 fix: relax browse_repo perf budget to 500ms — 200ms was too… Sonnet 4.6 99 days ago
1 {% extends "musehub/base.html" %}
2
3 {% block title %}Agent Swarm · {{ owner }}/{{ repo_slug }}{% endblock %}
4 {% block breadcrumb %}
5 <a href="/{{ owner }}">{{ owner }}</a> /
6 <a href="{{ base_url }}">{{ repo_slug }}</a> /
7 agents
8 {% endblock %}
9 {% block repo_nav %}{% include "musehub/partials/repo_nav.html" %}{% endblock %}
10
11 {% block content %}
12 <div class="agents-wrap">
13
14 {# ── Header ─────────────────────────────────────────────────────────── #}
15 <div class="agents-hd">
16 <div class="agents-hd-title">
17 {{ icon("bot", 16) }}
18 Agent Swarm
19 </div>
20 <div class="agents-hd-repo">{{ owner }}/<strong>{{ repo_slug }}</strong></div>
21 {% if active_agents %}
22 <div class="agents-hd-live">
23 <span class="agents-hd-live-dot"></span>
24 {{ active_agents | length }} ACTIVE
25 </div>
26 {% endif %}
27 </div>
28
29 {# ── Sub-navigation ──────────────────────────────────────────────────── #}
30 <nav class="agents-subnav" aria-label="Agent hub navigation">
31 <a href="{{ base_url }}/agents/coord" class="agents-subnav-link">
32 {{ icon("radio", 12) }}
33 Live Coord
34 </a>
35 <a href="{{ base_url }}/agents/coord/shard" class="agents-subnav-link">
36 {{ icon("split", 12) }}
37 Shard Map
38 </a>
39 <a href="{{ base_url }}/agents/coord/forecast" class="agents-subnav-link">
40 {{ icon("alert-triangle", 12) }}
41 Forecast
42 </a>
43 </nav>
44
45 {# ── Two-column: agents + task queue ─────────────────────────────────── #}
46 <div class="agents-grid">
47
48 {# Active agent list #}
49 <div class="agents-card">
50 <div class="agents-card-title">Active Agents</div>
51 {% if active_agents %}
52 <div class="agents-active-count">{{ active_agents | length }} active</div>
53 <ul class="agents-agent-list">
54 {% for aid in active_agents %}
55 <li class="agents-agent-item">
56 <a href="{{ base_url }}/agents/{{ aid | urlencode }}">{{ aid }}</a>
57 </li>
58 {% endfor %}
59 </ul>
60 {% else %}
61 <div class="agents-no-active">No active agents detected.</div>
62 {% endif %}
63 </div>
64
65 {# Task queue bar chart #}
66 <div class="agents-card">
67 <div class="agents-card-title">Task Queue</div>
68 {% if task_total > 0 %}
69 <div class="agents-queue">
70 {% set max_count = [task_pending, task_claimed, task_completed, task_failed] | max %}
71 {% set max_width = max_count if max_count > 0 else 1 %}
72
73 <div class="agents-queue-row">
74 <div class="agents-queue-label">pending</div>
75 <div class="agents-queue-track">
76 <div class="agents-queue-fill agents-queue-fill--pending"
77 style="width: {{ ((task_pending / max_width) * 100) | round(1) }}%"></div>
78 </div>
79 <div class="agents-queue-count">{{ task_pending }}</div>
80 </div>
81
82 <div class="agents-queue-row">
83 <div class="agents-queue-label">claimed</div>
84 <div class="agents-queue-track">
85 <div class="agents-queue-fill agents-queue-fill--claimed"
86 style="width: {{ ((task_claimed / max_width) * 100) | round(1) }}%"></div>
87 </div>
88 <div class="agents-queue-count">{{ task_claimed }}</div>
89 </div>
90
91 <div class="agents-queue-row">
92 <div class="agents-queue-label">done</div>
93 <div class="agents-queue-track">
94 <div class="agents-queue-fill agents-queue-fill--done"
95 style="width: {{ ((task_completed / max_width) * 100) | round(1) }}%"></div>
96 </div>
97 <div class="agents-queue-count">{{ task_completed }}</div>
98 </div>
99
100 <div class="agents-queue-row">
101 <div class="agents-queue-label">failed</div>
102 <div class="agents-queue-track">
103 <div class="agents-queue-fill agents-queue-fill--failed"
104 style="width: {{ ((task_failed / max_width) * 100) | round(1) }}%"></div>
105 </div>
106 <div class="agents-queue-count">{{ task_failed }}</div>
107 </div>
108 </div>
109 {% else %}
110 <div class="agents-no-active">No tasks in queue.</div>
111 {% endif %}
112 </div>
113
114 </div>
115
116 {# ── Live reservations table ──────────────────────────────────────────── #}
117 <div class="agents-reservations">
118 <div class="agents-reservations-hd">
119 <div class="agents-reservations-title">Live Reservations</div>
120 <div class="agents-reservations-count">
121 {% if reservation_total > 0 %}
122 {{ reservation_total }} active
123 {% if reservation_total > reservations | length %} · showing {{ reservations | length }}{% endif %}
124 {% else %}
125 0 active
126 {% endif %}
127 </div>
128 </div>
129
130 {% if reservations %}
131 <table class="agents-table">
132 <thead>
133 <tr>
134 <th>Symbol</th>
135 <th>Agent</th>
136 <th>Expires</th>
137 </tr>
138 </thead>
139 <tbody>
140 {% for r in reservations %}
141 <tr>
142 <td><span class="agents-symbol-addr" title="{{ r.symbol_address }}">{{ r.symbol_address | truncate(55, true, '…') }}</span></td>
143 <td>
144 <a href="{{ base_url }}/agents/{{ r.agent_id | urlencode }}" class="agents-agent-chip">{{ r.agent_id | truncate(28, true, '…') }}</a>
145 </td>
146 <td>
147 <span class="agents-ttl">{{ r.expires_at[:19] if r.expires_at else '—' }}</span>
148 </td>
149 </tr>
150 {% endfor %}
151 </tbody>
152 </table>
153 {% if reservation_total > reservations | length %}
154 <p class="agents-hint">
155 <a href="{{ base_url }}/agents/coord">View all {{ reservation_total }} reservations →</a>
156 </p>
157 {% endif %}
158 {% else %}
159 <div class="agents-empty">
160 {{ icon("bot", 28, "icon--light-stroke agents-empty-icon") }}
161 No active symbol reservations.
162 <div class="agents-empty-hint">Agents reserve symbols with <code>muse coord reserve</code> before editing.</div>
163 </div>
164 {% endif %}
165 </div>
166
167 </div>
168 {% endblock %}
File History 2 commits
sha256:f99af7b1a7f36c4d537d1c630d4b71fc39222b1255f82e930929e2fc89015e11 fix: relax browse_repo perf budget to 500ms — 200ms was too… Sonnet 4.6 99 days ago
sha256:763eb2cb8675073b84c19345b27586d2ed939a9aee97c5479b69f502f1a70eff fix(tests): update test suite to match current implementation Sonnet 4.6 patch 121 days ago