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.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.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
+