feat: active config snapshot, composite StatusDot with tooltip
Part 1 — Config snapshot: - V8 migration adds resolved_config JSONB to deployments table - DeploymentExecutor saves the full resolved config at deploy time - Deployment record includes resolvedConfig for auditability Part 2 — Composite health StatusDot: - CatalogController computes composite health from deployment status + agent health (green only when RUNNING AND agent live) - CatalogApp includes healthTooltip (e.g. "Deployment: RUNNING, Agents: live (1 connected)") - StatusDot added to app detail header with deployment status Badge - StatusDot added to deployment table rows - Sidebar passes composite health + tooltip through to tree nodes Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { ReactNode } from 'react';
|
||||
import { createElement, type ReactNode } from 'react';
|
||||
import type { SidebarTreeNode } from '@cameleer/design-system';
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
@@ -15,7 +15,8 @@ export interface SidebarRoute {
|
||||
export interface SidebarApp {
|
||||
id: string;
|
||||
name: string;
|
||||
health: 'live' | 'stale' | 'dead';
|
||||
health: 'live' | 'stale' | 'dead' | 'running' | 'error';
|
||||
healthTooltip?: string;
|
||||
exchangeCount: number;
|
||||
routes: SidebarRoute[];
|
||||
}
|
||||
@@ -70,7 +71,9 @@ export function buildAppTreeNodes(
|
||||
return apps.map((app) => ({
|
||||
id: app.id,
|
||||
label: app.name,
|
||||
icon: statusDot(app.health),
|
||||
icon: app.healthTooltip
|
||||
? createElement('span', { title: app.healthTooltip }, statusDot(app.health))
|
||||
: statusDot(app.health),
|
||||
badge: formatCount(app.exchangeCount),
|
||||
path: `/exchanges/${app.id}`,
|
||||
starrable: true,
|
||||
|
||||
Reference in New Issue
Block a user