53 lines
2 KiB
HTML
53 lines
2 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Agent Control Room</title>
|
|
<style>
|
|
body { font-family: system-ui, sans-serif; margin: 2rem; color: #172033; background: #f7f4ed; }
|
|
header { display: flex; justify-content: space-between; align-items: center; }
|
|
.card { background: white; border: 1px solid #ddd4c6; border-radius: 12px; padding: 1rem; margin: 1rem 0; }
|
|
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1rem; }
|
|
.status { font-size: .8rem; letter-spacing: .08em; color: #6f4e37; text-transform: uppercase; }
|
|
code { background: #f0ece4; padding: .15rem .3rem; border-radius: 4px; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div>
|
|
<h1>Agent Control Room</h1>
|
|
<p>Inspectable workforce inventory, champion health, challengers, and teams.</p>
|
|
</div>
|
|
<a href="/">Dashboard</a>
|
|
</header>
|
|
<section>
|
|
<h2>Agents</h2>
|
|
<div class="grid">
|
|
{% for agent in agents %}
|
|
<article class="card">
|
|
<div class="status">{{ agent.role }} / {{ agent.scope }} / {{ agent.health.status }}</div>
|
|
<h3>{{ agent.name }}</h3>
|
|
<p>{{ agent.purpose|default:agent.id }}</p>
|
|
<p>Champion: <code>{{ agent.champion_version|default:"none" }}</code></p>
|
|
<p>{{ agent.health.reasons|join:", " }}</p>
|
|
</article>
|
|
{% empty %}
|
|
<article class="card">No agents registered.</article>
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
<section>
|
|
<h2>Teams</h2>
|
|
{% for team in teams %}
|
|
<article class="card">
|
|
<div class="status">{{ team.scope }} / {{ team.status }}</div>
|
|
<h3>{{ team.name }}</h3>
|
|
<p>{{ team.purpose }}</p>
|
|
<p>{{ team.members|length }} members</p>
|
|
</article>
|
|
{% empty %}
|
|
<article class="card">No teams yet.</article>
|
|
{% endfor %}
|
|
</section>
|
|
</body>
|
|
</html>
|