feat(kanban): card detail modal and rich agent-run console

- RunEventList: grouped activity timeline. Assistant text becomes chat
  bubbles (auto-collapsing long messages); tool_start/tool_end pair into
  entries with spinners and expandable input/result blocks; bevy output
  rolls into a live console; relative timestamps on a left rail
- AgentRunBar: redesigned as a mission console. Live stats header (elapsed
  time, tool count, events), animated status banner with sweep/glow while
  running, clearer action bar. All controls preserved (run/steer/stop,
  diff/merge/bevy) so the human-only merge/complete safety model holds
- tailwind.css: vn-flow, vn-sweep, vn-dots, vn-spin keyframes
- CardModal: full card overlay (orchestrator, references, tags, comments)
- DiffModal: branch-diff review (commits, stat, capped patch)
- useOrchestrator: background polling + bevy status sync + ref-counted SSE
- KanbanCard: pulsing agent/bevy running badge on collapsed cards
This commit is contained in:
2026-06-16 18:17:35 -04:00
parent e4f0abed20
commit 72a41c2d76
11 changed files with 2248 additions and 592 deletions

View File

@@ -29,6 +29,57 @@
--spacing-content: 1100px;
}
/* Live indicator for active agent/Bevy runs (used by inline-styled badges). */
@keyframes vn-pulse {
0%, 100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.35;
transform: scale(0.7);
}
}
/* Moving gradient sweep across an active run's status banner. */
@keyframes vn-sweep {
0% {
transform: translateX(-120%);
}
100% {
transform: translateX(220%);
}
}
/* Bouncing dots used by "working…" / typing indicators. */
@keyframes vn-dots {
0%, 80%, 100% {
opacity: 0.25;
transform: translateY(0);
}
40% {
opacity: 1;
transform: translateY(-2px);
}
}
/* Spinner for an in-flight tool call. */
@keyframes vn-spin {
to {
transform: rotate(360deg);
}
}
/* Flowing gradient along an active run's top edge (background-position). */
@keyframes vn-flow {
0% {
background-position: 0% 0;
}
100% {
background-position: 200% 0;
}
}
@layer base {
:root {
--bg: var(--color-bg);