feat: migrate UI to @cameleer/design-system, add backend endpoints
Backend: - Add agent_events table (V5) and lifecycle event recording - Add route catalog endpoint (GET /routes/catalog) - Add route metrics endpoint (GET /routes/metrics) - Add agent events endpoint (GET /agents/events-log) - Enrich AgentInstanceResponse with tps, errorRate, activeRoutes, uptimeSeconds - Add TimescaleDB retention/compression policies (V6) Frontend: - Replace custom Mission Control UI with @cameleer/design-system components - Rebuild all pages: Dashboard, ExchangeDetail, RoutesMetrics, AgentHealth, AgentInstance, RBAC, AuditLog, OIDC, DatabaseAdmin, OpenSearchAdmin, Swagger - New LayoutShell with design system AppShell, Sidebar, TopBar, CommandPalette - Consume design system from Gitea npm registry (@cameleer/design-system@0.0.1) - Add .npmrc for scoped registry, update Dockerfile with REGISTRY_TOKEN arg CI: - Pass REGISTRY_TOKEN build-arg to UI Docker build step Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { useEffect, useRef } from 'react';
|
||||
import { Navigate, useNavigate } from 'react-router';
|
||||
import { useAuthStore } from './auth-store';
|
||||
import styles from './LoginPage.module.css';
|
||||
import { Card, Spinner, Alert, Button } from '@cameleer/design-system';
|
||||
|
||||
export function OidcCallback() {
|
||||
const { isAuthenticated, loading, error, loginWithOidcCode } = useAuthStore();
|
||||
@@ -36,29 +36,21 @@ export function OidcCallback() {
|
||||
if (isAuthenticated) return <Navigate to="/" replace />;
|
||||
|
||||
return (
|
||||
<div className={styles.page}>
|
||||
<div className={styles.card}>
|
||||
<div className={styles.logo}>
|
||||
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
||||
<path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2" />
|
||||
<path d="M12 6v6l4 2" />
|
||||
</svg>
|
||||
cameleer3
|
||||
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', minHeight: '100vh', background: 'var(--surface-ground)' }}>
|
||||
<Card>
|
||||
<div style={{ padding: '2rem', textAlign: 'center', minWidth: 320 }}>
|
||||
<h2 style={{ marginBottom: '1rem' }}>cameleer3</h2>
|
||||
{loading && <Spinner />}
|
||||
{error && (
|
||||
<>
|
||||
<Alert variant="error">{error}</Alert>
|
||||
<Button variant="secondary" onClick={() => navigate('/login')} style={{ marginTop: 16 }}>
|
||||
Back to Login
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
{loading && <div className={styles.subtitle}>Completing sign-in...</div>}
|
||||
{error && (
|
||||
<>
|
||||
<div className={styles.error}>{error}</div>
|
||||
<button
|
||||
className={styles.submit}
|
||||
style={{ marginTop: 16 }}
|
||||
onClick={() => navigate('/login')}
|
||||
>
|
||||
Back to Login
|
||||
</button>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user