feat: add ComponentGrid and ComponentTable components for displaying components in grid and table formats

feat: implement HealthBadge and RoleBadge components for displaying health status and roles

feat: create LogViewer component for streaming logs of services

feat: develop SecretsEditor for managing secrets with CRUD operations

feat: introduce ToolCard component for displaying tool information

style: add global CSS variables and styles for consistent theming

feat: set up API client for handling requests to the backend

feat: implement hooks for fetching components, statuses, and tools

feat: create routes for dashboard, component details, and tools

feat: add service management endpoints for starting, stopping, and restarting services

feat: implement event bus for handling real-time updates via SSE

feat: create health check and logs endpoints for monitoring services

feat: add tests for health and tools endpoints to ensure functionality

chore: update project configuration files and dependencies for better development experience
This commit is contained in:
2026-02-21 01:23:37 -08:00
parent f99c2dad86
commit 930bc601b7
63 changed files with 154 additions and 157 deletions

View File

@@ -0,0 +1,92 @@
"""Response models for the dashboard API."""
from pydantic import BaseModel
class SystemdInfo(BaseModel):
"""Systemd unit information for a managed component."""
unit_name: str
unit_path: str
timer: bool = False
class ComponentSummary(BaseModel):
"""Summary of a single component."""
id: str
description: str | None = None
roles: list[str]
runner: str | None = None
port: int | None = None
health_path: str | None = None
proxy_path: str | None = None
managed: bool = False
systemd: SystemdInfo | None = None
version: str | None = None
source: str | None = None
system_dependencies: list[str] = []
schedule: str | None = None
installed: bool | None = None
class ComponentDetail(ComponentSummary):
"""Full detail for a single component, including raw manifest."""
manifest: dict
class HealthStatus(BaseModel):
"""Health status of a single component."""
id: str
status: str # "up", "down", "unknown"
latency_ms: int | None = None
class StatusResponse(BaseModel):
"""Aggregated health status for all exposed components."""
statuses: list[HealthStatus]
class GatewayInfo(BaseModel):
"""Gateway configuration summary."""
port: int
component_count: int
service_count: int
managed_count: int
class ServiceActionResponse(BaseModel):
"""Response from a service management action."""
component: str
action: str
status: str
class ToolSummary(BaseModel):
"""Summary of a single tool."""
id: str
description: str | None = None
source: str | None = None
version: str | None = None
runner: str | None = None
system_dependencies: list[str] = []
installed: bool = False
class ToolCategory(BaseModel):
"""Tools grouped by category."""
name: str
tools: list[ToolSummary]
class ToolDetail(ToolSummary):
"""Full detail for a single tool, including documentation."""
docs: str | None = None