diff --git a/frontend/src/components/agents/AgentCard.tsx b/frontend/src/components/agents/AgentCard.tsx new file mode 100644 index 0000000..042b591 --- /dev/null +++ b/frontend/src/components/agents/AgentCard.tsx @@ -0,0 +1,47 @@ +import { motion } from 'framer-motion' +import { Cpu, Activity } from 'lucide-react' +import { Badge } from '@/components/ui/badge' + +export function AgentCard({ agent }: { agent: any }) { + const statusColor = { + online: 'bg-emerald-500', + busy: 'bg-amber-500', + offline: 'bg-zinc-500', + }[agent.status] || 'bg-zinc-500' + + return ( + +
+
+
+
+
{agent.name}
+
{agent.runtime} · {agent.model}
+
+
+ {agent.status} +
+ +
+
+ +
+
{agent.cpu}
+
CPU %
+
+
+ +
+ +
+
{agent.activeRuns}
+
RUNS
+
+
+
+ + ) +} diff --git a/frontend/src/components/agents/AgentGrid.tsx b/frontend/src/components/agents/AgentGrid.tsx index b3af39f..8f88712 100644 --- a/frontend/src/components/agents/AgentGrid.tsx +++ b/frontend/src/components/agents/AgentGrid.tsx @@ -1,6 +1,4 @@ -import { motion } from 'framer-motion' -import { Cpu, Server } from 'lucide-react' -import { Badge } from '@/components/ui/badge' +import { AgentCard } from './AgentCard' import { useAppStore } from '@/store/useAppStore' import { useQuery } from '@tanstack/react-query' @@ -33,57 +31,17 @@ export function AgentGrid() { return (
-

Live Agents

-
{online} online
+

Live Agents

+
{online} online
{isLoading && !agents.length ? (
Loading agents...
) : (
- {agents.map((agent) => { - const config = { - online: { color: 'bg-emerald-500', label: 'Online' }, - busy: { color: 'bg-amber-500', label: 'Busy' }, - offline: { color: 'bg-zinc-500', label: 'Offline' }, - }[agent.status] - - return ( - -
-
-
-
-

{agent.name}

-

{agent.runtime} · {agent.model}

-
-
- {config.label} -
- -
-
- -
-
{agent.cpu}%
-
CPU
-
-
-
- -
-
{agent.activeRuns}
-
Runs
-
-
-
- - ) - })} + {agents.map((agent) => ( + + ))}
)}
diff --git a/frontend/src/index.css b/frontend/src/index.css index d1f4e1f..144d86d 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -20,7 +20,17 @@ } * { margin: 0; padding: 0; box-sizing: border-box; } -body { background: var(--color-background); color: var(--color-foreground); font-family: 'Inter', system-ui, sans-serif; } +body { + background: var(--color-background); + color: var(--color-foreground); + font-family: 'Inter', system-ui, sans-serif; + font-feature-settings: "tnum"; + -webkit-font-smoothing: antialiased; +} +.card { + background: rgba(24, 24, 27, 0.8); + backdrop-filter: blur(20px); +} ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: hsl(240 3.7% 25%); border-radius: 3px; } diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx index 8ffd13c..c3ea714 100644 --- a/frontend/src/pages/Dashboard.tsx +++ b/frontend/src/pages/Dashboard.tsx @@ -1,23 +1,33 @@ import { AgentGrid } from '@/components/agents/AgentGrid' import { Kanban } from '@/components/tasks/Kanban' import { ActivityFeed } from '@/components/ActivityFeed' +import { useAppStore } from '@/store/useAppStore' export function Dashboard() { + const { agents } = useAppStore() + const online = agents.filter(a => a.healthy).length + return ( -
-
-

Agent Control Center

-

Управление агентами, задачами и проектами

+
+
+
+

Agent Control Center

+

Управление агентами, задачами и проектами

+
+
+
{online} online
+
v0.2.0
+
-
+
-
+
-
+