'use client' import { useCallback, useEffect, useState } from 'react' import Link from 'next/link' import { parseDockerPs } from '@/lib/parse-docker' import { fetchAgentOutput } from '@/lib/agent-fetch' type DockerData = { running: number; total: number } export type DockerInitial = { data: DockerData; error: null } | { data: null; error: string } async function refreshDocker(): Promise { const output = await fetchAgentOutput('docker_ps') const containers = parseDockerPs(output) return { running: containers.filter((c) => c.status.toLowerCase().startsWith('up')).length, total: containers.length, } } export default function DockerWidget({ initial }: { initial: DockerInitial }) { const [data, setData] = useState(initial.data) const [error, setError] = useState(initial.error) const refresh = useCallback(async () => { try { const d = await refreshDocker() setData(d) setError(null) } catch (err) { setError(err instanceof Error ? err.message : 'refresh failed') } }, []) useEffect(() => { const id = setInterval(refresh, 30_000) return () => clearInterval(id) }, [refresh]) return (

Docker

{error ? (

{error}

) : data ? (

{data.running} / {data.total} running

) : (

)} ) }