From 0523765af84492640928d571f481e17b26008b13 Mon Sep 17 00:00:00 2001 From: soryu Date: Sat, 21 Feb 2026 23:51:11 +0000 Subject: feat: Add daemon health monitoring page, downloads & K8s support (#76) * feat: soryu-co/soryu - makima: Add server-side daemon binary download endpoint * feat: soryu-co/soryu - makima: Create Kubernetes daemon manifests and Dockerfile * feat: soryu-co/soryu - makima: Create dedicated Daemons page with health monitoring UI * WIP: heartbeat checkpoint * feat: soryu-co/soryu - makima: Integrate daemon platform availability into frontend downloads --- makima/frontend/src/routes/settings.tsx | 185 ++------------------------------ 1 file changed, 6 insertions(+), 179 deletions(-) (limited to 'makima/frontend/src/routes/settings.tsx') diff --git a/makima/frontend/src/routes/settings.tsx b/makima/frontend/src/routes/settings.tsx index b93ecbc..73537bd 100644 --- a/makima/frontend/src/routes/settings.tsx +++ b/makima/frontend/src/routes/settings.tsx @@ -10,13 +10,10 @@ import { changePassword, changeEmail, deleteAccount, - listDaemons, - restartDaemon, listRepositoryHistory, deleteRepositoryHistory, type ApiKeyInfo, type CreateApiKeyResponse, - type Daemon, type RepositoryHistoryEntry, } from "../lib/api"; @@ -303,13 +300,6 @@ export default function SettingsPage() { const [deleteLoading, setDeleteLoading] = useState(false); const [deleteError, setDeleteError] = useState(null); - // Daemon state - const [daemons, setDaemons] = useState([]); - const [daemonsLoading, setDaemonsLoading] = useState(true); - const [daemonsError, setDaemonsError] = useState(null); - const [restartingDaemonId, setRestartingDaemonId] = useState(null); - const [restartConfirmDaemonId, setRestartConfirmDaemonId] = useState(null); - // Repository history state const [repoHistory, setRepoHistory] = useState([]); const [repoHistoryLoading, setRepoHistoryLoading] = useState(true); @@ -318,18 +308,9 @@ export default function SettingsPage() { useEffect(() => { loadApiKey(); - loadDaemons(); loadRepoHistory(); }, []); - // Auto-refresh daemons every 30 seconds - useEffect(() => { - const interval = setInterval(() => { - loadDaemons(); - }, 30000); - return () => clearInterval(interval); - }, []); - const loadApiKey = async () => { try { setLoading(true); @@ -343,18 +324,6 @@ export default function SettingsPage() { } }; - const loadDaemons = async () => { - try { - setDaemonsError(null); - const response = await listDaemons(); - setDaemons(response.daemons); - } catch (err) { - setDaemonsError(err instanceof Error ? err.message : "Failed to load daemons"); - } finally { - setDaemonsLoading(false); - } - }; - const loadRepoHistory = async () => { try { setRepoHistoryError(null); @@ -379,23 +348,6 @@ export default function SettingsPage() { } }; - const handleRestartDaemon = async (id: string) => { - try { - setRestartingDaemonId(id); - setDaemonsError(null); - await restartDaemon(id); - // Daemon will restart, so refresh the list after a short delay - setTimeout(() => { - loadDaemons(); - }, 2000); - } catch (err) { - setDaemonsError(err instanceof Error ? err.message : "Failed to restart daemon"); - } finally { - setRestartingDaemonId(null); - setRestartConfirmDaemonId(null); - } - }; - const handleCreate = async () => { try { setActionLoading(true); @@ -648,140 +600,15 @@ export default function SettingsPage() { )} - {/* Daemon Setup */} + {/* Daemons Link */}
- Daemon Setup + Daemons

- Set your API key as an environment variable: -

- - export MAKIMA_API_KEY="your-key" - -

- Then run: makima-daemon + Daemon management has moved to its own page.

-
- - {/* Connected Daemons */} -
-
-
-

- Daemons -

- {daemons.length > 0 && ( - - ({daemons.filter(d => d.status === "connected").length} connected / {daemons.length} total) - - )} -
- -
- - {daemonsError && {daemonsError}} - - {daemonsLoading && daemons.length === 0 ? ( -

Loading...

- ) : daemons.length === 0 ? ( -
-

No daemons connected

-

- Start a daemon to enable task execution -

-
- ) : ( -
- {daemons.map((daemon) => ( -
-
- - {daemon.hostname || "Unknown Host"} - -
- - {daemon.status} - -
-
-
-
- Tasks - - {daemon.currentTaskCount} / {daemon.maxConcurrentTasks} - -
-
- Connected - - {new Date(daemon.connectedAt).toLocaleString()} - -
- {daemon.machineId && ( -
- Machine - - {daemon.machineId.substring(0, 16)}... - -
- )} -
- {/* Restart Section */} - {daemon.status === "connected" && ( -
- {restartConfirmDaemonId === daemon.id ? ( -
- - Restart daemon? Running tasks will be interrupted. - -
- - -
-
- ) : ( - - )} -
- )} -
- ))} -
- )} + + Go to Daemons → +
{/* Repository History */} -- cgit v1.2.3