[taskboard] migrate fleet console to nextjs

This commit is contained in:
2026-03-06 14:44:27 -08:00
parent 94e54dc144
commit a765b3d22f
48 changed files with 5483 additions and 790 deletions

View File

@@ -0,0 +1,84 @@
import { Badge } from "@/components/ui/badge";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import type { ArchitectureDocument } from "@/lib/types";
export function ArchitectureView({ architecture }: { architecture: ArchitectureDocument }) {
return (
<div className="space-y-6">
<Card>
<CardHeader>
<CardTitle>{architecture.title}</CardTitle>
<CardDescription>Generated from the deployed fleet model and tracked channel/runtime definitions.</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="flex flex-wrap gap-2">
{architecture.overview.map((line) => (
<Badge key={line} variant="secondary">
{line}
</Badge>
))}
</div>
<pre className="rounded-xl border border-white/10 bg-slate-950/60 p-4 font-mono text-xs text-cyan-100">
{architecture.topologyDiagram}
</pre>
</CardContent>
</Card>
<div className="grid gap-6">
{architecture.sections.map((section) => (
<Card key={section.id}>
<CardHeader>
<CardTitle>{section.title}</CardTitle>
<CardDescription>{section.summary}</CardDescription>
</CardHeader>
<CardContent className="grid gap-6 xl:grid-cols-[minmax(0,1fr)_340px]">
<div className="space-y-4">
<pre className="rounded-xl border border-white/10 bg-slate-950/60 p-4 font-mono text-xs text-cyan-100">
{section.diagram}
</pre>
<div className="flex flex-wrap gap-2">
{section.configuredAgents.map((agentName) => (
<Badge key={agentName}>{agentName}</Badge>
))}
</div>
</div>
<div className="space-y-4">
<div>
<p className="mb-2 text-xs uppercase tracking-[0.2em] text-slate-500">Runtime</p>
<div className="space-y-2">
{section.runtime.map((entry) => (
<div className="rounded-lg border border-white/10 bg-white/5 p-3 text-sm" key={`${section.id}-${entry.label}`}>
<p className="text-xs uppercase tracking-[0.2em] text-slate-500">{entry.label}</p>
<p>{entry.value}</p>
</div>
))}
</div>
</div>
<div>
<p className="mb-2 text-xs uppercase tracking-[0.2em] text-slate-500">Channels</p>
<div className="space-y-2">
{section.channels.map((entry) => (
<div className="rounded-lg border border-white/10 bg-white/5 p-3 text-sm" key={`${section.id}-${entry.label}`}>
<p className="text-xs uppercase tracking-[0.2em] text-slate-500">{entry.label}</p>
<p>{entry.value}</p>
</div>
))}
</div>
</div>
<div>
<p className="mb-2 text-xs uppercase tracking-[0.2em] text-slate-500">Notes</p>
<ul className="space-y-2 text-sm text-slate-300">
{section.notes.map((note) => (
<li key={note}>- {note}</li>
))}
</ul>
</div>
</div>
</CardContent>
</Card>
))}
</div>
</div>
);
}