Files
Timmy-time-dashboard/src/dashboard/templates/index.html
Alexander Whitestone ca0c42398b feat: migrate to Poetry, fix Docker build, and resolve 6 UI/backend bugs (#92)
Migrate from Hatchling to Poetry for dependency management, fixing the
Docker build failure caused by .dockerignore excluding README.md that
Hatchling needed for metadata. Poetry export strategy bypasses this
entirely. Creative extras removed from main build (separate service).

Docker changes:
- Multi-stage builds with poetry export → pip install
- BuildKit cache mounts for faster rebuilds
- All 3 Dockerfiles updated (root, dashboard, agent)

Bug fixes from tester audit:
- TaskStatus/TaskPriority case-insensitive enum parsing
- scrollChat() upgraded to requestAnimationFrame, removed duplicate
- Desktop/mobile nav items synced in base.html
- HTMX pointed to direct htmx.min.js URL
- Removed unused highlight.js and bootstrap.bundle.min.js
- Registered missing escalation/external task handlers in app.py

Co-authored-by: Alexander Payne <apayne@MM.local>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:12:14 -05:00

67 lines
1.8 KiB
HTML

{% extends "base.html" %}
{% block content %}
<div class="container-fluid mc-content h-100">
<div class="row g-3 h-100">
<!-- Sidebar -->
<div class="col-12 col-md-3 d-flex flex-column gap-3 mc-sidebar">
<!-- Agents (HTMX-polled from registry) -->
<div class="card mc-panel"
hx-get="/swarm/agents/sidebar"
hx-trigger="load, every 10s"
hx-target="this"
hx-swap="innerHTML">
<div class="card-header mc-panel-header">// AGENTS</div>
<div class="card-body p-3">
<div style="font-size:11px; color:var(--text-dim); letter-spacing:.08em;">LOADING...</div>
</div>
</div>
<!-- System Health (HTMX polled) -->
<div class="card mc-panel"
hx-get="/health/status"
hx-trigger="load, every 30s"
hx-target="this"
hx-swap="innerHTML">
<div class="card-header mc-panel-header">// SYSTEM HEALTH</div>
<div class="card-body p-3">
<div class="health-row">
<span class="health-label">LOADING...</span>
</div>
</div>
</div>
</div>
<!-- Main panel — swappable via HTMX; defaults to Timmy on load -->
<div id="main-panel"
class="col-12 col-md-9 d-flex flex-column mc-chat-panel"
hx-get="/agents/timmy/panel"
hx-trigger="load"
hx-target="#main-panel"
hx-swap="outerHTML">
</div>
</div>
</div>
<script>
function scrollChat() {
var log = document.getElementById('chat-log');
if (log) {
requestAnimationFrame(function() {
log.scrollTop = log.scrollHeight;
});
}
}
function scrollAgentLog(id) {
const log = document.getElementById('agent-log-' + id);
if (log) log.scrollTop = log.scrollHeight;
}
</script>
{% endblock %}