feat(ui,api,admin): sveltekit admin spa, usage by day/agent/conversation/model, rate limits, memory tree, turn snapshot

This commit is contained in:
hh committed 2026-08-28 22:14:15 +02:00
1 parent 61562e947d
commit 98796a82c6
158 files changed
+8459 -2531

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
<script lang="ts">
import type { Snippet } from "svelte";
import LiveDot from "$lib/components/live-dot.svelte";
import { gateway } from "$lib/gateway.svelte";
let {
title,
subtitle = "",
children,
actions,
}: {
title: string;
subtitle?: string;
children?: Snippet;
actions?: Snippet;
} = $props();
</script>
<header
class="flex min-h-12 flex-wrap items-center gap-x-4 gap-y-2 border-b px-4 py-2 sm:px-6"
>
<div class="flex min-w-0 items-baseline gap-2">
<h1 class="truncate font-semibold text-lg tracking-tight">{title}</h1>
{#if subtitle}
<span class="truncate text-muted-foreground text-sm">{subtitle}</span>
{/if}
</div>
{#if children}
<div class="flex min-w-0 flex-wrap items-center gap-2">
{@render children()}
</div>
{/if}
<div class="ml-auto flex items-center gap-2">
{#if actions}
{@render actions()}
{/if}
<LiveDot
class="sm:hidden"
detail={gateway.live.detail}
label={false}
state={gateway.live.state}
/>
</div>
</header>