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
2026-08-28 22:14:15 +02:00
parent 61562e947d
commit 98796a82c6
158 changed files with 8459 additions and 2531 deletions
+97
View File
@@ -31,6 +31,8 @@
--icon: oklch(0.55 0.03 340);
--signal: oklch(0.48 0.21 342);
--note: oklch(0.52 0.13 78);
--warn: oklch(0.55 0.13 75);
--link: var(--primary);
--status-new: oklch(0.55 0.22 342);
--status-done: oklch(0.55 0.14 155);
@@ -74,6 +76,8 @@
--icon: #877384;
--signal: #ff82f3;
--note: oklch(0.84 0.14 88);
--warn: oklch(0.8 0.13 75);
--link: #ff82f3;
--status-new: #ff82f3;
--status-done: oklch(0.74 0.14 155);
@@ -200,3 +204,96 @@
display: none;
}
}
@theme inline {
--font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
--color-kind-master: var(--signal);
--color-kind-branch: var(--status-reply);
--color-kind-deep: var(--status-meeting);
--color-kind-job: var(--status-work);
--color-kind-fork: var(--status-skip);
--color-ok: var(--status-done);
--color-warn: var(--warn);
--color-link: var(--link);
--animate-pulse-dot: pulse-dot 1.6s cubic-bezier(0.4, 0, 0.6, 1) infinite;
--animate-rise: rise 220ms cubic-bezier(0.16, 1, 0.3, 1) both;
}
@keyframes pulse-dot {
0%,
100% {
box-shadow: 0 0 0 0 color-mix(in oklab, var(--signal) 55%, transparent);
}
50% {
box-shadow: 0 0 0 5px color-mix(in oklab, var(--signal) 0%, transparent);
}
}
@keyframes rise {
from {
opacity: 0;
transform: translateY(3px);
}
to {
opacity: 1;
transform: none;
}
}
@layer base {
* {
scrollbar-color: color-mix(in oklab, var(--foreground) 22%, transparent)
transparent;
scrollbar-width: thin;
}
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-thumb {
background: color-mix(in oklab, var(--foreground) 22%, transparent);
border-radius: 999px;
}
:focus-visible {
outline: 2px solid var(--ring);
outline-offset: 2px;
}
input,
textarea {
caret-color: var(--primary);
}
a {
text-underline-offset: 3px;
}
code,
pre,
kbd {
font-family: var(--font-mono);
font-size: 0.8125rem;
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
transition-duration: 0.01ms !important;
animation-duration: 0.01ms !important;
}
}
}
@utility row-hover {
transition: background-color 150ms ease-out;
&:hover {
background: color-mix(in oklab, var(--foreground) 4%, transparent);
}
}
@utility ledger-grid {
display: grid;
column-gap: 0.75rem;
align-items: center;
}
@utility hairline {
border-color: color-mix(in oklab, var(--border) 100%, transparent);
}