14 Commits

Author SHA1 Message Date
pluto 6338621ad4 feat(agent): show and manage Swarm services scaled to 0 replicas
Zero-replica Swarm services now appear in the dashboard as "stopped"
instead of being invisible. Start/stop/restart/pull/logs all handle
the synthetic swarm: IDs correctly. Uses low-level API for container
listing to avoid NotFound errors from Dead task containers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 21:13:58 -06:00
pluto 9a24db2e47 feat: add Frigate Alerts link to Server Links page
Links to frigate-notify v2 web UI at http://192.168.86.192:5199

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:24:19 -06:00
pluto 9508b73293 feat(dashboard): add Server Links page with all service URLs
Categorized link cards for all services across nodes + public domains.
Opens in new tabs. Accessible from sidebar navigation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 08:23:25 -06:00
pluto 04c2e1f102 feat(dashboard): add status filter pills and dim stopped services
- Add All/Running/Stopped filter pills with live counts in toolbar
- Dim stopped service cards (55% opacity, red left border)
- Cards brighten on hover for easy interaction

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 07:30:10 -06:00
pluto fe76ca7456 fix: agent Dockerfile package structure and Dead container crash
- Dockerfile: COPY to /app/agent/ and use agent.main:app for proper
  package imports
- docker_ops: use low-level API in get_health() to avoid NotFound on
  containers stuck in Docker Dead state
- Add comprehensive README with architecture, API docs, and usage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 22:48:20 -06:00
pluto d92d67ebdc feat: Dockerfiles and compose files for agent and server
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 22:32:27 -06:00
pluto 093a7ea95d feat(dashboard): service grid, log viewer, group management, dark theme
Single-page dashboard with vanilla HTML/CSS/JS:
- Responsive service card grid with status badges and action buttons
- Sidebar with node health indicators, group navigation
- Slide-out log viewer panel with monospace dark output
- Group editor modal with searchable service checkbox list
- Bulk start/stop/restart with confirmation dialogs
- Toast notifications, auto-refresh every 15s, search filtering
- Dark theme using CSS custom properties

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 22:31:02 -06:00
pluto 6e9465942a feat(server): Group CRUD with JSON persistence and bulk actions (TDD)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 22:26:20 -06:00
pluto f13d6151e3 feat(server): API proxy routes for services and nodes (TDD)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 22:24:20 -06:00
pluto 9af81e3001 feat(agent): Dockerfile for node agent
Python 3.12-slim based image running uvicorn on port 8889. Includes
curl for container health checks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 18:59:58 -06:00
pluto 6dd1a61687 feat(agent): FastAPI endpoints for container management (TDD)
Add agent/main.py with REST endpoints wrapping DockerOps: health, list
containers, start/stop/restart, logs, and pull. DockerOps instantiation
handles missing Docker socket gracefully for test environments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 18:59:50 -06:00
pluto 8b3e2e5067 feat(agent): Docker operations with Swarm/Compose detection (TDD)
Add DockerOps class wrapping the Docker SDK with methods for listing,
starting, stopping, restarting containers, fetching logs, and pulling
images.  Swarm containers are detected via labels and receive special
handling (scale/force-update instead of direct container ops).
Includes 16 passing tests using mocked Docker client.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 18:57:48 -06:00
pluto fdfb9edfb0 feat: project scaffold with models, config, and test fixtures
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 18:52:39 -06:00
jeremy 3aa9f10d0d Initial commit 2026-03-05 18:43:51 -06:00