feat(web): scaffold Next.js 16 dashboard with design system and auth client #82

Merged
jason.woltje merged 1 commits from feat/p3-001-web-scaffold into main 2026-03-13 13:18:10 +00:00
26 changed files with 1070 additions and 83 deletions
Showing only changes of commit 61130b869b - Show all commits
+1 -1
View File
@@ -1,6 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
import './.next/types/routes.d.ts';
import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+1
View File
@@ -2,6 +2,7 @@ import type { NextConfig } from 'next';
const nextConfig: NextConfig = {
output: 'standalone',
transpilePackages: ['@mosaic/design-tokens'],
};
export default nextConfig;
+6 -1
View File
@@ -11,11 +11,16 @@
"start": "next start"
},
"dependencies": {
"@mosaic/design-tokens": "workspace:^",
"better-auth": "^1.5.5",
"clsx": "^2.1.0",
"next": "^16.0.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
"react-dom": "^19.0.0",
"tailwind-merge": "^3.5.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.0.0",
"@types/node": "^22.0.0",
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
+8
View File
@@ -0,0 +1,8 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
'@tailwindcss/postcss': {},
},
};
export default config;
+11
View File
@@ -0,0 +1,11 @@
import type { ReactNode } from 'react';
export default function AuthLayout({ children }: { children: ReactNode }): React.ReactElement {
return (
<div className="flex min-h-screen items-center justify-center bg-surface-bg">
<div className="w-full max-w-md rounded-xl border border-surface-border bg-surface-card p-8 shadow-lg">
{children}
</div>
</div>
);
}
+58
View File
@@ -0,0 +1,58 @@
'use client';
import Link from 'next/link';
export default function LoginPage(): React.ReactElement {
return (
<div>
<h1 className="text-2xl font-semibold">Sign in</h1>
<p className="mt-1 text-sm text-text-secondary">Sign in to your Mosaic account</p>
<form className="mt-6 space-y-4" onSubmit={(e) => e.preventDefault()}>
<div>
<label htmlFor="email" className="block text-sm font-medium text-text-secondary">
Email
</label>
<input
id="email"
name="email"
type="email"
autoComplete="email"
required
className="mt-1 block w-full rounded-lg border border-surface-border bg-surface-elevated px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500"
placeholder="[email protected]"
/>
</div>
<div>
<label htmlFor="password" className="block text-sm font-medium text-text-secondary">
Password
</label>
<input
id="password"
name="password"
type="password"
autoComplete="current-password"
required
className="mt-1 block w-full rounded-lg border border-surface-border bg-surface-elevated px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500"
placeholder="••••••••"
/>
</div>
<button
type="submit"
className="w-full rounded-lg bg-blue-600 px-4 py-2.5 text-sm font-medium text-white transition-colors hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 focus:ring-offset-surface-card"
>
Sign in
</button>
</form>
<p className="mt-4 text-center text-sm text-text-muted">
Don&apos;t have an account?{' '}
<Link href="/register" className="text-blue-400 hover:text-blue-300">
Sign up
</Link>
</p>
</div>
);
}
+73
View File
@@ -0,0 +1,73 @@
'use client';
import Link from 'next/link';
export default function RegisterPage(): React.ReactElement {
return (
<div>
<h1 className="text-2xl font-semibold">Create account</h1>
<p className="mt-1 text-sm text-text-secondary">Get started with Mosaic</p>
<form className="mt-6 space-y-4" onSubmit={(e) => e.preventDefault()}>
<div>
<label htmlFor="name" className="block text-sm font-medium text-text-secondary">
Name
</label>
<input
id="name"
name="name"
type="text"
autoComplete="name"
required
className="mt-1 block w-full rounded-lg border border-surface-border bg-surface-elevated px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500"
placeholder="Your name"
/>
</div>
<div>
<label htmlFor="email" className="block text-sm font-medium text-text-secondary">
Email
</label>
<input
id="email"
name="email"
type="email"
autoComplete="email"
required
className="mt-1 block w-full rounded-lg border border-surface-border bg-surface-elevated px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500"
placeholder="[email protected]"
/>
</div>
<div>
<label htmlFor="password" className="block text-sm font-medium text-text-secondary">
Password
</label>
<input
id="password"
name="password"
type="password"
autoComplete="new-password"
required
className="mt-1 block w-full rounded-lg border border-surface-border bg-surface-elevated px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500"
placeholder="••••••••"
/>
</div>
<button
type="submit"
className="w-full rounded-lg bg-blue-600 px-4 py-2.5 text-sm font-medium text-white transition-colors hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 focus:ring-offset-surface-card"
>
Create account
</button>
</form>
<p className="mt-4 text-center text-sm text-text-muted">
Already have an account?{' '}
<Link href="/login" className="text-blue-400 hover:text-blue-300">
Sign in
</Link>
</p>
</div>
);
}
@@ -0,0 +1,8 @@
export default function ChatPage(): React.ReactElement {
return (
<div>
<h1 className="text-2xl font-semibold">Chat</h1>
<p className="mt-2 text-text-secondary">Conversations will appear here.</p>
</div>
);
}
+6
View File
@@ -0,0 +1,6 @@
import type { ReactNode } from 'react';
import { AppShell } from '@/components/layout/app-shell';
export default function DashboardLayout({ children }: { children: ReactNode }): React.ReactElement {
return <AppShell>{children}</AppShell>;
}
+115
View File
@@ -0,0 +1,115 @@
@import 'tailwindcss';
/*
* Mosaic Stack design tokens mapped to Tailwind v4 theme.
* Source: @mosaic/design-tokens (AD-13)
* Fonts: Outfit (sans), Fira Code (mono)
* Palette: deep blue-grays + blue/purple/teal accents
* Default: dark theme
*/
@theme {
/* ─── Fonts ─── */
--font-sans: 'Outfit', system-ui, -apple-system, sans-serif;
--font-mono: 'Fira Code', ui-monospace, Menlo, monospace;
/* ─── Neutral blue-gray scale ─── */
--color-gray-50: #f0f2f5;
--color-gray-100: #dce0e8;
--color-gray-200: #b8c0cc;
--color-gray-300: #8e99a9;
--color-gray-400: #6b7a8d;
--color-gray-500: #4e5d70;
--color-gray-600: #3b4859;
--color-gray-700: #2a3544;
--color-gray-800: #1c2433;
--color-gray-900: #111827;
--color-gray-950: #0a0f1a;
/* ─── Primary — blue ─── */
--color-blue-50: #eff4ff;
--color-blue-100: #dae5ff;
--color-blue-200: #bdd1ff;
--color-blue-300: #8fb4ff;
--color-blue-400: #5b8bff;
--color-blue-500: #3b6cf7;
--color-blue-600: #2551e0;
--color-blue-700: #1d40c0;
--color-blue-800: #1e369c;
--color-blue-900: #1e317b;
--color-blue-950: #162050;
/* ─── Accent — purple ─── */
--color-purple-50: #f3f0ff;
--color-purple-100: #e7dfff;
--color-purple-200: #d2c3ff;
--color-purple-300: #b49aff;
--color-purple-400: #9466ff;
--color-purple-500: #7c3aed;
--color-purple-600: #6d28d9;
--color-purple-700: #5b21b6;
--color-purple-800: #4c1d95;
--color-purple-900: #3b1578;
--color-purple-950: #230d4d;
/* ─── Accent — teal ─── */
--color-teal-50: #effcf9;
--color-teal-100: #d0f7ef;
--color-teal-200: #a4eddf;
--color-teal-300: #6fddcb;
--color-teal-400: #3ec5b2;
--color-teal-500: #25aa99;
--color-teal-600: #1c897e;
--color-teal-700: #1b6e66;
--color-teal-800: #1a5853;
--color-teal-900: #194945;
--color-teal-950: #082d2b;
/* ─── Semantic surface tokens ─── */
--color-surface-bg: #0a0f1a;
--color-surface-card: #111827;
--color-surface-elevated: #1c2433;
--color-surface-border: #2a3544;
/* ─── Semantic text tokens ─── */
--color-text-primary: #f0f2f5;
--color-text-secondary: #8e99a9;
--color-text-muted: #6b7a8d;
/* ─── Status colors ─── */
--color-success: #22c55e;
--color-warning: #f59e0b;
--color-error: #ef4444;
--color-info: #3b82f6;
/* ─── Sidebar width ─── */
--spacing-sidebar: 16rem;
}
/* ─── Base styles ─── */
body {
background-color: var(--color-surface-bg);
color: var(--color-text-primary);
font-family: var(--font-sans);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* ─── Scrollbar styling ─── */
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--color-gray-600);
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--color-gray-500);
}
+18 -2
View File
@@ -1,13 +1,29 @@
import type { ReactNode } from 'react';
import { Outfit, Fira_Code } from 'next/font/google';
import './globals.css';
const outfit = Outfit({
subsets: ['latin'],
variable: '--font-sans',
display: 'swap',
weight: ['300', '400', '500', '600', '700'],
});
const firaCode = Fira_Code({
subsets: ['latin'],
variable: '--font-mono',
display: 'swap',
weight: ['400', '500', '700'],
});
export const metadata = {
title: 'Mosaic',
description: 'Mosaic Stack Dashboard',
};
export default function RootLayout({ children }: { children: ReactNode }): ReactNode {
export default function RootLayout({ children }: { children: ReactNode }): React.ReactElement {
return (
<html lang="en">
<html lang="en" className={`dark ${outfit.variable} ${firaCode.variable}`}>
<body>{children}</body>
</html>
);
+4 -6
View File
@@ -1,7 +1,5 @@
export default function HomePage(): React.ReactElement {
return (
<main>
<h1>Mosaic Stack</h1>
</main>
);
import { redirect } from 'next/navigation';
export default function HomePage(): never {
redirect('/chat');
}
@@ -0,0 +1,19 @@
import type { ReactNode } from 'react';
import { Sidebar } from './sidebar';
import { Topbar } from './topbar';
interface AppShellProps {
children: ReactNode;
}
export function AppShell({ children }: AppShellProps): React.ReactElement {
return (
<div className="min-h-screen">
<Sidebar />
<div className="pl-sidebar">
<Topbar />
<main className="p-6">{children}</main>
</div>
</div>
);
}
@@ -0,0 +1,59 @@
'use client';
import Link from 'next/link';
import { usePathname } from 'next/navigation';
import { cn } from '@/lib/cn';
interface NavItem {
label: string;
href: string;
icon: string;
}
const navItems: NavItem[] = [
{ label: 'Chat', href: '/chat', icon: '💬' },
{ label: 'Tasks', href: '/tasks', icon: '📋' },
{ label: 'Projects', href: '/projects', icon: '📁' },
{ label: 'Settings', href: '/settings', icon: '⚙️' },
];
export function Sidebar(): React.ReactElement {
const pathname = usePathname();
return (
<aside className="fixed left-0 top-0 z-30 flex h-screen w-sidebar flex-col border-r border-surface-border bg-surface-card">
<div className="flex h-14 items-center px-4">
<Link href="/" className="text-lg font-semibold text-text-primary">
Mosaic
</Link>
</div>
<nav className="flex-1 space-y-1 px-2 py-2">
{navItems.map((item) => {
const isActive = pathname === item.href || pathname.startsWith(`${item.href}/`);
return (
<Link
key={item.href}
href={item.href}
className={cn(
'flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors',
isActive
? 'bg-blue-600/20 text-blue-400'
: 'text-text-secondary hover:bg-surface-elevated hover:text-text-primary',
)}
>
<span className="text-base" aria-hidden="true">
{item.icon}
</span>
{item.label}
</Link>
);
})}
</nav>
<div className="border-t border-surface-border p-4">
<p className="text-xs text-text-muted">Mosaic Stack v0.0.4</p>
</div>
</aside>
);
}
+32
View File
@@ -0,0 +1,32 @@
'use client';
import { useSession, signOut } from '@/lib/auth-client';
export function Topbar(): React.ReactElement {
const { data: session } = useSession();
return (
<header className="sticky top-0 z-20 flex h-14 items-center justify-between border-b border-surface-border bg-surface-card/80 px-6 backdrop-blur-sm">
<div />
<div className="flex items-center gap-4">
{session?.user ? (
<>
<span className="text-sm text-text-secondary">
{session.user.name ?? session.user.email}
</span>
<button
type="button"
onClick={() => signOut()}
className="rounded-md px-3 py-1.5 text-sm text-text-muted transition-colors hover:bg-surface-elevated hover:text-text-primary"
>
Sign out
</button>
</>
) : (
<span className="text-sm text-text-muted">Not signed in</span>
)}
</div>
</header>
);
}
+47
View File
@@ -0,0 +1,47 @@
const GATEWAY_URL = process.env['NEXT_PUBLIC_GATEWAY_URL'] ?? 'http://localhost:4000';
export interface ApiRequestInit extends Omit<RequestInit, 'body'> {
body?: unknown;
}
export interface ApiError {
statusCode: number;
message: string;
}
/**
* Fetch wrapper for the Mosaic gateway API.
* Sends credentials (cookies) and JSON body automatically.
*/
export async function api<T>(path: string, init?: ApiRequestInit): Promise<T> {
const { body, headers: customHeaders, ...rest } = init ?? {};
const headers: Record<string, string> = {
Accept: 'application/json',
...(customHeaders as Record<string, string>),
};
if (body !== undefined) {
headers['Content-Type'] = 'application/json';
}
const res = await fetch(`${GATEWAY_URL}${path}`, {
credentials: 'include',
...rest,
headers,
body: body !== undefined ? JSON.stringify(body) : undefined,
});
if (!res.ok) {
const errorBody = (await res.json().catch(() => ({
statusCode: res.status,
message: res.statusText,
}))) as ApiError;
throw Object.assign(new Error(errorBody.message), {
statusCode: errorBody.statusCode,
});
}
if (res.status === 204) return undefined as T;
return (await res.json()) as T;
}
+7
View File
@@ -0,0 +1,7 @@
import { createAuthClient } from 'better-auth/react';
export const authClient: ReturnType<typeof createAuthClient> = createAuthClient({
baseURL: process.env['NEXT_PUBLIC_GATEWAY_URL'] ?? 'http://localhost:4000',
});
export const { useSession, signIn, signUp, signOut } = authClient;
+7
View File
@@ -0,0 +1,7 @@
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
/** Merge and deduplicate Tailwind class names. */
export function cn(...inputs: ClassValue[]): string {
return twMerge(clsx(inputs));
}
-11
View File
@@ -1,11 +0,0 @@
import type { Config } from 'tailwindcss';
const config: Config = {
content: ['./src/**/*.{ts,tsx}'],
theme: {
extend: {},
},
plugins: [],
};
export default config;
+1 -1
View File
@@ -29,7 +29,7 @@
| P2-005 | done | Phase 2 | @mosaic/coord — migrate from v0, gateway integration | #77 | #23 |
| P2-006 | done | Phase 2 | Agent session management — tmux + monitoring | #78 | #24 |
| P2-007 | done | Phase 2 | Verify Phase 2 — multi-provider routing works | #79 | #25 |
| P3-001 | not-started | Phase 3 | apps/web scaffold — Next.js 16 + BetterAuth + Tailwind | — | #26 |
| P3-001 | in-progress | Phase 3 | apps/web scaffold — Next.js 16 + BetterAuth + Tailwind | — | #26 |
| P3-002 | not-started | Phase 3 | Auth pages — login, registration, SSO redirect | — | #27 |
| P3-003 | not-started | Phase 3 | Chat UI — conversations, messages, streaming | — | #28 |
| P3-004 | not-started | Phase 3 | Task management — list view + kanban board | — | #29 |
+1
View File
@@ -1,6 +1,7 @@
{
"name": "@mosaic/design-tokens",
"version": "0.0.0",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
+91
View File
@@ -0,0 +1,91 @@
/**
* Mosaic Stack color palette.
* Deep blue-grays with blue/purple/teal accents.
*/
export const colors = {
/** Neutral blue-gray scale */
gray: {
50: '#f0f2f5',
100: '#dce0e8',
200: '#b8c0cc',
300: '#8e99a9',
400: '#6b7a8d',
500: '#4e5d70',
600: '#3b4859',
700: '#2a3544',
800: '#1c2433',
900: '#111827',
950: '#0a0f1a',
},
/** Primary — blue */
blue: {
50: '#eff4ff',
100: '#dae5ff',
200: '#bdd1ff',
300: '#8fb4ff',
400: '#5b8bff',
500: '#3b6cf7',
600: '#2551e0',
700: '#1d40c0',
800: '#1e369c',
900: '#1e317b',
950: '#162050',
},
/** Accent — purple */
purple: {
50: '#f3f0ff',
100: '#e7dfff',
200: '#d2c3ff',
300: '#b49aff',
400: '#9466ff',
500: '#7c3aed',
600: '#6d28d9',
700: '#5b21b6',
800: '#4c1d95',
900: '#3b1578',
950: '#230d4d',
},
/** Accent — teal */
teal: {
50: '#effcf9',
100: '#d0f7ef',
200: '#a4eddf',
300: '#6fddcb',
400: '#3ec5b2',
500: '#25aa99',
600: '#1c897e',
700: '#1b6e66',
800: '#1a5853',
900: '#194945',
950: '#082d2b',
},
/** Semantic */
success: '#22c55e',
warning: '#f59e0b',
error: '#ef4444',
info: '#3b82f6',
/** Surface — dark theme defaults */
surface: {
background: '#0a0f1a',
card: '#111827',
elevated: '#1c2433',
overlay: 'rgba(0, 0, 0, 0.6)',
border: '#2a3544',
},
/** Text */
text: {
primary: '#f0f2f5',
secondary: '#8e99a9',
muted: '#6b7a8d',
inverse: '#0a0f1a',
},
} as const;
export type Colors = typeof colors;
+33
View File
@@ -0,0 +1,33 @@
/**
* Mosaic Stack font definitions.
* Outfit (sans) — headings and body.
* Fira Code (mono) — code and terminal.
*/
export const fonts = {
sans: {
family: 'Outfit',
fallback: 'system-ui, -apple-system, sans-serif',
stack: "'Outfit', system-ui, -apple-system, sans-serif",
weights: {
light: 300,
regular: 400,
medium: 500,
semibold: 600,
bold: 700,
},
},
mono: {
family: 'Fira Code',
fallback: 'ui-monospace, Menlo, monospace',
stack: "'Fira Code', ui-monospace, Menlo, monospace",
weights: {
regular: 400,
medium: 500,
bold: 700,
},
},
} as const;
export type Fonts = typeof fonts;
+5 -1
View File
@@ -1 +1,5 @@
export const VERSION = '0.0.0';
export const VERSION = '0.0.1';
export { colors, type Colors } from './colors.js';
export { fonts, type Fonts } from './fonts.js';
export { spacing, radius, type Spacing, type Radius } from './spacing.js';
+38
View File
@@ -0,0 +1,38 @@
/**
* Mosaic Stack spacing scale (in rem).
* Based on a 4px grid (0.25rem increments).
*/
export const spacing = {
px: '1px',
0: '0',
0.5: '0.125rem',
1: '0.25rem',
1.5: '0.375rem',
2: '0.5rem',
2.5: '0.625rem',
3: '0.75rem',
4: '1rem',
5: '1.25rem',
6: '1.5rem',
8: '2rem',
10: '2.5rem',
12: '3rem',
16: '4rem',
20: '5rem',
24: '6rem',
32: '8rem',
} as const;
export const radius = {
none: '0',
sm: '0.25rem',
md: '0.375rem',
lg: '0.5rem',
xl: '0.75rem',
'2xl': '1rem',
full: '9999px',
} as const;
export type Spacing = typeof spacing;
export type Radius = typeof radius;
+421 -60
View File
@@ -10,13 +10,13 @@ importers:
devDependencies:
'@typescript-eslint/eslint-plugin':
specifier: ^8.0.0
version: 8.57.0(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected])
version: 8.57.0(@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
'@typescript-eslint/parser':
specifier: ^8.0.0
version: 8.57.0([email protected])([email protected])
version: 8.57.0([email protected]([email protected]))([email protected])
eslint:
specifier: ^9.0.0
version: 9.39.4
version: 9.39.4([email protected])
husky:
specifier: ^9.0.0
version: 9.1.7
@@ -34,10 +34,10 @@ importers:
version: 5.9.3
typescript-eslint:
specifier: ^8.0.0
version: 8.57.0([email protected])([email protected])
version: 8.57.0([email protected]([email protected]))([email protected])
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
apps/gateway:
dependencies:
@@ -103,7 +103,7 @@ importers:
version: 0.34.48
better-auth:
specifier: ^1.5.5
version: 1.5.5([email protected])([email protected](@opentelemetry/[email protected])(@types/[email protected])([email protected])([email protected]))([email protected]([email protected]))([email protected](@opentelemetry/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected]))
version: 1.5.5([email protected])([email protected](@opentelemetry/[email protected])(@types/[email protected])([email protected])([email protected]))([email protected]([email protected]))([email protected](@opentelemetry/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])([email protected]))
fastify:
specifier: ^5.0.0
version: 5.8.2
@@ -134,10 +134,19 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
apps/web:
dependencies:
'@mosaic/design-tokens':
specifier: workspace:^
version: link:../../packages/design-tokens
better-auth:
specifier: ^1.5.5
version: 1.5.5([email protected])([email protected](@opentelemetry/[email protected])(@types/[email protected])([email protected])([email protected]))([email protected]([email protected]))([email protected](@opentelemetry/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])([email protected]))
clsx:
specifier: ^2.1.0
version: 2.1.1
next:
specifier: ^16.0.0
version: 16.1.6(@opentelemetry/[email protected])([email protected]([email protected]))([email protected])
@@ -147,7 +156,13 @@ importers:
react-dom:
specifier: ^19.0.0
version: 19.2.4([email protected])
tailwind-merge:
specifier: ^3.5.0
version: 3.5.0
devDependencies:
'@tailwindcss/postcss':
specifier: ^4.0.0
version: 4.2.1
'@types/node':
specifier: ^22.0.0
version: 22.19.15
@@ -165,7 +180,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/agent:
dependencies:
@@ -178,7 +193,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/auth:
dependencies:
@@ -187,7 +202,7 @@ importers:
version: link:../db
better-auth:
specifier: ^1.5.5
version: 1.5.5([email protected])([email protected](@opentelemetry/[email protected])(@types/[email protected])([email protected])([email protected]))([email protected]([email protected]))([email protected](@opentelemetry/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected]))
version: 1.5.5([email protected])([email protected](@opentelemetry/[email protected])(@types/[email protected])([email protected])([email protected]))([email protected]([email protected]))([email protected](@opentelemetry/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])([email protected]))
devDependencies:
'@types/node':
specifier: ^22.0.0
@@ -200,7 +215,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/brain:
dependencies:
@@ -216,7 +231,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/cli:
dependencies:
@@ -250,7 +265,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/coord:
dependencies:
@@ -266,7 +281,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/db:
dependencies:
@@ -291,7 +306,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/design-tokens:
devDependencies:
@@ -300,7 +315,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/log:
devDependencies:
@@ -309,7 +324,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/memory:
dependencies:
@@ -322,7 +337,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/mosaic:
devDependencies:
@@ -331,7 +346,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/prdy:
devDependencies:
@@ -340,7 +355,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/quality-rails:
devDependencies:
@@ -349,7 +364,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/queue:
dependencies:
@@ -365,7 +380,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages/types:
dependencies:
@@ -381,7 +396,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
plugins/discord:
dependencies:
@@ -400,7 +415,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
plugins/telegram:
devDependencies:
@@ -409,7 +424,7 @@ importers:
version: 5.9.3
vitest:
specifier: ^2.0.0
version: 2.1.9(@types/[email protected])
version: 2.1.9(@types/[email protected])([email protected])
packages:
@@ -417,6 +432,10 @@ packages:
resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==}
engines: {node: '>=14.13.1'}
'@alloc/[email protected]':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
'@anthropic-ai/[email protected]':
resolution: {integrity: sha512-URURVzhxXGJDGUGFunIOtBlSl7KWvZiAAKY/ttTkZAkXT9bTPqdk2eK0b8qqSxXpikh3QKPnPYpiyX98zf5ebw==}
hasBin: true
@@ -1498,9 +1517,22 @@ packages:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
'@jridgewell/[email protected]':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/[email protected]':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/[email protected]':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/[email protected]':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/[email protected]':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@js-sdsl/[email protected]':
resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==}
@@ -2568,6 +2600,94 @@ packages:
'@swc/[email protected]':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==}
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [android]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [darwin]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==}
engines: {node: '>= 20'}
cpu: [x64]
os: [darwin]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==}
engines: {node: '>= 20'}
cpu: [x64]
os: [freebsd]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==}
engines: {node: '>= 20'}
cpu: [arm]
os: [linux]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==}
engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==}
engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
- '@napi-rs/wasm-runtime'
- '@emnapi/core'
- '@emnapi/runtime'
- '@tybys/wasm-util'
- '@emnapi/wasi-threads'
- tslib
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==}
engines: {node: '>= 20'}
cpu: [arm64]
os: [win32]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==}
engines: {node: '>= 20'}
cpu: [x64]
os: [win32]
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==}
engines: {node: '>= 20'}
'@tailwindcss/[email protected]':
resolution: {integrity: sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==}
'@tokenizer/[email protected]':
resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==}
engines: {node: '>=18'}
@@ -3029,6 +3149,10 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
[email protected]:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
[email protected]:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines: {node: '>=0.10.0'}
@@ -3260,6 +3384,10 @@ packages:
resolution: {integrity: sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA==}
engines: {node: '>=10.2.0'}
[email protected]:
resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==}
engines: {node: '>=10.13.0'}
[email protected]:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
@@ -3683,6 +3811,10 @@ packages:
[email protected]:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
[email protected]:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
[email protected]:
resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==}
@@ -3741,6 +3873,76 @@ packages:
[email protected]:
resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
[email protected]:
resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [android]
[email protected]:
resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
[email protected]:
resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
[email protected]:
resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
[email protected]:
resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
[email protected]:
resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
[email protected]:
resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
[email protected]:
resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
[email protected]:
resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
[email protected]:
resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
[email protected]:
resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
[email protected]:
resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
engines: {node: '>= 12.0.0'}
[email protected]:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
@@ -4463,9 +4665,16 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
[email protected]:
resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==}
[email protected]:
resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==}
[email protected]:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
[email protected]:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
@@ -4815,6 +5024,8 @@ snapshots:
ansi-styles: 6.2.3
is-fullwidth-code-point: 4.0.0
'@alloc/[email protected]': {}
'@anthropic-ai/[email protected]([email protected])':
dependencies:
json-schema-to-ts: 3.1.1
@@ -5608,9 +5819,9 @@ snapshots:
'@esbuild/[email protected]':
optional: true
'@eslint-community/[email protected]([email protected])':
'@eslint-community/[email protected]([email protected]([email protected]))':
dependencies:
eslint: 9.39.4
eslint: 9.39.4([email protected])
eslint-visitor-keys: 3.4.3
'@eslint-community/[email protected]': {}
@@ -5829,8 +6040,25 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: [email protected]
'@jridgewell/[email protected]':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/[email protected]':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
'@jridgewell/[email protected]': {}
'@jridgewell/[email protected]': {}
'@jridgewell/[email protected]':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@js-sdsl/[email protected]': {}
'@lukeed/[email protected]': {}
@@ -7190,6 +7418,75 @@ snapshots:
dependencies:
tslib: 2.8.1
'@tailwindcss/[email protected]':
dependencies:
'@jridgewell/remapping': 2.3.5
enhanced-resolve: 5.20.0
jiti: 2.6.1
lightningcss: 1.31.1
magic-string: 0.30.21
source-map-js: 1.2.1
tailwindcss: 4.2.1
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optional: true
'@tailwindcss/[email protected]':
optionalDependencies:
'@tailwindcss/oxide-android-arm64': 4.2.1
'@tailwindcss/oxide-darwin-arm64': 4.2.1
'@tailwindcss/oxide-darwin-x64': 4.2.1
'@tailwindcss/oxide-freebsd-x64': 4.2.1
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1
'@tailwindcss/oxide-linux-arm64-gnu': 4.2.1
'@tailwindcss/oxide-linux-arm64-musl': 4.2.1
'@tailwindcss/oxide-linux-x64-gnu': 4.2.1
'@tailwindcss/oxide-linux-x64-musl': 4.2.1
'@tailwindcss/oxide-wasm32-wasi': 4.2.1
'@tailwindcss/oxide-win32-arm64-msvc': 4.2.1
'@tailwindcss/oxide-win32-x64-msvc': 4.2.1
'@tailwindcss/[email protected]':
dependencies:
'@alloc/quick-lru': 5.2.0
'@tailwindcss/node': 4.2.1
'@tailwindcss/oxide': 4.2.1
postcss: 8.5.8
tailwindcss: 4.2.1
'@tokenizer/[email protected]':
dependencies:
debug: 4.4.3
@@ -7287,15 +7584,15 @@ snapshots:
'@types/node': 22.19.15
optional: true
'@typescript-eslint/[email protected](@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected])':
'@typescript-eslint/[email protected](@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])':
dependencies:
'@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 8.57.0([email protected])([email protected])
'@typescript-eslint/parser': 8.57.0([email protected]([email protected]))([email protected])
'@typescript-eslint/scope-manager': 8.57.0
'@typescript-eslint/type-utils': 8.57.0([email protected])([email protected])
'@typescript-eslint/utils': 8.57.0([email protected])([email protected])
'@typescript-eslint/type-utils': 8.57.0([email protected]([email protected]))([email protected])
'@typescript-eslint/utils': 8.57.0([email protected]([email protected]))([email protected])
'@typescript-eslint/visitor-keys': 8.57.0
eslint: 9.39.4
eslint: 9.39.4([email protected])
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.4.0([email protected])
@@ -7303,14 +7600,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/[email protected]([email protected])([email protected])':
'@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])':
dependencies:
'@typescript-eslint/scope-manager': 8.57.0
'@typescript-eslint/types': 8.57.0
'@typescript-eslint/typescript-estree': 8.57.0([email protected])
'@typescript-eslint/visitor-keys': 8.57.0
debug: 4.4.3
eslint: 9.39.4
eslint: 9.39.4([email protected])
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -7333,13 +7630,13 @@ snapshots:
dependencies:
typescript: 5.9.3
'@typescript-eslint/[email protected]([email protected])([email protected])':
'@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])':
dependencies:
'@typescript-eslint/types': 8.57.0
'@typescript-eslint/typescript-estree': 8.57.0([email protected])
'@typescript-eslint/utils': 8.57.0([email protected])([email protected])
'@typescript-eslint/utils': 8.57.0([email protected]([email protected]))([email protected])
debug: 4.4.3
eslint: 9.39.4
eslint: 9.39.4([email protected])
ts-api-utils: 2.4.0([email protected])
typescript: 5.9.3
transitivePeerDependencies:
@@ -7362,13 +7659,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/[email protected]([email protected])([email protected])':
'@typescript-eslint/[email protected]([email protected]([email protected]))([email protected])':
dependencies:
'@eslint-community/eslint-utils': 4.9.1([email protected])
'@eslint-community/eslint-utils': 4.9.1([email protected]([email protected]))
'@typescript-eslint/scope-manager': 8.57.0
'@typescript-eslint/types': 8.57.0
'@typescript-eslint/typescript-estree': 8.57.0([email protected])
eslint: 9.39.4
eslint: 9.39.4([email protected])
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -7385,13 +7682,13 @@ snapshots:
chai: 5.3.3
tinyrainbow: 1.2.0
'@vitest/[email protected]([email protected](@types/[email protected]))':
'@vitest/[email protected]([email protected](@types/[email protected])([email protected]))':
dependencies:
'@vitest/spy': 2.1.9
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
vite: 5.4.21(@types/[email protected])
vite: 5.4.21(@types/[email protected])([email protected])
'@vitest/[email protected]':
dependencies:
@@ -7502,7 +7799,7 @@ snapshots:
[email protected]: {}
[email protected]([email protected])([email protected](@opentelemetry/[email protected])(@types/[email protected])([email protected])([email protected]))([email protected]([email protected]))([email protected](@opentelemetry/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])):
[email protected]([email protected])([email protected](@opentelemetry/[email protected])(@types/[email protected])([email protected])([email protected]))([email protected]([email protected]))([email protected](@opentelemetry/[email protected])([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])([email protected](@types/[email protected])([email protected])):
dependencies:
'@better-auth/core': 1.5.5(@better-auth/[email protected])(@better-fetch/[email protected])([email protected]([email protected]))([email protected])([email protected])([email protected])
'@better-auth/drizzle-adapter': 1.5.5(@better-auth/[email protected](@better-auth/[email protected])(@better-fetch/[email protected])([email protected]([email protected]))([email protected])([email protected])([email protected]))(@better-auth/[email protected])([email protected](@opentelemetry/[email protected])(@types/[email protected])([email protected])([email protected]))
@@ -7528,7 +7825,7 @@ snapshots:
next: 16.1.6(@opentelemetry/[email protected])([email protected]([email protected]))([email protected])
react: 19.2.4
react-dom: 19.2.4([email protected])
vitest: 2.1.9(@types/[email protected])
vitest: 2.1.9(@types/[email protected])([email protected])
transitivePeerDependencies:
- '@cloudflare/workers-types'
@@ -7643,6 +7940,8 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
[email protected]: {}
[email protected]: {}
[email protected]:
@@ -7706,8 +8005,7 @@ snapshots:
[email protected]: {}
[email protected]:
optional: true
[email protected]: {}
[email protected]: {}
@@ -7795,6 +8093,11 @@ snapshots:
- supports-color
- utf-8-validate
[email protected]:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.0
[email protected]: {}
[email protected]: {}
@@ -7942,9 +8245,9 @@ snapshots:
[email protected]: {}
[email protected]:
[email protected]([email protected]):
dependencies:
'@eslint-community/eslint-utils': 4.9.1([email protected])
'@eslint-community/eslint-utils': 4.9.1([email protected]([email protected]))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.2
'@eslint/config-helpers': 0.4.2
@@ -7978,6 +8281,8 @@ snapshots:
minimatch: 3.1.5
natural-compare: 1.4.0
optionator: 0.9.4
optionalDependencies:
jiti: 2.6.1
transitivePeerDependencies:
- supports-color
@@ -8388,6 +8693,8 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
[email protected]: {}
[email protected]: {}
[email protected]: {}
@@ -8450,6 +8757,55 @@ snapshots:
process-warning: 4.0.1
set-cookie-parser: 2.7.2
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
optional: true
[email protected]:
dependencies:
detect-libc: 2.1.2
optionalDependencies:
lightningcss-android-arm64: 1.31.1
lightningcss-darwin-arm64: 1.31.1
lightningcss-darwin-x64: 1.31.1
lightningcss-freebsd-x64: 1.31.1
lightningcss-linux-arm-gnueabihf: 1.31.1
lightningcss-linux-arm64-gnu: 1.31.1
lightningcss-linux-arm64-musl: 1.31.1
lightningcss-linux-x64-gnu: 1.31.1
lightningcss-linux-x64-musl: 1.31.1
lightningcss-win32-arm64-msvc: 1.31.1
lightningcss-win32-x64-msvc: 1.31.1
[email protected]: {}
[email protected]:
@@ -9174,8 +9530,12 @@ snapshots:
dependencies:
has-flag: 4.0.0
[email protected]: {}
[email protected]: {}
[email protected]: {}
[email protected]:
dependencies:
thenify: 3.3.1
@@ -9269,13 +9629,13 @@ snapshots:
[email protected]: {}
[email protected]([email protected])([email protected]):
[email protected]([email protected]([email protected]))([email protected]):
dependencies:
'@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/[email protected]([email protected])([email protected]))([email protected])([email protected])
'@typescript-eslint/parser': 8.57.0([email protected])([email protected])
'@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/[email protected]([email protected]([email protected]))([email protected]))([email protected]([email protected]))([email protected])
'@typescript-eslint/parser': 8.57.0([email protected]([email protected]))([email protected])
'@typescript-eslint/typescript-estree': 8.57.0([email protected])
'@typescript-eslint/utils': 8.57.0([email protected])([email protected])
eslint: 9.39.4
'@typescript-eslint/utils': 8.57.0([email protected]([email protected]))([email protected])
eslint: 9.39.4([email protected])
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -9304,13 +9664,13 @@ snapshots:
[email protected]: {}
[email protected](@types/[email protected]):
[email protected](@types/[email protected])([email protected]):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 1.1.2
vite: 5.4.21(@types/[email protected])
vite: 5.4.21(@types/[email protected])([email protected])
transitivePeerDependencies:
- '@types/node'
- less
@@ -9322,7 +9682,7 @@ snapshots:
- supports-color
- terser
[email protected](@types/[email protected]):
[email protected](@types/[email protected])([email protected]):
dependencies:
esbuild: 0.21.5
postcss: 8.5.8
@@ -9330,11 +9690,12 @@ snapshots:
optionalDependencies:
'@types/node': 22.19.15
fsevents: 2.3.3
lightningcss: 1.31.1
[email protected](@types/[email protected]):
[email protected](@types/[email protected])([email protected]):
dependencies:
'@vitest/expect': 2.1.9
'@vitest/mocker': 2.1.9([email protected](@types/[email protected]))
'@vitest/mocker': 2.1.9([email protected](@types/[email protected])([email protected]))
'@vitest/pretty-format': 2.1.9
'@vitest/runner': 2.1.9
'@vitest/snapshot': 2.1.9
@@ -9350,8 +9711,8 @@ snapshots:
tinyexec: 0.3.2
tinypool: 1.1.1
tinyrainbow: 1.2.0
vite: 5.4.21(@types/[email protected])
vite-node: 2.1.9(@types/[email protected])
vite: 5.4.21(@types/[email protected])([email protected])
vite-node: 2.1.9(@types/[email protected])([email protected])
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 22.19.15