diff --git a/.gitignore b/.gitignore index 35e7397b01..02f86fcbd0 100644 --- a/.gitignore +++ b/.gitignore @@ -16,5 +16,4 @@ internal .turbo .windsurfrules -CLAUDE.md -.cursor/ \ No newline at end of file +CLAUDE.md \ No newline at end of file diff --git a/apps/desktop/src/components/editor-area/index.tsx b/apps/desktop/src/components/editor-area/index.tsx index 3a73f8faec..e6a789bd38 100644 --- a/apps/desktop/src/components/editor-area/index.tsx +++ b/apps/desktop/src/components/editor-area/index.tsx @@ -12,7 +12,6 @@ import { TemplateService } from "@/utils/template-service"; import { commands as analyticsCommands } from "@hypr/plugin-analytics"; import { commands as connectorCommands } from "@hypr/plugin-connector"; import { commands as dbCommands } from "@hypr/plugin-db"; -import { events as localLlmEvents } from "@hypr/plugin-local-llm"; import { commands as miscCommands } from "@hypr/plugin-misc"; import { commands as templateCommands, type Grammar } from "@hypr/plugin-template"; import Editor, { type TiptapEditor } from "@hypr/tiptap/editor"; @@ -362,21 +361,6 @@ export function useEnhanceMutation({ const [isCancelled, setIsCancelled] = useState(false); const queryClient = useQueryClient(); - useEffect(() => { - let unlisten: () => void; - localLlmEvents.llmEvent.listen(({ payload }) => { - if (payload.progress) { - setProgress(payload.progress); - } - }).then((fn) => { - unlisten = fn; - }); - - return () => { - unlisten(); - }; - }, []); - // Extract H1 headers at component level (always available) const extractH1Headers = useCallback((htmlContent: string): string[] => { if (!htmlContent) { diff --git a/apps/desktop/src/components/right-panel/components/chat/chat-input.tsx b/apps/desktop/src/components/right-panel/components/chat/chat-input.tsx index 47408024ae..cb1a374fd0 100644 --- a/apps/desktop/src/components/right-panel/components/chat/chat-input.tsx +++ b/apps/desktop/src/components/right-panel/components/chat/chat-input.tsx @@ -153,7 +153,7 @@ export function ChatInput( const traverseNode = (node: any) => { if (node.type === "mention" || node.type === "mention-@") { - if (node.attrs && node.attrs.type !== "selection") { + if (node.attrs) { mentions.push({ id: node.attrs.id || node.attrs["data-id"], type: node.attrs.type || node.attrs["data-type"] || "note", diff --git a/apps/desktop/src/components/right-panel/components/chat/chat-message.tsx b/apps/desktop/src/components/right-panel/components/chat/chat-message.tsx new file mode 100644 index 0000000000..bf9782068c --- /dev/null +++ b/apps/desktop/src/components/right-panel/components/chat/chat-message.tsx @@ -0,0 +1,48 @@ +import { MessageContent } from "./message-content"; +import { Message } from "./types"; + +interface ChatMessageProps { + message: Message; + sessionTitle?: string; + hasEnhancedNote?: boolean; + onApplyMarkdown?: (markdownContent: string) => void; +} + +export function ChatMessage({ message, sessionTitle, hasEnhancedNote, onApplyMarkdown }: ChatMessageProps) { + if (message.isUser) { + return ( +
+
+
+
+ +
+
+ {/* Timestamp below the message */} +
+ {message.timestamp.toLocaleTimeString([], { + hour: "2-digit", + minute: "2-digit", + })} +
+
+
+ ); + } + + return ( +
+ +
+ ); +} diff --git a/apps/desktop/src/components/right-panel/components/chat/chat-messages-view.tsx b/apps/desktop/src/components/right-panel/components/chat/chat-messages-view.tsx index f627dbcd93..db0c742984 100644 --- a/apps/desktop/src/components/right-panel/components/chat/chat-messages-view.tsx +++ b/apps/desktop/src/components/right-panel/components/chat/chat-messages-view.tsx @@ -1,16 +1,14 @@ -import type { UIMessage } from "@hypr/utils/ai"; import { useEffect, useRef, useState } from "react"; -import { UIMessageComponent } from "./ui-message"; +import { ChatMessage } from "./chat-message"; +import { Message } from "./types"; interface ChatMessagesViewProps { - messages: UIMessage[]; + messages: Message[]; sessionTitle?: string; hasEnhancedNote?: boolean; onApplyMarkdown?: (markdownContent: string) => void; - isSubmitted?: boolean; - isStreaming?: boolean; - isReady?: boolean; - isError?: boolean; + isGenerating?: boolean; + isStreamingText?: boolean; } function ThinkingIndicator() { @@ -32,7 +30,7 @@ function ThinkingIndicator() { } `} -
+
Thinking . . @@ -43,45 +41,27 @@ function ThinkingIndicator() { } export function ChatMessagesView( - { messages, sessionTitle, hasEnhancedNote, onApplyMarkdown, isSubmitted, isStreaming, isReady, isError }: - ChatMessagesViewProps, + { messages, sessionTitle, hasEnhancedNote, onApplyMarkdown, isGenerating, isStreamingText }: ChatMessagesViewProps, ) { const messagesEndRef = useRef(null); const [showThinking, setShowThinking] = useState(false); const thinkingTimeoutRef = useRef(null); const shouldShowThinking = () => { - // Show thinking when request is submitted but not yet streaming - if (isSubmitted) { + if (!isGenerating) { + return false; + } + + if (messages.length === 0) { return true; } - // Check if we're in transition between parts (text → tool or tool → text) - if (isStreaming && messages.length > 0) { - const lastMessage = messages[messages.length - 1]; - if (lastMessage.role === "assistant" && lastMessage.parts) { - const lastPart = lastMessage.parts[lastMessage.parts.length - 1]; - - // Text part finished but still streaming (tool coming) - if (lastPart?.type === "text" && !(lastPart as any).state) { - return true; - } - - // Tool finished but still streaming (more text/tools coming) - if (lastPart?.type?.startsWith("tool-") || lastPart?.type === "dynamic-tool") { - const toolPart = lastPart as any; - if ( - toolPart.state === "output-available" - || toolPart.state === "output-error" - ) { - return true; - } - } - } + const lastMessage = messages[messages.length - 1]; + if (lastMessage.isUser) { + return true; } - // Fallback for other transition states - if (!isReady && !isStreaming && !isError) { + if (!lastMessage.isUser && !isStreamingText) { return true; } @@ -109,16 +89,16 @@ export function ChatMessagesView( clearTimeout(thinkingTimeoutRef.current); } }; - }, [isSubmitted, isStreaming, isReady, isError, messages]); + }, [isGenerating, isStreamingText, messages]); useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); }, [messages, showThinking]); return ( -
+
{messages.map((message) => ( - {/* Flat card with no shadow */} -
+
{/* Grey header section - Made thinner with py-1 */}
diff --git a/apps/desktop/src/components/right-panel/components/chat/message-content.tsx b/apps/desktop/src/components/right-panel/components/chat/message-content.tsx new file mode 100644 index 0000000000..2b11a66fed --- /dev/null +++ b/apps/desktop/src/components/right-panel/components/chat/message-content.tsx @@ -0,0 +1,357 @@ +import { commands as miscCommands } from "@hypr/plugin-misc"; +import Renderer from "@hypr/tiptap/renderer"; +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@hypr/ui/components/ui/accordion"; +import { PencilRuler } from "lucide-react"; +import { useEffect, useState } from "react"; +import { MarkdownCard } from "./markdown-card"; +import { Message } from "./types"; + +interface MessageContentProps { + message: Message; + sessionTitle?: string; + hasEnhancedNote?: boolean; + onApplyMarkdown?: (markdownContent: string) => void; +} + +function ToolDetailsRenderer({ details }: { details: any }) { + if (!details) { + return ( +
+ No details available... +
+ ); + } + + return ( +
+
+        {typeof details === 'object' ? JSON.stringify(details, null, 2) : String(details)}
+      
+
+ ); +} + +function MarkdownText({ content, htmlContent }: { content: string; htmlContent?: string }) { + const [displayHtml, setDisplayHtml] = useState(""); + + useEffect(() => { + const processContent = async () => { + // If we have HTML content with mentions, use it directly + if (htmlContent) { + setDisplayHtml(htmlContent); + return; + } + + // Otherwise, convert markdown as usual + try { + let html = await miscCommands.opinionatedMdToHtml(content); + + html = html + .replace(/

\s*<\/p>/g, "") + .replace(/

\u00A0<\/p>/g, "") + .replace(/

 <\/p>/g, "") + .replace(/

\s+<\/p>/g, "") + .replace(/

<\/p>/g, "") + .trim(); + + setDisplayHtml(html); + } catch (error) { + console.error("Failed to convert markdown:", error); + setDisplayHtml(content); + } + }; + + if (content.trim() || htmlContent) { + processContent(); + } + }, [content, htmlContent]); + + return ( + <> + +

+ +
+ + ); +} + +export function MessageContent({ message, sessionTitle, hasEnhancedNote, onApplyMarkdown }: MessageContentProps) { + let htmlContent: string | undefined; + if (message.isUser && message.toolDetails) { + try { + const details = typeof message.toolDetails === "string" + ? JSON.parse(message.toolDetails) + : message.toolDetails; + htmlContent = details.htmlContent; + } catch (error) { + console.error("Failed to parse HTML content from toolDetails:", error); + } + } + if (message.type === "tool-start") { + const hasToolDetails = message.toolDetails; + + if (hasToolDetails) { + return ( +
+ + + +
+ + + Called tool: {message.content} + +
+
+ + + +
+
+
+ ); + } else { + return ( +
+
+ + + Called tool: {message.content} + +
+
+ ); + } + } + + if (message.type === "tool-result") { + return ( +
+
+ + + {message.content} + +
+
+ ); + } + + if (message.type === "tool-error") { + return ( +
+
+ + + Tool Error: {message.content} + +
+
+ ); + } + + if (!message.parts || message.parts.length === 0) { + return ; + } + + return ( +
+ {message.parts.map((part, index) => ( +
+ {part.type === "text" + ? + : ( + + )} +
+ ))} +
+ ); +} diff --git a/apps/desktop/src/components/right-panel/components/chat/ui-message.tsx b/apps/desktop/src/components/right-panel/components/chat/ui-message.tsx deleted file mode 100644 index 7c43ecbfe4..0000000000 --- a/apps/desktop/src/components/right-panel/components/chat/ui-message.tsx +++ /dev/null @@ -1,473 +0,0 @@ -import { commands as miscCommands } from "@hypr/plugin-misc"; -import Renderer from "@hypr/tiptap/renderer"; -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@hypr/ui/components/ui/accordion"; -import type { UIMessage } from "@hypr/utils/ai"; -import { AlertCircle, Check, Loader2 } from "lucide-react"; -import { type FC, useEffect, useState } from "react"; -import { parseMarkdownBlocks } from "../../utils/markdown-parser"; -import { MarkdownCard } from "./markdown-card"; - -interface UIMessageComponentProps { - message: UIMessage; - sessionTitle?: string; - hasEnhancedNote?: boolean; - onApplyMarkdown?: (content: string) => void; -} - -// Component for rendering markdown/HTML content -const TextContent: FC<{ content: string; isHtml?: boolean }> = ({ content, isHtml }) => { - const [displayHtml, setDisplayHtml] = useState(""); - - useEffect(() => { - const processContent = async () => { - if (isHtml) { - setDisplayHtml(content); - return; - } - - // Convert markdown to HTML - try { - let html = await miscCommands.opinionatedMdToHtml(content); - - // Clean up empty paragraphs like reference code - html = html - .replace(/

\s*<\/p>/g, "") - .replace(/

\u00A0<\/p>/g, "") - .replace(/

 <\/p>/g, "") - .replace(/

\s+<\/p>/g, "") - .replace(/

<\/p>/g, "") - .trim(); - - setDisplayHtml(html); - } catch (error) { - console.error("Failed to convert markdown:", error); - setDisplayHtml(content); - } - }; - - if (content.trim()) { - processContent(); - } - }, [content, isHtml]); - - return ( - <> - -

- -
- - ); -}; - -export const UIMessageComponent: FC = ({ - message, - sessionTitle, - hasEnhancedNote, - onApplyMarkdown, -}) => { - const isUser = message.role === "user"; - - // Extract text content from parts - const getTextContent = () => { - if (!message.parts || message.parts.length === 0) { - return ""; - } - - const textParts = message.parts - .filter(part => part.type === "text") - .map(part => part.text || "") - .join(""); - - return textParts; - }; - - // User message styling - if (isUser) { - // Check for HTML content in metadata (for mentions/selections) - const htmlContent = (message.metadata as any)?.htmlContent; - const textContent = getTextContent(); - - return ( -
-
-
-
- -
-
- {(message as any).createdAt && ( -
- {new Date((message as any).createdAt).toLocaleTimeString([], { - hour: "2-digit", - minute: "2-digit", - })} -
- )} -
-
- ); - } - - // Assistant message - render parts - return ( -
- {message.parts?.map((part, index) => { - // Text content - parse for markdown blocks - if (part.type === "text" && part.text) { - const parsedParts = parseMarkdownBlocks(part.text); - - return ( -
- {parsedParts.map((parsedPart, pIndex) => { - if (parsedPart.type === "markdown") { - return ( - - ); - } - // Regular text - return ( -
- -
- ); - })} -
- ); - } - - // Handle tool parts - check for dynamic tools or specific tool types - if (part.type === "dynamic-tool" || part.type?.startsWith("tool-")) { - const toolPart = part as any; - - // Extract tool name - either from toolName field (dynamic) or from type (specific) - const toolName = toolPart.toolName || part.type.replace("tool-", ""); - - // Tool execution start (input streaming or available) - if ( - (toolPart.state === "input-streaming" || toolPart.state === "input-available") - ) { - return ( -
- - - -
- - - {toolPart.state === "input-streaming" ? "Calling" : "Called"} tool: {toolName} - -
-
- - {toolPart.input && ( -
-
- Input: -
-
-                            {JSON.stringify(toolPart.input, null, 2)}
-                          
-
- )} -
-
-
-
- ); - } - - // Tool completion (output available) - if (toolPart.state === "output-available") { - return ( -
- - - -
- - - Tool finished: {toolName} - -
-
- - {/* Show input */} - {toolPart.input && ( -
-
- Input: -
-
-                            {JSON.stringify(toolPart.input, null, 2)}
-                          
-
- )} - - {/* Show output */} - {toolPart.output && ( -
-
- Output: -
-
-                            {JSON.stringify(toolPart.output, null, 2)}
-                          
-
- )} -
-
-
-
- ); - } - - // Tool error - if (toolPart.state === "output-error") { - return ( -
-
- - - Tool error: {toolName} - -
- {toolPart.errorText && ( -
- {toolPart.errorText} -
- )} -
- ); - } - } - - return null; - })} -
- ); -}; diff --git a/apps/desktop/src/components/right-panel/hooks/useChat2.ts b/apps/desktop/src/components/right-panel/hooks/useChat2.ts deleted file mode 100644 index 875cae26ca..0000000000 --- a/apps/desktop/src/components/right-panel/hooks/useChat2.ts +++ /dev/null @@ -1,203 +0,0 @@ -import { useLicense } from "@/hooks/use-license"; -import { commands as dbCommands } from "@hypr/plugin-db"; -import { useChat } from "@hypr/utils/ai"; -import { useCallback, useEffect, useRef } from "react"; -import { CustomChatTransport } from "../utils/chat-transport"; - -interface UseChat2Props { - sessionId: string | null; - userId: string | null; - conversationId: string | null; - sessionData?: any; - selectionData?: any; - sessions?: any; - onError?: (error: Error) => void; -} - -export function useChat2({ - sessionId, - userId, - conversationId, - sessionData, - selectionData, - sessions, - onError, -}: UseChat2Props) { - const { getLicense } = useLicense(); - const transportRef = useRef(null); - const conversationIdRef = useRef(conversationId); - - useEffect(() => { - conversationIdRef.current = conversationId; - }, [conversationId]); - - if (!transportRef.current) { - transportRef.current = new CustomChatTransport({ - sessionId, - userId, - sessionData, - selectionData, - sessions, - getLicense: getLicense as any, - }); - } - - useEffect(() => { - if (transportRef.current) { - transportRef.current.updateOptions({ - sessionId, - userId, - sessionData, - selectionData, - sessions, - getLicense: getLicense as any, - }); - } - }, [sessionId, userId, sessionData, selectionData, sessions, getLicense]); - - useEffect(() => { - return () => { - if (transportRef.current) { - transportRef.current.cleanup(); - } - }; - }, []); - - const { - messages, - sendMessage: sendAIMessage, - stop, - status, - error, - addToolResult, - setMessages, - } = useChat({ - transport: transportRef.current, - messages: [], - id: sessionId || "default", - onError: async (err: any) => { - const errorMessage = { - id: crypto.randomUUID(), - role: "assistant" as const, - parts: [{ - type: "text" as const, - text: `An error occurred: ${err.message}`, - }] as any, - metadata: { - isError: true, - errorDetails: err, - }, - } as const; - setMessages((prev: any) => [...prev, errorMessage]); - stop(); - onError?.(err); - }, - onFinish: async ({ message }: { message: any }) => { - const currentConvId = conversationIdRef.current; - if (currentConvId && message && message.role === "assistant") { - try { - await dbCommands.createMessageV2({ - id: message.id, - conversation_id: currentConvId, - role: "assistant" as any, - parts: JSON.stringify(message.parts || []), - metadata: JSON.stringify(message.metadata || {}), - created_at: new Date().toISOString(), - updated_at: new Date().toISOString(), - }); - } catch (error) { - console.error("Failed to save assistant message:", error); - } - } else { - console.warn("Skipping save - missing data:", { conversationId: currentConvId, messageRole: message?.role }); - } - }, - }); - - const sendMessage = useCallback( - async ( - content: string, - options?: { - mentionedContent?: Array<{ id: string; type: string; label: string }>; - selectionData?: any; - htmlContent?: string; - conversationId?: string; - }, - ) => { - const metadata = { - mentions: options?.mentionedContent, - selectionData: options?.selectionData, - htmlContent: options?.htmlContent, - }; - - const convId = options?.conversationId || conversationId; - - if (!convId || !content.trim()) { - return; - } - - if (transportRef.current) { - transportRef.current.updateOptions({ - mentionedContent: options?.mentionedContent, - selectionData: options?.selectionData, - sessions: sessions || {}, - }); - } - - // Small delay to ensure options are updated before tools are loaded - await new Promise(resolve => setTimeout(resolve, 10)); - - try { - const userMessageId = crypto.randomUUID(); - await dbCommands.createMessageV2({ - id: userMessageId, - conversation_id: convId, - role: "user" as any, - parts: JSON.stringify([{ type: "text", text: content }]), - metadata: JSON.stringify(metadata), - created_at: new Date().toISOString(), - updated_at: new Date().toISOString(), - }); - - sendAIMessage({ - id: userMessageId, - role: "user", - parts: [{ type: "text", text: content }], - metadata, - }); - } catch (error) { - console.error("Failed to send message:", error); - onError?.(error as Error); - } - }, - [sendAIMessage, conversationId], - ); - - const updateMessageParts = useCallback( - async (messageId: string, parts: any[]) => { - if (conversationId) { - try { - await dbCommands.updateMessageV2Parts( - messageId, - JSON.stringify(parts), - ); - } catch (error) { - console.error("Failed to update message parts:", error); - } - } - }, - [conversationId], - ); - - return { - messages, - stop, - setMessages, - isGenerating: status === "streaming" || status === "submitted", - error, - addToolResult, - sendMessage, - updateMessageParts, - status, - }; -} diff --git a/apps/desktop/src/components/right-panel/hooks/useChatLogic.ts b/apps/desktop/src/components/right-panel/hooks/useChatLogic.ts new file mode 100644 index 0000000000..8759f6c4d0 --- /dev/null +++ b/apps/desktop/src/components/right-panel/hooks/useChatLogic.ts @@ -0,0 +1,622 @@ +import { showProGateModal } from "@/components/pro-gate-modal/service"; +import { Client } from "@modelcontextprotocol/sdk/client/index.js"; +import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; +import { useCallback, useEffect, useRef, useState } from "react"; + +import type { SelectionData } from "@/contexts/right-panel"; + +import { useLicense } from "@/hooks/use-license"; +import { commands as analyticsCommands } from "@hypr/plugin-analytics"; +import { commands as connectorCommands } from "@hypr/plugin-connector"; +import { commands as dbCommands } from "@hypr/plugin-db"; +import { commands as mcpCommands } from "@hypr/plugin-mcp"; +import { commands as miscCommands } from "@hypr/plugin-misc"; +import { fetch as tauriFetch } from "@hypr/utils"; +import { + dynamicTool, + experimental_createMCPClient, + modelProvider, + smoothStream, + stepCountIs, + streamText, + tool, +} from "@hypr/utils/ai"; +import { useSessions } from "@hypr/utils/contexts"; +import { useQueryClient } from "@tanstack/react-query"; +import { getLicenseKey } from "tauri-plugin-keygen-api"; +import { z } from "zod"; +import type { ActiveEntityInfo, Message } from "../types/chat-types"; +import { prepareMessageHistory } from "../utils/chat-utils"; +import { parseMarkdownBlocks } from "../utils/markdown-parser"; +import { buildVercelToolsFromMcp } from "../utils/mcp-http-wrapper"; +import { createEditEnhancedNoteTool } from "../utils/tools/edit_enhanced_note"; +import { createSearchSessionDateRangeTool } from "../utils/tools/search_session_date_range"; +import { createSearchSessionTool } from "../utils/tools/search_session_multi_keywords"; + +interface UseChatLogicProps { + sessionId: string | null; + userId: string | null; + activeEntity: ActiveEntityInfo | null; + messages: Message[]; + inputValue: string; + hasChatStarted: boolean; + setMessages: (messages: Message[] | ((prev: Message[]) => Message[])) => void; + setInputValue: (value: string) => void; + setHasChatStarted: (started: boolean) => void; + getChatGroupId: () => Promise; + sessionData: any; + chatInputRef: React.RefObject; + llmConnectionQuery: any; +} + +export function useChatLogic({ + sessionId, + userId, + activeEntity, + messages, + inputValue, + hasChatStarted, + setMessages, + setInputValue, + setHasChatStarted, + getChatGroupId, + sessionData, + chatInputRef, + llmConnectionQuery, +}: UseChatLogicProps) { + const [isGenerating, setIsGenerating] = useState(false); + const [isStreamingText, setIsStreamingText] = useState(false); + const isGeneratingRef = useRef(false); + const abortControllerRef = useRef(null); + const sessions = useSessions((state) => state.sessions); + const { getLicense } = useLicense(); + const queryClient = useQueryClient(); + + // Reset generation state and abort ongoing streams when session changes + useEffect(() => { + // Abort any ongoing generation when session changes + if (abortControllerRef.current) { + abortControllerRef.current.abort(); + abortControllerRef.current = null; + } + + // Reset generation state for new session + setIsGenerating(false); + setIsStreamingText(false); + isGeneratingRef.current = false; + }, [sessionId]); + + const handleApplyMarkdown = async (markdownContent: string) => { + if (!sessionId) { + console.error("No session ID available"); + return; + } + + const sessionStore = sessions[sessionId]; + if (!sessionStore) { + console.error("Session not found in store"); + return; + } + + try { + const html = await miscCommands.opinionatedMdToHtml(markdownContent); + + const { session, showRaw } = sessionStore.getState(); + + const hasEnhancedNote = !!session.enhanced_memo_html; + + if (!hasEnhancedNote) { + sessionStore.getState().updateRawNote(html); + } else { + if (showRaw) { + sessionStore.getState().updateRawNote(html); + } else { + sessionStore.getState().updateEnhancedNote(html); + } + } + } catch (error) { + console.error("Failed to apply markdown content:", error); + } + }; + + const processUserMessage = async ( + content: string, + analyticsEvent: string, + mentionedContent?: Array<{ id: string; type: string; label: string }>, + selectionData?: SelectionData, + htmlContent?: string, + ) => { + if (!content.trim() || isGenerating) { + return; + } + + const userMessageCount = messages.filter(msg => msg.isUser).length; + + if (userMessageCount >= 4 && !getLicense.data?.valid) { + if (userId) { + await analyticsCommands.event({ + event: "pro_license_required_chat", + distinct_id: userId, + }); + } + await showProGateModal("chat"); + return; + } + + if (userId) { + await analyticsCommands.event({ + event: analyticsEvent, + distinct_id: userId, + }); + } + + if (!hasChatStarted && activeEntity) { + setHasChatStarted(true); + } + + setIsGenerating(true); + isGeneratingRef.current = true; + + const groupId = await getChatGroupId(); + + // Prepare toolDetails before creating the message + let toolDetails = null; + if (htmlContent && (mentionedContent?.length || selectionData)) { + toolDetails = { htmlContent }; + } + + const userMessage: Message = { + id: crypto.randomUUID(), + content: content, + isUser: true, + timestamp: new Date(), + type: "text-delta", + toolDetails: toolDetails, // Include toolDetails in the message object + }; + + setMessages((prev) => [...prev, userMessage]); + setInputValue(""); + + await dbCommands.upsertChatMessage({ + id: userMessage.id, + group_id: groupId, + created_at: userMessage.timestamp.toISOString(), + role: "User", + content: userMessage.content.trim(), + type: "text-delta", + tool_details: toolDetails ? JSON.stringify(toolDetails) : null, + }); + + const aiMessageId = crypto.randomUUID(); + + try { + const provider = await modelProvider(); + const model = provider.languageModel("defaultModel"); + + await queryClient.invalidateQueries({ queryKey: ["llm-connection"] }); + await new Promise(resolve => setTimeout(resolve, 100)); + + const llmConnection = await connectorCommands.getLlmConnection(); + const { type } = llmConnection; + const apiBase = llmConnection.connection?.api_base; + + let newMcpTools: Record = {}; + let hyprMcpTools: Record = {}; + let mcpToolsArray: any[] = []; + const allMcpClients: any[] = []; + let hyprMcpClient: Client | null = null; + + const shouldUseTools = model.modelId === "gpt-4.1" || model.modelId === "openai/gpt-4.1" + || model.modelId === "anthropic/claude-sonnet-4" + || model.modelId === "openai/gpt-4o" + || model.modelId === "gpt-4o" + || apiBase?.includes("pro.hyprnote.com") + || model.modelId === "openai/gpt-5"; + + if (shouldUseTools) { + const mcpServers = await mcpCommands.getServers(); + const enabledSevers = mcpServers.filter((server) => server.enabled); + + if (apiBase?.includes("pro.hyprnote.com") && getLicense.data?.valid) { + try { + const licenseKey = await getLicenseKey(); + + const transport = new StreamableHTTPClientTransport( + new URL("https://pro.hyprnote.com/mcp"), + { + fetch: tauriFetch, + requestInit: { + headers: { + "x-hyprnote-license-key": licenseKey || "", + }, + }, + }, + ); + hyprMcpClient = new Client({ + name: "hyprmcp", + version: "0.1.0", + }); + + await hyprMcpClient.connect(transport); + + hyprMcpTools = await buildVercelToolsFromMcp(hyprMcpClient); + } catch (error) { + console.error("Error creating and adding hyprmcp client:", error); + } + } + + for (const server of enabledSevers) { + try { + const mcpClient = await experimental_createMCPClient({ + transport: { + type: "sse", + url: server.url, + ...(server.headerKey && server.headerValue && { + headers: { + [server.headerKey]: server.headerValue, + }, + }), + onerror: (error) => { + console.log("mcp client error: ", error); + }, + onclose: () => { + console.log("mcp client closed"); + }, + }, + }); + allMcpClients.push(mcpClient); + + const tools = await mcpClient.tools(); + for (const [toolName, tool] of Object.entries(tools as Record)) { + newMcpTools[toolName] = dynamicTool({ + description: tool.description, + inputSchema: tool.inputSchema || z.any(), + execute: tool.execute, + }); + } + } catch (error) { + console.error("Error creating MCP client:", error); + } + } + + mcpToolsArray = Object.keys(newMcpTools).length > 0 + ? Object.entries(newMcpTools).map(([name, tool]) => ({ + name, + description: tool.description || `Tool: ${name}`, + inputSchema: tool.inputSchema || "No input schema provided", + })) + : []; + + for (const [toolKey, tool] of Object.entries(hyprMcpTools)) { + mcpToolsArray.push({ + name: toolKey, + description: tool.description || `Tool: ${tool.name}`, + inputSchema: tool.inputSchema || "No input schema provided", + }); + } + } + + // Create tools using the refactored tool factories + const searchTool = createSearchSessionTool(userId); + const editEnhancedNoteTool = createEditEnhancedNoteTool({ + sessionId, + sessions, + selectionData, + }); + const searchSessionDateRangeTool = createSearchSessionDateRangeTool(userId); + const abortController = new AbortController(); + abortControllerRef.current = abortController; + + const baseTools = { + ...(selectionData && { edit_enhanced_note: editEnhancedNoteTool }), + search_sessions_date_range: searchSessionDateRangeTool, + search_sessions_multi_keywords: searchTool, + }; + + const { fullStream } = streamText({ + model, + messages: await prepareMessageHistory( + messages, + content, + mentionedContent, + model.modelId, + mcpToolsArray, + sessionData, + sessionId, + userId, + apiBase, + selectionData, // Pass selectionData to prepareMessageHistory + ), + stopWhen: stepCountIs(5), + tools: { + ...(shouldUseTools && { ...hyprMcpTools, ...newMcpTools }), + ...(shouldUseTools && baseTools), + ...(type === "HyprLocal" && { progress_update: tool({ inputSchema: z.any() }) }), + }, + onError: (error) => { + console.error("On Error Catch:", error); + setIsGenerating(false); + isGeneratingRef.current = false; + throw error; + }, + onFinish: () => { + for (const client of allMcpClients) { + client.close(); + } + // close hyprmcp client + hyprMcpClient?.close(); + }, + abortSignal: abortController.signal, + experimental_transform: smoothStream({ + delayInMs: 30, + chunking: "word", + }), + }); + + let aiResponse = ""; + let didInitializeAiResponse = false; + let currentAiTextMessageId: string | null = null; + let lastChunkType: string | null = null; + + for await (const chunk of fullStream) { + if (lastChunkType === "text-delta" && chunk.type !== "text-delta" && chunk.type !== "finish-step") { + setIsStreamingText(false); // Text streaming has stopped, more content coming + + await new Promise(resolve => setTimeout(resolve, 50)); + } + + if (chunk.type === "text-delta") { + setIsStreamingText(true); + + setMessages((prev) => { + const lastMessage = prev[prev.length - 1]; + + if (didInitializeAiResponse && lastMessage && lastMessage.type === "text-delta") { + // Same type (text) -> update existing message + + aiResponse += chunk.text; + currentAiTextMessageId = lastMessage.id; + const parts = parseMarkdownBlocks(aiResponse); + + return prev.map(msg => + msg.id === lastMessage.id + ? { ...msg, content: aiResponse, parts, type: "text-delta" } + : msg + ); + } else { + if (!didInitializeAiResponse) { + aiResponse = ""; + didInitializeAiResponse = true; + } + + aiResponse += chunk.text; + const parts = parseMarkdownBlocks(aiResponse); + + // Different type -> create new message + const newTextMessage: Message = { + id: crypto.randomUUID(), + content: aiResponse, + isUser: false, + timestamp: new Date(), + type: "text-delta", + parts, + }; + + currentAiTextMessageId = newTextMessage.id; + return [...prev, newTextMessage]; + } + }); + } + + if (chunk.type === "tool-call" && !(chunk.toolName === "progress_update" && type === "HyprLocal")) { + // Save accumulated AI text before processing tool + + if (currentAiTextMessageId && aiResponse.trim()) { + const saveAiText = async () => { + try { + await dbCommands.upsertChatMessage({ + id: currentAiTextMessageId!, + group_id: groupId, + created_at: new Date().toISOString(), + role: "Assistant", + type: "text-delta", + content: aiResponse.trim(), + tool_details: null, + }); + } catch (error) { + console.error("Failed to save AI text:", error); + } + }; + saveAiText(); + currentAiTextMessageId = null; // Reset + } + + didInitializeAiResponse = false; + + const toolStartMessage: Message = { + id: crypto.randomUUID(), + content: `${chunk.toolName}`, + isUser: false, + timestamp: new Date(), + type: "tool-start", + toolDetails: chunk.input, + }; + setMessages((prev) => [...prev, toolStartMessage]); + + // save message to db right away + await dbCommands.upsertChatMessage({ + id: toolStartMessage.id, + group_id: groupId, + created_at: toolStartMessage.timestamp.toISOString(), + role: "Assistant", + content: toolStartMessage.content, + type: "tool-start", + tool_details: JSON.stringify(chunk.input), + }); + + // log if user is using tools in chat + analyticsCommands.event({ + event: "chat_tool_call", + distinct_id: userId || "", + }); + } + + if (chunk.type === "tool-result" && !(chunk.toolName === "progress_update" && type === "HyprLocal")) { + didInitializeAiResponse = false; + + const toolResultMessage: Message = { + id: crypto.randomUUID(), + content: `Tool finished: ${chunk.toolName}`, + isUser: false, + timestamp: new Date(), + type: "tool-result", + }; + + setMessages((prev) => [...prev, toolResultMessage]); + + await dbCommands.upsertChatMessage({ + id: toolResultMessage.id, + group_id: groupId, + created_at: toolResultMessage.timestamp.toISOString(), + role: "Assistant", + content: toolResultMessage.content, + type: "tool-result", + tool_details: null, + }); + } + + if (chunk.type === "tool-error" && !(chunk.toolName === "progress_update" && type === "HyprLocal")) { + didInitializeAiResponse = false; + const toolErrorMessage: Message = { + id: crypto.randomUUID(), + content: `Tool error: ${chunk.error}`, + isUser: false, + timestamp: new Date(), + type: "tool-error", + }; + setMessages((prev) => [...prev, toolErrorMessage]); + + await dbCommands.upsertChatMessage({ + id: toolErrorMessage.id, + group_id: groupId, + created_at: toolErrorMessage.timestamp.toISOString(), + role: "Assistant", + content: toolErrorMessage.content, + type: "tool-error", + tool_details: null, + }); + } + + lastChunkType = chunk.type; + } + + if (currentAiTextMessageId && aiResponse.trim()) { + await dbCommands.upsertChatMessage({ + id: currentAiTextMessageId, + group_id: groupId, + created_at: new Date().toISOString(), + role: "Assistant", + type: "text-delta", + content: aiResponse.trim(), + tool_details: null, + }); + } + + setIsGenerating(false); + setIsStreamingText(false); + isGeneratingRef.current = false; + abortControllerRef.current = null; // Clear the abort controller on successful completion + } catch (error) { + console.error(error); + + let errorMsg = "Unknown error"; + if (typeof error === "string") { + errorMsg = error; + } else if (error instanceof Error) { + errorMsg = error.message || error.name || "Unknown error"; + } else if ((error as any)?.error) { + errorMsg = (error as any).error; + } else if ((error as any)?.message) { + errorMsg = (error as any).message; + } + + let finalErrorMessage = ""; + + if (String(errorMsg).includes("too large")) { + finalErrorMessage = + "Sorry, I encountered an error. Please try again. Your transcript or meeting notes might be too large. Please try again with a smaller transcript or meeting notes." + + "\n\n" + errorMsg; + } else if (String(errorMsg).includes("Request cancelled") || String(errorMsg).includes("Request canceled")) { + finalErrorMessage = "Request was cancelled mid-stream. Try again with a different message."; + } else { + finalErrorMessage = "Sorry, I encountered an error. Please try again. " + "\n\n" + errorMsg; + } + + setIsGenerating(false); + setIsStreamingText(false); + isGeneratingRef.current = false; + abortControllerRef.current = null; // Clear the abort controller on error + + // Create error message + const errorMessage: Message = { + id: aiMessageId, + content: finalErrorMessage, + isUser: false, + timestamp: new Date(), + type: "text-delta", + }; + + setMessages((prev) => [...prev, errorMessage]); + + await dbCommands.upsertChatMessage({ + id: aiMessageId, + group_id: groupId, + created_at: new Date().toISOString(), + role: "Assistant", + content: finalErrorMessage, + type: "text-delta", + tool_details: null, + }); + } + }; + + const handleSubmit = async ( + mentionedContent?: Array<{ id: string; type: string; label: string }>, + selectionData?: SelectionData, + htmlContent?: string, + ) => { + await processUserMessage(inputValue, "chat_message_sent", mentionedContent, selectionData, htmlContent); + }; + + const handleQuickAction = async (prompt: string) => { + await processUserMessage(prompt, "chat_quickaction_sent", undefined, undefined); + + if (chatInputRef.current) { + chatInputRef.current.focus(); + } + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === "Enter" && !e.shiftKey) { + e.preventDefault(); + handleSubmit(); + } + }; + + const handleStop = useCallback(() => { + if (abortControllerRef.current) { + abortControllerRef.current.abort(); + abortControllerRef.current = null; + } + }, []); + + return { + isGenerating, + isStreamingText, + handleSubmit, + handleQuickAction, + handleApplyMarkdown, + handleKeyDown, + handleStop, + }; +} diff --git a/apps/desktop/src/components/right-panel/hooks/useChatQueries.ts b/apps/desktop/src/components/right-panel/hooks/useChatQueries.ts new file mode 100644 index 0000000000..a1de3c15f7 --- /dev/null +++ b/apps/desktop/src/components/right-panel/hooks/useChatQueries.ts @@ -0,0 +1,175 @@ +import { useQuery } from "@tanstack/react-query"; +import { useEffect } from "react"; + +import { commands as dbCommands } from "@hypr/plugin-db"; +import type { Message } from "../types/chat-types"; +import { parseMarkdownBlocks } from "../utils/markdown-parser"; + +interface UseChatQueriesProps { + sessionId: string | null; + userId: string | null; + currentChatGroupId: string | null; + setCurrentChatGroupId: (id: string | null) => void; + setMessages: (messages: Message[]) => void; + setHasChatStarted: (started: boolean) => void; + isGenerating?: boolean; + prevIsGenerating?: React.MutableRefObject; +} + +export function useChatQueries({ + sessionId, + userId, + currentChatGroupId, + setCurrentChatGroupId, + setMessages, + setHasChatStarted, + isGenerating, + prevIsGenerating, +}: UseChatQueriesProps) { + const chatGroupsQuery = useQuery({ + enabled: !!sessionId && !!userId, + queryKey: ["chat-groups", sessionId], + queryFn: async () => { + if (!sessionId || !userId) { + return []; + } + const groups = await dbCommands.listChatGroups(sessionId); + + const groupsWithFirstMessage = await Promise.all( + groups.map(async (group) => { + const messages = await dbCommands.listChatMessages(group.id); + const firstUserMessage = messages.find(msg => msg.role === "User"); + + // Find the most recent message timestamp in this group + const mostRecentMessageTimestamp = messages.length > 0 + ? Math.max(...messages.map(msg => new Date(msg.created_at).getTime())) + : new Date(group.created_at).getTime(); // Fallback to group creation time if no messages + + return { + ...group, + firstMessage: firstUserMessage?.content || "", + mostRecentMessageTimestamp, + }; + }), + ); + + return groupsWithFirstMessage; + }, + }); + + useEffect(() => { + if (chatGroupsQuery.data && chatGroupsQuery.data.length > 0) { + // Sort by most recent message timestamp instead of group creation time + const latestGroup = chatGroupsQuery.data.sort((a, b) => + b.mostRecentMessageTimestamp - a.mostRecentMessageTimestamp + )[0]; + setCurrentChatGroupId(latestGroup.id); + } else if (chatGroupsQuery.data && chatGroupsQuery.data.length === 0) { + // No groups exist for this session + setCurrentChatGroupId(null); + } + }, [chatGroupsQuery.data, sessionId, setCurrentChatGroupId]); + + const chatMessagesQuery = useQuery({ + enabled: !!currentChatGroupId, + queryKey: ["chat-messages", currentChatGroupId], + queryFn: async () => { + if (!currentChatGroupId) { + return []; + } + + const dbMessages = await dbCommands.listChatMessages(currentChatGroupId); + return dbMessages.map(msg => { + // Parse tool_details for all messages + let parsedToolDetails: any = undefined; + if (msg.tool_details) { + try { + parsedToolDetails = JSON.parse(msg.tool_details); + } catch (error) { + console.error("Failed to parse tool_details:", msg.id, error); + } + } + + return { + id: msg.id, + content: msg.content, + isUser: msg.role === "User", + timestamp: new Date(msg.created_at), + type: msg.type || "text-delta", + parts: msg.role === "Assistant" ? parseMarkdownBlocks(msg.content) : undefined, + toolDetails: parsedToolDetails, + }; + }); + }, + }); + + useEffect(() => { + const justFinishedGenerating = prevIsGenerating && prevIsGenerating.current === true && isGenerating === false; + if (prevIsGenerating) { + prevIsGenerating.current = isGenerating || false; + } + + if (chatMessagesQuery.data) { + if (!isGenerating && !justFinishedGenerating) { + // Safe to sync from database + setMessages(chatMessagesQuery.data); + setHasChatStarted(chatMessagesQuery.data.length > 0); + } else { + // Currently generating - DON'T override local state + console.log("Skipping DB sync - currently generating"); + } + } + }, [chatMessagesQuery.data, isGenerating, setMessages, setHasChatStarted, prevIsGenerating]); + + const sessionData = useQuery({ + enabled: !!sessionId, + queryKey: ["session", "chat-context", sessionId], + queryFn: async () => { + if (!sessionId) { + return null; + } + + const session = await dbCommands.getSession({ id: sessionId }); + if (!session) { + return null; + } + + return { + title: session.title || "", + rawContent: session.raw_memo_html || "", + enhancedContent: session.enhanced_memo_html, + preMeetingContent: session.pre_meeting_memo_html, + words: session.words || [], + }; + }, + }); + + const getChatGroupId = async (): Promise => { + if (!sessionId || !userId) { + throw new Error("No session or user"); + } + + if (currentChatGroupId) { + return currentChatGroupId; + } + + const chatGroup = await dbCommands.createChatGroup({ + id: crypto.randomUUID(), + session_id: sessionId, + user_id: userId, + name: null, + created_at: new Date().toISOString(), + }); + + setCurrentChatGroupId(chatGroup.id); + chatGroupsQuery.refetch(); + return chatGroup.id; + }; + + return { + chatGroupsQuery, + chatMessagesQuery, + sessionData, + getChatGroupId, + }; +} diff --git a/apps/desktop/src/components/right-panel/hooks/useChatQueries2.ts b/apps/desktop/src/components/right-panel/hooks/useChatQueries2.ts deleted file mode 100644 index 539e73ff5c..0000000000 --- a/apps/desktop/src/components/right-panel/hooks/useChatQueries2.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { commands as dbCommands } from "@hypr/plugin-db"; -import type { UIMessage } from "@hypr/utils/ai"; -import { useQuery } from "@tanstack/react-query"; -import { useEffect } from "react"; - -interface UseChatQueries2Props { - sessionId: string | null; - userId: string | null; - currentConversationId: string | null; - setCurrentConversationId: (id: string | null) => void; - setMessages: (messages: UIMessage[]) => void; - isGenerating?: boolean; -} - -export function useChatQueries2({ - sessionId, - userId, - currentConversationId, - setCurrentConversationId, - setMessages, - isGenerating, -}: UseChatQueries2Props) { - const conversationsQuery = useQuery({ - enabled: !!sessionId && !!userId, - queryKey: ["conversations", sessionId], - queryFn: async () => { - if (!sessionId || !userId) { - return []; - } - const conversations = await dbCommands.listConversations(sessionId); - - const conversationsWithPreview = await Promise.all( - conversations.map(async (conv) => { - const messages = await dbCommands.listMessagesV2(conv.id); - const firstUserMessage = messages.find(msg => msg.role === "user"); - - const mostRecentTimestamp = messages.length > 0 - ? Math.max(...messages.map(msg => new Date(msg.created_at).getTime())) - : new Date(conv.created_at).getTime(); - - return { - ...conv, - firstMessage: firstUserMessage ? (JSON.parse(firstUserMessage.parts)[0]?.text || "") : "", - mostRecentTimestamp, - }; - }), - ); - - return conversationsWithPreview; - }, - }); - - useEffect(() => { - if (conversationsQuery.data && conversationsQuery.data.length > 0) { - const latestConversation = conversationsQuery.data.sort((a, b) => - b.mostRecentTimestamp - a.mostRecentTimestamp - )[0]; - setCurrentConversationId(latestConversation.id); - } else if (conversationsQuery.data && conversationsQuery.data.length === 0) { - setCurrentConversationId(null); - } - }, [conversationsQuery.data, sessionId, setCurrentConversationId]); - - const messagesQuery = useQuery({ - enabled: !!currentConversationId, - queryKey: ["messages", currentConversationId], - queryFn: async () => { - if (!currentConversationId) { - return []; - } - - const dbMessages = await dbCommands.listMessagesV2(currentConversationId); - - const uiMessages: UIMessage[] = dbMessages.map(msg => { - let parts = []; - let metadata = {}; - - try { - parts = JSON.parse(msg.parts); - } catch (error) { - console.error("Failed to parse message parts:", msg.id, error); - - parts = [{ type: "text", text: "" }]; - } - - if (msg.metadata) { - try { - metadata = JSON.parse(msg.metadata); - } catch (error) { - console.error("Failed to parse message metadata:", msg.id, error); - } - } - - return { - id: msg.id, - role: msg.role as "user" | "assistant" | "system", - content: parts, - parts: parts, - createdAt: new Date(msg.created_at), - metadata, - }; - }); - - return uiMessages; - }, - }); - - useEffect(() => { - if (messagesQuery.data && !isGenerating) { - setMessages(messagesQuery.data); - } - }, [messagesQuery.data, isGenerating, setMessages]); - - const sessionDataQuery = useQuery({ - enabled: !!sessionId, - queryKey: ["session", "chat-context", sessionId], - queryFn: async () => { - if (!sessionId) { - return null; - } - - const session = await dbCommands.getSession({ id: sessionId }); - if (!session) { - return null; - } - - return { - title: session.title || "", - rawContent: session.raw_memo_html || "", - enhancedContent: session.enhanced_memo_html, - preMeetingContent: session.pre_meeting_memo_html, - words: session.words || [], - }; - }, - }); - - const createConversation = async (): Promise => { - if (!sessionId || !userId) { - throw new Error("No session or user"); - } - - const conversation = await dbCommands.createConversation({ - id: crypto.randomUUID(), - session_id: sessionId, - user_id: userId, - name: null, - created_at: new Date().toISOString(), - updated_at: new Date().toISOString(), - }); - - setCurrentConversationId(conversation.id); - conversationsQuery.refetch(); - return conversation.id; - }; - - const getOrCreateConversationId = async (): Promise => { - if (currentConversationId) { - return currentConversationId; - } - return createConversation(); - }; - - return { - conversations: conversationsQuery.data || [], - conversationsLoading: conversationsQuery.isLoading, - messages: messagesQuery.data || [], - messagesLoading: messagesQuery.isLoading, - sessionData: sessionDataQuery.data, - sessionDataLoading: sessionDataQuery.isLoading, - createConversation, - getOrCreateConversationId, - refetchConversations: conversationsQuery.refetch, - refetchMessages: messagesQuery.refetch, - }; -} diff --git a/apps/desktop/src/components/right-panel/utils/chat-transport.ts b/apps/desktop/src/components/right-panel/utils/chat-transport.ts deleted file mode 100644 index a70e7616bc..0000000000 --- a/apps/desktop/src/components/right-panel/utils/chat-transport.ts +++ /dev/null @@ -1,274 +0,0 @@ -import { commands as connectorCommands } from "@hypr/plugin-connector"; -import { commands as mcpCommands } from "@hypr/plugin-mcp"; -import { fetch as tauriFetch } from "@hypr/utils"; -import type { UIMessage } from "@hypr/utils/ai"; -import { - type ChatRequestOptions, - type ChatTransport, - dynamicTool, - experimental_createMCPClient, - modelProvider, - smoothStream, - stepCountIs, - streamText, - type UIMessageChunk, -} from "@hypr/utils/ai"; -import { Client } from "@modelcontextprotocol/sdk/client/index.js"; -import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; -import { getLicenseKey } from "tauri-plugin-keygen-api"; -import { z } from "zod"; - -// Import the custom tools -import { prepareMessagesForAI } from "./chat-utils"; -import { buildVercelToolsFromMcp } from "./mcp-http-wrapper"; -import { createEditEnhancedNoteTool } from "./tools/edit_enhanced_note"; -import { createSearchSessionDateRangeTool } from "./tools/search_session_date_range"; -import { createSearchSessionTool } from "./tools/search_session_multi_keywords"; - -interface CustomChatTransportOptions { - sessionId: string | null; - userId: string | null; - sessionData?: any; - selectionData?: any; - sessions?: any; - getLicense?: { data?: { valid?: boolean } }; - mentionedContent?: Array<{ id: string; type: string; label: string }>; -} - -export class CustomChatTransport implements ChatTransport { - private options: CustomChatTransportOptions; - private allMcpClients: any[] = []; - private hyprMcpClient: Client | null = null; - - constructor(options: CustomChatTransportOptions) { - this.options = options; - } - - async initializeModel() { - const provider = await modelProvider(); - const model = provider.languageModel("defaultModel"); - - return model; - } - - private async loadMCPTools() { - let newMcpTools: Record = {}; - let hyprMcpTools: Record = {}; - - const llmConnection = await connectorCommands.getLlmConnection(); - const { type } = llmConnection; - const apiBase = llmConnection.connection?.api_base; - const customModel = await connectorCommands.getCustomLlmModel(); - - const modelId = type === "Custom" && customModel ? customModel : "gpt-4"; - - const shouldUseTools = modelId === "gpt-4.1" - || modelId === "openai/gpt-4.1" - || modelId === "anthropic/claude-sonnet-4" - || modelId === "openai/gpt-4o" - || modelId === "gpt-4o" - || apiBase?.includes("pro.hyprnote.com") - || modelId === "openai/gpt-5"; - - if (!shouldUseTools) { - return { newMcpTools, hyprMcpTools }; - } - - const mcpServers = await mcpCommands.getServers(); - const enabledServers = mcpServers.filter((server) => server.enabled); - - // load Hyprnote cloud MCP if applicable - if (apiBase?.includes("pro.hyprnote.com") && this.options.getLicense?.data?.valid) { - try { - const licenseKey = await getLicenseKey(); - const transport = new StreamableHTTPClientTransport( - new URL("https://pro.hyprnote.com/mcp"), - { - fetch: tauriFetch, - requestInit: { - headers: { - "x-hyprnote-license-key": licenseKey || "", - }, - }, - }, - ); - this.hyprMcpClient = new Client({ - name: "hyprmcp", - version: "0.1.0", - }); - await this.hyprMcpClient.connect(transport); - hyprMcpTools = await buildVercelToolsFromMcp(this.hyprMcpClient); - } catch (error) { - console.error("Error creating hyprmcp client:", error); - } - } - - for (const server of enabledServers) { - try { - const mcpClient = await experimental_createMCPClient({ - transport: { - type: "sse", - url: server.url, - ...(server.headerKey && server.headerValue && { - headers: { - [server.headerKey]: server.headerValue, - }, - }), - onerror: (error: any) => console.log("mcp client error:", error), - onclose: () => console.log("mcp client closed"), - }, - }); - this.allMcpClients.push(mcpClient); - - const tools = await mcpClient.tools(); - for (const [toolName, tool] of Object.entries(tools as Record)) { - newMcpTools[toolName] = dynamicTool({ - description: tool.description, - inputSchema: tool.inputSchema || z.any(), - execute: tool.execute, - }); - } - } catch (error) { - console.error("Error creating MCP client:", error); - } - } - - return { newMcpTools, hyprMcpTools }; - } - - private async getTools() { - const { newMcpTools, hyprMcpTools } = await this.loadMCPTools(); - - const llmConnection = await connectorCommands.getLlmConnection(); - const { type } = llmConnection; - const apiBase = llmConnection.connection?.api_base; - const customModel = await connectorCommands.getCustomLlmModel(); - - const modelId = type === "Custom" && customModel ? customModel : "gpt-4"; - - const shouldUseTools = modelId === "gpt-4.1" - || modelId === "openai/gpt-4.1" - || modelId === "anthropic/claude-sonnet-4" - || modelId === "openai/gpt-4o" - || modelId === "gpt-4o" - || apiBase?.includes("pro.hyprnote.com") - || modelId === "openai/gpt-5"; - - const searchTool = createSearchSessionTool(this.options.userId); - const searchSessionDateRangeTool = createSearchSessionDateRangeTool(this.options.userId); - const editEnhancedNoteTool = this.options.selectionData - ? createEditEnhancedNoteTool({ - sessionId: this.options.sessionId, - sessions: this.options.sessions || {}, - selectionData: this.options.selectionData, - }) - : null; - - const baseTools = { - ...(editEnhancedNoteTool && { edit_enhanced_note: editEnhancedNoteTool }), - search_sessions_date_range: searchSessionDateRangeTool, - search_sessions_multi_keywords: searchTool, - }; - - return { - ...(shouldUseTools && { ...hyprMcpTools, ...newMcpTools }), - ...(shouldUseTools && baseTools), - }; - } - - async sendMessages( - options: { - chatId: string; - messages: UIMessage[]; - abortSignal: AbortSignal | undefined; - } & { - trigger: "submit-message" | "regenerate-message"; - messageId: string | undefined; - } & ChatRequestOptions, - ): Promise> { - try { - const model = await this.initializeModel(); - - const lastMessage = options.messages[options.messages.length - 1]; - const messageMetadata = lastMessage?.metadata as any; - if (messageMetadata?.selectionData) { - this.options.selectionData = messageMetadata.selectionData; - } - - const tools = await this.getTools(); - - const preparedMessages = await prepareMessagesForAI(options.messages, { - sessionId: this.options.sessionId, - userId: this.options.userId, - sessionData: this.options.sessionData, - selectionData: this.options.selectionData, - mentionedContent: this.options.mentionedContent, - }); - - const result = streamText({ - model, - messages: preparedMessages, - abortSignal: options.abortSignal, - stopWhen: stepCountIs(10), - tools, - toolChoice: "auto", - experimental_transform: smoothStream({ - delayInMs: 70, - chunking: "word", - }), - onFinish: () => { - for (const client of this.allMcpClients) { - client.close(); - } - if (this.hyprMcpClient) { - this.hyprMcpClient.close(); - } - this.allMcpClients = []; - this.hyprMcpClient = null; - }, - }); - - return result.toUIMessageStream({ - onError: (error) => { - if (error == null) { - return "unknown_error"; - } - if (typeof error === "string") { - return error; - } - if (error instanceof Error) { - return error.message; - } - return JSON.stringify(error); - }, - }); - } catch (error) { - console.error("Transport error:", error); - throw error; - } - } - - async reconnectToStream( - _options: { - chatId: string; - } & ChatRequestOptions, - ): Promise | null> { - return null; - } - - // helper method to update options (for selection data, session data, etc.) - updateOptions(newOptions: Partial) { - this.options = { ...this.options, ...newOptions }; - } - - cleanup() { - for (const client of this.allMcpClients) { - client.close(); - } - if (this.hyprMcpClient) { - this.hyprMcpClient.close(); - } - this.allMcpClients = []; - this.hyprMcpClient = null; - } -} diff --git a/apps/desktop/src/components/right-panel/utils/chat-utils.ts b/apps/desktop/src/components/right-panel/utils/chat-utils.ts index f73937d781..3fb3bb7877 100644 --- a/apps/desktop/src/components/right-panel/utils/chat-utils.ts +++ b/apps/desktop/src/components/right-panel/utils/chat-utils.ts @@ -2,8 +2,7 @@ import type { SelectionData } from "@/contexts/right-panel"; import { commands as connectorCommands } from "@hypr/plugin-connector"; import { commands as dbCommands } from "@hypr/plugin-db"; import { commands as templateCommands } from "@hypr/plugin-template"; -import type { UIMessage } from "@hypr/utils/ai"; -import { convertToModelMessages } from "@hypr/utils/ai"; +import { Message } from "../components/chat/types"; export const formatDate = (date: Date) => { const now = new Date(); @@ -34,101 +33,27 @@ export const focusInput = (chatInputRef: React.RefObject) = } }; -/** - * Cleans UIMessages to remove tool parts with problematic states - * that are not compatible with model messages. - * This is a workaround for the Vercel AI SDK v5 limitation. - */ -export const cleanUIMessages = (messages: UIMessage[]): UIMessage[] => { - return messages.map(message => { - // Only process messages that have parts - if (!message.parts || !Array.isArray(message.parts)) { - return message; - } +export const prepareMessageHistory = async ( + messages: Message[], + currentUserMessage?: string, + mentionedContent?: Array<{ id: string; type: string; label: string }>, + modelId?: string, + mcpToolsArray?: Array<{ name: string; description: string; inputSchema: string }>, + sessionData?: any, + sessionId?: string | null, + userId?: string | null, + apiBase?: string | null, + selectionData?: SelectionData, // Add selectionData parameter +) => { + const refetchResult = await sessionData?.refetch(); + let freshSessionData = refetchResult?.data; - // Filter out tool parts with problematic states - const cleanedParts = message.parts.filter(part => { - // Check if this is a tool part (dynamic-tool or tool-*) - if (part.type === "dynamic-tool" || part.type?.startsWith("tool-")) { - const toolPart = part as any; - - // Filter out UI-specific states that cause conversion errors - // Keep only text parts and tool parts without problematic states - if ( - toolPart.state === "input-available" - || toolPart.state === "output-available" - || toolPart.state === "input-streaming" - || toolPart.state === "output-error" - ) { - return false; // Remove these tool parts - } - } + const { type } = await connectorCommands.getLlmConnection(); - // Keep all other parts (text, etc.) - return true; - }); + const participants = sessionId ? await dbCommands.sessionListParticipants(sessionId) : []; - return { - ...message, - parts: cleanedParts, - }; - }); -}; + const calendarEvent = sessionId ? await dbCommands.sessionGetEvent(sessionId) : null; -/** - * Prepares messages for AI model with system prompt and context. - * Works with UIMessage types from Vercel AI SDK v5. - */ -export const prepareMessagesForAI = async ( - messages: UIMessage[], - options: { - sessionId: string | null; - userId: string | null; - sessionData?: any; - selectionData?: SelectionData; - mentionedContent?: Array<{ id: string; type: string; label: string }>; - }, -) => { - const { sessionId, userId, sessionData, selectionData, mentionedContent } = options; - - // sessionData is already the data object from the query, not the query itself - // It doesn't have a refetch method - it's just the plain data - let freshSessionData = sessionData; - - // If no session data and we have sessionId, fetch it directly - if (!freshSessionData && sessionId) { - try { - const session = await dbCommands.getSession({ id: sessionId }); - if (session) { - freshSessionData = { - title: session.title || "", - rawContent: session.raw_memo_html || "", - enhancedContent: session.enhanced_memo_html, - preMeetingContent: session.pre_meeting_memo_html, - words: session.words || [], - }; - } - } catch (error) { - console.error("Error fetching session data:", error); - } - } - - // Get connection info - const llmConnection = await connectorCommands.getLlmConnection(); - const { type } = llmConnection; - const apiBase = llmConnection.connection?.api_base; - const customModel = await connectorCommands.getCustomLlmModel(); - const modelId = type === "Custom" && customModel ? customModel : "gpt-4"; - - // Get participants and calendar event - const participants = sessionId - ? await dbCommands.sessionListParticipants(sessionId) - : []; - const calendarEvent = sessionId - ? await dbCommands.sessionGetEvent(sessionId) - : null; - - // Format current date/time const currentDateTime = new Date().toLocaleString("en-US", { year: "numeric", month: "long", @@ -138,14 +63,12 @@ export const prepareMessagesForAI = async ( hour12: true, }); - // Format event info const eventInfo = calendarEvent - ? `${calendarEvent.name} (${calendarEvent.start_date} - ${calendarEvent.end_date}${ + ? `${calendarEvent.name} (${calendarEvent.start_date} - ${calendarEvent.end_date})${ calendarEvent.note ? ` - ${calendarEvent.note}` : "" - })` + }` : ""; - // Determine if tools are enabled const toolEnabled = !!( modelId === "gpt-4.1" || modelId === "openai/gpt-4.1" @@ -156,17 +79,6 @@ export const prepareMessagesForAI = async ( || (apiBase && apiBase.includes("pro.hyprnote.com")) ); - // Get MCP tools list for system prompt - const mcpCommands = await import("@hypr/plugin-mcp").then(m => m.commands); - const mcpServers = await mcpCommands.getServers(); - const enabledServers = mcpServers.filter((server) => server.enabled); - const mcpToolsArray = enabledServers.map((server) => ({ - name: server.type, // Using type as name since that's what's available - description: "", - inputSchema: "{}", - })); - - // Generate system message using template const systemContent = await templateCommands.render("chat.system", { session: freshSessionData, words: JSON.stringify(freshSessionData?.words || []), @@ -182,138 +94,130 @@ export const prepareMessagesForAI = async ( mcpTools: mcpToolsArray, }); - // Clean UIMessages to remove problematic tool states before conversion - const cleanedMessages = cleanUIMessages(messages); + const conversationHistory: Array<{ + role: "system" | "user" | "assistant"; + content: string; + }> = [ + { role: "system" as const, content: systemContent }, + ]; + + messages.forEach(message => { + conversationHistory.push({ + role: message.isUser ? ("user" as const) : ("assistant" as const), + content: message.content, + }); + }); - // Convert cleaned UIMessages to model messages - const modelMessages = convertToModelMessages(cleanedMessages); - const preparedMessages: any[] = []; + const processedMentions: Array<{ type: string; label: string; content: string }> = []; - // Always add system message first - preparedMessages.push({ - role: "system", - content: systemContent, - }); + if (mentionedContent && mentionedContent.length > 0) { + for (const mention of mentionedContent) { + try { + if (mention.type === "note") { + const sessionData = await dbCommands.getSession({ id: mention.id }); - // Process all messages, enhancing the last user message if needed - for (let i = 0; i < modelMessages.length; i++) { - const msg = modelMessages[i]; - - // Check if this is the last user message and we have context to add - const isLastUserMessage = i === modelMessages.length - 1 && msg.role === "user"; - - if (isLastUserMessage && (mentionedContent || selectionData)) { - // Process mentions - const processedMentions: Array<{ type: string; label: string; content: string }> = []; - - if (mentionedContent && mentionedContent.length > 0) { - for (const mention of mentionedContent) { - try { - if (mention.type === "note") { - const sessionData = await dbCommands.getSession({ id: mention.id }); - if (sessionData) { - let noteContent = ""; - if (sessionData.enhanced_memo_html && sessionData.enhanced_memo_html.trim() !== "") { - noteContent = sessionData.enhanced_memo_html; - } else if (sessionData.raw_memo_html && sessionData.raw_memo_html.trim() !== "") { - noteContent = sessionData.raw_memo_html; - } else { - continue; - } - processedMentions.push({ - type: "note", - label: mention.label, - content: noteContent, - }); - } + if (sessionData) { + let noteContent = ""; + + if (sessionData.enhanced_memo_html && sessionData.enhanced_memo_html.trim() !== "") { + noteContent = sessionData.enhanced_memo_html; + } else if (sessionData.raw_memo_html && sessionData.raw_memo_html.trim() !== "") { + noteContent = sessionData.raw_memo_html; + } else { + continue; } - if (mention.type === "human") { - const humanData = await dbCommands.getHuman(mention.id); - if (humanData) { - let humanContent = ""; - humanContent += "Name: " + humanData?.full_name + "\n"; - humanContent += "Email: " + humanData?.email + "\n"; - humanContent += "Job Title: " + humanData?.job_title + "\n"; - humanContent += "LinkedIn: " + humanData?.linkedin_username + "\n"; - - // Add recent sessions for this person - if (humanData?.full_name) { - try { - const participantSessions = await dbCommands.listSessions({ - type: "search", - query: humanData.full_name, - user_id: userId || "", - limit: 5, - }); - - if (participantSessions.length > 0) { - humanContent += "\nNotes this person participated in:\n"; - for (const session of participantSessions.slice(0, 2)) { - const participants = await dbCommands.sessionListParticipants(session.id); - const isParticipant = participants.some((p: any) => - p.full_name === humanData.full_name || p.email === humanData.email - ); - - if (isParticipant) { - let briefContent = ""; - if (session.enhanced_memo_html && session.enhanced_memo_html.trim() !== "") { - // Strip HTML tags for brief content - briefContent = session.enhanced_memo_html.replace(/<[^>]*>/g, "").slice(0, 200) + "..."; - } else if (session.raw_memo_html && session.raw_memo_html.trim() !== "") { - briefContent = session.raw_memo_html.replace(/<[^>]*>/g, "").slice(0, 200) + "..."; - } - humanContent += `- "${session.title || "Untitled"}": ${briefContent}\n`; - } - } + processedMentions.push({ + type: "note", + label: mention.label, + content: noteContent, + }); + } + } + + if (mention.type === "human") { + const humanData = await dbCommands.getHuman(mention.id); + + let humanContent = ""; + humanContent += "Name: " + humanData?.full_name + "\n"; + humanContent += "Email: " + humanData?.email + "\n"; + humanContent += "Job Title: " + humanData?.job_title + "\n"; + humanContent += "LinkedIn: " + humanData?.linkedin_username + "\n"; + + if (humanData?.full_name) { + try { + const participantSessions = await dbCommands.listSessions({ + type: "search", + query: humanData.full_name, + user_id: userId || "", + limit: 5, + }); + + if (participantSessions.length > 0) { + humanContent += "\nNotes this person participated in:\n"; + + for (const session of participantSessions.slice(0, 2)) { + const participants = await dbCommands.sessionListParticipants(session.id); + const isParticipant = participants.some((p: any) => + p.full_name === humanData.full_name || p.email === humanData.email + ); + + if (isParticipant) { + let briefContent = ""; + if (session.enhanced_memo_html && session.enhanced_memo_html.trim() !== "") { + const div = document.createElement("div"); + div.innerHTML = session.enhanced_memo_html; + briefContent = (div.textContent || div.innerText || "").slice(0, 200) + "..."; + } else if (session.raw_memo_html && session.raw_memo_html.trim() !== "") { + const div = document.createElement("div"); + div.innerHTML = session.raw_memo_html; + briefContent = (div.textContent || div.innerText || "").slice(0, 200) + "..."; } - } catch (error) { - console.error(`Error fetching notes for person "${humanData.full_name}":`, error); + + humanContent += `- "${session.title || "Untitled"}": ${briefContent}\n`; } } - - processedMentions.push({ - type: "human", - label: mention.label, - content: humanContent, - }); } + } catch (error) { + console.error(`Error fetching notes for person "${humanData.full_name}":`, error); } - } catch (error) { - console.error(`Error fetching content for "${mention.label}":`, error); } - } - } - // Get the original user message content - const originalContent = typeof msg.content === "string" - ? msg.content - : msg.content.map((part: any) => part.type === "text" ? part.text : "").join(""); - - // Use the user template to format the enhanced message - const enhancedContent = await templateCommands.render("chat.user", { - message: originalContent, - mentionedContent: processedMentions, - selectionData: selectionData - ? { - text: selectionData.text, - startOffset: selectionData.startOffset, - endOffset: selectionData.endOffset, - sessionId: selectionData.sessionId, - timestamp: selectionData.timestamp, + if (humanData) { + processedMentions.push({ + type: "human", + label: mention.label, + content: humanContent, + }); } - : undefined, - }); - - preparedMessages.push({ - role: "user", - content: enhancedContent, - }); - } else { - // For all other messages, just add them as-is - preparedMessages.push(msg); + } + } catch (error) { + console.error(`Error fetching content for "${mention.label}":`, error); + } } } - return preparedMessages; + // Use the user template to format the user message + if (currentUserMessage) { + const userContent = await templateCommands.render("chat.user", { + message: currentUserMessage, + mentionedContent: processedMentions, + selectionData: selectionData + ? { + text: selectionData.text, + startOffset: selectionData.startOffset, + endOffset: selectionData.endOffset, + sessionId: selectionData.sessionId, + timestamp: selectionData.timestamp, + } + : undefined, // Convert to plain object for JsonValue compatibility + }); + + conversationHistory.push({ + role: "user" as const, + content: userContent, + }); + } + + return conversationHistory; }; diff --git a/apps/desktop/src/components/right-panel/utils/markdown-parser.ts b/apps/desktop/src/components/right-panel/utils/markdown-parser.ts index b83cf263eb..6ce1908df7 100644 --- a/apps/desktop/src/components/right-panel/utils/markdown-parser.ts +++ b/apps/desktop/src/components/right-panel/utils/markdown-parser.ts @@ -1,12 +1,7 @@ -// Simple type for parsed markdown parts -export interface ParsedPart { - type: "text" | "markdown"; - content: string; - isComplete?: boolean; -} +import { MessagePart } from "../components/chat/types"; -export const parseMarkdownBlocks = (text: string): ParsedPart[] => { - const parts: ParsedPart[] = []; +export const parseMarkdownBlocks = (text: string): MessagePart[] => { + const parts: MessagePart[] = []; let currentIndex = 0; let inMarkdownBlock = false; let markdownStart = -1; diff --git a/apps/desktop/src/components/right-panel/utils/tools/edit_enhanced_note.ts b/apps/desktop/src/components/right-panel/utils/tools/edit_enhanced_note.ts index 7196c30c00..282cde25d3 100644 --- a/apps/desktop/src/components/right-panel/utils/tools/edit_enhanced_note.ts +++ b/apps/desktop/src/components/right-panel/utils/tools/edit_enhanced_note.ts @@ -29,13 +29,9 @@ export const createEditEnhancedNoteTool = ({ return { success: false, error: "No session ID available" }; } - // Skip session store check if sessions object is empty - // We rely on having a valid sessionId and editor ref instead - if (sessions && Object.keys(sessions).length > 0) { - const sessionStore = sessions[sessionId]; - if (!sessionStore) { - console.warn("Session store not found in sessions object, but continuing with editor ref"); - } + const sessionStore = sessions[sessionId]; + if (!sessionStore) { + return { success: false, error: "Session not found" }; } try { diff --git a/apps/desktop/src/components/right-panel/views/chat-view.tsx b/apps/desktop/src/components/right-panel/views/chat-view.tsx index 8ce8cc231f..941e8132fa 100644 --- a/apps/desktop/src/components/right-panel/views/chat-view.tsx +++ b/apps/desktop/src/components/right-panel/views/chat-view.tsx @@ -1,12 +1,9 @@ +import { useQuery } from "@tanstack/react-query"; import { useNavigate } from "@tanstack/react-router"; -import { useEffect, useState } from "react"; +import { useEffect, useRef, useState } from "react"; -import { showProGateModal } from "@/components/pro-gate-modal/service"; import { useHypr, useRightPanel } from "@/contexts"; -import { useLicense } from "@/hooks/use-license"; -import { commands as analyticsCommands } from "@hypr/plugin-analytics"; -import { commands as miscCommands } from "@hypr/plugin-misc"; -import { useSessions } from "@hypr/utils/contexts"; +import { commands as connectorCommands } from "@hypr/plugin-connector"; import { ChatHistoryView, ChatInput, @@ -17,190 +14,73 @@ import { } from "../components/chat"; import { useActiveEntity } from "../hooks/useActiveEntity"; -import { useChat2 } from "../hooks/useChat2"; -import { useChatQueries2 } from "../hooks/useChatQueries2"; +import { useChatLogic } from "../hooks/useChatLogic"; +import { useChatQueries } from "../hooks/useChatQueries"; +import type { Message } from "../types/chat-types"; import { focusInput, formatDate } from "../utils/chat-utils"; export function ChatView() { const navigate = useNavigate(); - const { isExpanded, chatInputRef, pendingSelection } = useRightPanel(); + const { isExpanded, chatInputRef } = useRightPanel(); const { userId } = useHypr(); - const { getLicense } = useLicense(); + const [messages, setMessages] = useState([]); const [inputValue, setInputValue] = useState(""); const [showHistory, setShowHistory] = useState(false); const [searchValue, setSearchValue] = useState(""); - const [currentConversationId, setCurrentConversationId] = useState(null); + const [hasChatStarted, setHasChatStarted] = useState(false); + const [currentChatGroupId, setCurrentChatGroupId] = useState(null); const [chatHistory, _setChatHistory] = useState([]); + const prevIsGenerating = useRef(false); + const { activeEntity, sessionId } = useActiveEntity({ - setMessages: () => {}, + setMessages, setInputValue, setShowHistory, - setHasChatStarted: () => {}, + setHasChatStarted, }); - const sessions = useSessions((s) => s.sessions); + const llmConnectionQuery = useQuery({ + queryKey: ["llm-connection"], + queryFn: () => connectorCommands.getLlmConnection(), + refetchOnWindowFocus: true, + }); - const { - conversations, - sessionData, - createConversation, - getOrCreateConversationId, - } = useChatQueries2({ + const { chatGroupsQuery, sessionData, getChatGroupId } = useChatQueries({ sessionId, userId, - currentConversationId, - setCurrentConversationId, - setMessages: () => {}, - isGenerating: false, + currentChatGroupId, + setCurrentChatGroupId, + setMessages, + setHasChatStarted, + prevIsGenerating, }); const { - messages, - stop, - setMessages, isGenerating, - sendMessage, - status, - } = useChat2({ + isStreamingText, + handleSubmit, + handleQuickAction, + handleApplyMarkdown, + handleKeyDown, + handleStop, + } = useChatLogic({ sessionId, userId, - conversationId: currentConversationId, - sessionData: sessionData, - selectionData: pendingSelection, - onError: (err: Error) => { - console.error("Chat error:", err); - }, + activeEntity, + messages, + inputValue, + hasChatStarted, + setMessages, + setInputValue, + setHasChatStarted, + getChatGroupId, + sessionData, + chatInputRef, + llmConnectionQuery, }); - useEffect(() => { - const loadMessages = async () => { - if (currentConversationId) { - try { - const { commands } = await import("@hypr/plugin-db"); - const dbMessages = await commands.listMessagesV2(currentConversationId); - - const uiMessages = dbMessages.map(msg => ({ - id: msg.id, - role: msg.role as "user" | "assistant" | "system", - parts: JSON.parse(msg.parts), - metadata: msg.metadata ? JSON.parse(msg.metadata) : {}, - })); - - setMessages(uiMessages); - } catch (error) { - console.error("Failed to load messages:", error); - } - } else { - setMessages([]); - } - }; - - loadMessages(); - }, [currentConversationId, setMessages]); - - const handleSubmit = async ( - mentionedContent?: Array<{ id: string; type: string; label: string }>, - selectionData?: any, - htmlContent?: string, - ) => { - if (!inputValue.trim()) { - return; - } - - const userMessageCount = messages.filter((m: any) => m.role === "user").length; - if (userMessageCount >= 4 && !getLicense.data?.valid) { - await analyticsCommands.event({ - event: "pro_license_required_chat", - distinct_id: userId, - }); - await showProGateModal("chat"); - return; - } - - analyticsCommands.event({ - event: "chat_message_sent", - distinct_id: userId, - }); - - let convId = currentConversationId; - if (!convId) { - convId = await getOrCreateConversationId(); - if (!convId) { - console.error("Failed to create conversation"); - return; - } - setCurrentConversationId(convId); - } - - sendMessage(inputValue, { - mentionedContent, - selectionData, - htmlContent, - conversationId: convId, - }); - - setInputValue(""); - }; - - const handleStop = () => { - stop(); - }; - - const handleKeyDown = (e: React.KeyboardEvent) => { - if (e.key === "Enter" && !e.shiftKey) { - e.preventDefault(); - handleSubmit(); - } - }; - - const handleQuickAction = async (action: string) => { - const convId = await createConversation(); - if (!convId) { - console.error("Failed to create conversation"); - return; - } - - setCurrentConversationId(convId); - - sendMessage(action, { - conversationId: convId, - }); - }; - - const handleApplyMarkdown = async (markdownContent: string) => { - if (!sessionId) { - console.error("No session ID available"); - return; - } - - const sessionStore = sessions[sessionId]; - if (!sessionStore) { - console.error("Session not found in store"); - return; - } - - try { - const html = await miscCommands.opinionatedMdToHtml(markdownContent); - - const { showRaw, updateRawNote, updateEnhancedNote } = sessionStore.getState(); - - if (showRaw) { - updateRawNote(html); - } else { - updateEnhancedNote(html); - } - } catch (error) { - console.error("Failed to apply markdown content:", error); - } - }; - - const isSubmitted = status === "submitted"; - const isStreaming = status === "streaming"; - const isReady = status === "ready"; - const isError = status === "error"; - const handleInputChange = (e: React.ChangeEvent) => { setInputValue(e.target.value); }; @@ -209,29 +89,19 @@ export function ChatView() { focusInput(chatInputRef); }; - const handleNewChat = () => { - if (!messages || messages.length === 0) { - return; - } - + const handleNewChat = async () => { if (!sessionId || !userId) { return; } - if (isGenerating) { - return; - } - - setCurrentConversationId(null); - setInputValue(""); + setCurrentChatGroupId(null); setMessages([]); + setHasChatStarted(false); + setInputValue(""); }; const handleSelectChatGroup = async (groupId: string) => { - if (isGenerating) { - return; - } - setCurrentConversationId(groupId); + setCurrentChatGroupId(groupId); }; const handleViewHistory = () => { @@ -242,7 +112,7 @@ export function ChatView() { setSearchValue(e.target.value); }; - const handleSelectChat = (_chatId: string) => { + const handleSelectChat = (chatId: string) => { setShowHistory(false); }; @@ -285,7 +155,7 @@ export function ChatView() { @@ -299,13 +169,11 @@ export function ChatView() { : ( )} diff --git a/crates/db-user/src/chat_conversations_migration.sql b/crates/db-user/src/chat_conversations_migration.sql deleted file mode 100644 index 03214e21dc..0000000000 --- a/crates/db-user/src/chat_conversations_migration.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE IF NOT EXISTS chat_conversations ( - id TEXT PRIMARY KEY, - session_id TEXT NOT NULL, - user_id TEXT NOT NULL, - name TEXT, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE -); diff --git a/crates/db-user/src/chat_conversations_ops.rs b/crates/db-user/src/chat_conversations_ops.rs deleted file mode 100644 index 83bdb41eb3..0000000000 --- a/crates/db-user/src/chat_conversations_ops.rs +++ /dev/null @@ -1,76 +0,0 @@ -use super::{ChatConversation, UserDatabase}; - -impl UserDatabase { - pub async fn create_conversation( - &self, - conversation: ChatConversation, - ) -> Result { - let conn = self.conn()?; - - let mut rows = conn - .query( - "INSERT INTO chat_conversations ( - id, session_id, user_id, name, created_at, -updated_at - ) VALUES (?, ?, ?, ?, ?, ?) - RETURNING *", - vec![ - conversation.id, - conversation.session_id, - conversation.user_id, - conversation.name.unwrap_or_default(), - conversation.created_at.to_rfc3339(), - conversation.updated_at.to_rfc3339(), - ], - ) - .await?; - - let row = rows.next().await?.unwrap(); - let conversation: ChatConversation = libsql::de::from_row(&row)?; - Ok(conversation) - } - - pub async fn list_conversations( - &self, - session_id: impl Into, - ) -> Result, crate::Error> { - let conn = self.conn()?; - - let mut rows = conn - .query( - "SELECT * FROM chat_conversations - WHERE session_id = ? - ORDER BY updated_at DESC", - vec![session_id.into()], - ) - .await?; - - let mut conversations = Vec::new(); - while let Some(row) = rows.next().await? { - let conversation: ChatConversation = libsql::de::from_row(&row)?; - conversations.push(conversation); - } - Ok(conversations) - } - - pub async fn get_conversation( - &self, - id: impl Into, - ) -> Result, crate::Error> { - let conn = self.conn()?; - - let mut rows = conn - .query( - "SELECT * FROM chat_conversations WHERE id = ?", - vec![id.into()], - ) - .await?; - - if let Some(row) = rows.next().await? { - let conversation: ChatConversation = libsql::de::from_row(&row)?; - Ok(Some(conversation)) - } else { - Ok(None) - } - } -} diff --git a/crates/db-user/src/chat_conversations_types.rs b/crates/db-user/src/chat_conversations_types.rs deleted file mode 100644 index 0724c66f1f..0000000000 --- a/crates/db-user/src/chat_conversations_types.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::user_common_derives; - -user_common_derives! { - pub struct ChatConversation { - pub id: String, - pub session_id: String, - pub user_id: String, - pub name: Option, - pub created_at: chrono::DateTime, - pub updated_at: chrono::DateTime, - } -} diff --git a/crates/db-user/src/chat_messages_v2_migration.sql b/crates/db-user/src/chat_messages_v2_migration.sql deleted file mode 100644 index 1d93bdfb67..0000000000 --- a/crates/db-user/src/chat_messages_v2_migration.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE IF NOT EXISTS chat_messages_v2 ( - id TEXT PRIMARY KEY, - conversation_id TEXT NOT NULL, - role TEXT CHECK(role IN ('system', 'user', 'assistant')) NOT NULL, - parts TEXT NOT NULL, - -- JSON string of message parts array - metadata TEXT, - -- JSON string for mentions, selections, etc. - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL, - FOREIGN KEY (conversation_id) REFERENCES chat_conversations(id) ON DELETE CASCADE -); diff --git a/crates/db-user/src/chat_messages_v2_ops.rs b/crates/db-user/src/chat_messages_v2_ops.rs deleted file mode 100644 index 62cea259bc..0000000000 --- a/crates/db-user/src/chat_messages_v2_ops.rs +++ /dev/null @@ -1,74 +0,0 @@ -use super::{ChatMessageV2, UserDatabase}; - -impl UserDatabase { - pub async fn create_message_v2( - &self, - message: ChatMessageV2, - ) -> Result { - let conn = self.conn()?; - - let mut rows = conn - .query( - "INSERT INTO chat_messages_v2 ( - id, conversation_id, role, parts, metadata, -created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?) - RETURNING *", - vec![ - message.id, - message.conversation_id, - message.role.to_string(), - message.parts, - message.metadata.unwrap_or_default(), - message.created_at.to_rfc3339(), - message.updated_at.to_rfc3339(), - ], - ) - .await?; - - let row = rows.next().await?.unwrap(); - let message: ChatMessageV2 = libsql::de::from_row(&row)?; - Ok(message) - } - - pub async fn list_messages_v2( - &self, - conversation_id: impl Into, - ) -> Result, crate::Error> { - let conn = self.conn()?; - - let mut rows = conn - .query( - "SELECT * FROM chat_messages_v2 - WHERE conversation_id = ? - ORDER BY created_at ASC", - vec![conversation_id.into()], - ) - .await?; - - let mut messages = Vec::new(); - while let Some(row) = rows.next().await? { - let message: ChatMessageV2 = libsql::de::from_row(&row)?; - messages.push(message); - } - Ok(messages) - } - - pub async fn update_message_v2_parts( - &self, - id: impl Into, - parts: impl Into, - ) -> Result<(), crate::Error> { - let conn = self.conn()?; - - conn.execute( - "UPDATE chat_messages_v2 - SET parts = ?, updated_at = ? - WHERE id = ?", - vec![parts.into(), chrono::Utc::now().to_rfc3339(), id.into()], - ) - .await?; - - Ok(()) - } -} diff --git a/crates/db-user/src/chat_messages_v2_types.rs b/crates/db-user/src/chat_messages_v2_types.rs deleted file mode 100644 index f8ef073c7f..0000000000 --- a/crates/db-user/src/chat_messages_v2_types.rs +++ /dev/null @@ -1,28 +0,0 @@ -use crate::user_common_derives; - -user_common_derives! { - #[derive(strum::EnumString, strum::Display)] - pub enum ChatMessageV2Role { - #[serde(rename = "system")] - #[strum(serialize = "system")] - System, - #[serde(rename = "user")] - #[strum(serialize = "user")] - User, - #[serde(rename = "assistant")] - #[strum(serialize = "assistant")] - Assistant, - } -} - -user_common_derives! { - pub struct ChatMessageV2 { - pub id: String, - pub conversation_id: String, - pub role: ChatMessageV2Role, - pub parts: String, // JSON string - pub metadata: Option, // JSON string - pub created_at: chrono::DateTime, - pub updated_at: chrono::DateTime, - } -} diff --git a/crates/db-user/src/lib.rs b/crates/db-user/src/lib.rs index de07e00df8..402b9c1dc3 100644 --- a/crates/db-user/src/lib.rs +++ b/crates/db-user/src/lib.rs @@ -1,13 +1,9 @@ mod calendars_ops; mod calendars_types; -mod chat_conversations_ops; -mod chat_conversations_types; mod chat_groups_ops; mod chat_groups_types; mod chat_messages_ops; mod chat_messages_types; -mod chat_messages_v2_ops; -mod chat_messages_v2_types; mod config_ops; mod config_types; mod events_ops; @@ -30,10 +26,6 @@ pub use calendars_ops::*; #[allow(unused)] pub use calendars_types::*; #[allow(unused)] -pub use chat_conversations_ops::*; -#[allow(unused)] -pub use chat_conversations_types::*; -#[allow(unused)] pub use chat_groups_ops::*; #[allow(unused)] pub use chat_groups_types::*; @@ -42,10 +34,6 @@ pub use chat_messages_ops::*; #[allow(unused)] pub use chat_messages_types::*; #[allow(unused)] -pub use chat_messages_v2_ops::*; -#[allow(unused)] -pub use chat_messages_v2_types::*; -#[allow(unused)] pub use config_ops::*; #[allow(unused)] pub use config_types::*; @@ -142,7 +130,7 @@ impl std::ops::Deref for UserDatabase { } // Append only. Do not reorder. -const MIGRATIONS: [&str; 26] = [ +const MIGRATIONS: [&str; 25] = [ include_str!("./calendars_migration.sql"), include_str!("./configs_migration.sql"), include_str!("./events_migration.sql"), @@ -167,8 +155,7 @@ const MIGRATIONS: [&str; 26] = [ include_str!("./events_migration_2.sql"), include_str!("./chat_messages_migration_1.sql"), include_str!("./chat_messages_migration_2.sql"), - include_str!("./chat_conversations_migration.sql"), - include_str!("./chat_messages_v2_migration.sql"), + include_str!("./templates_migration_1.sql"), ]; pub async fn migrate(db: &UserDatabase) -> Result<(), crate::Error> { diff --git a/crates/db-user/src/sessions_ops.rs b/crates/db-user/src/sessions_ops.rs index 36d4ad46fd..33e748b139 100644 --- a/crates/db-user/src/sessions_ops.rs +++ b/crates/db-user/src/sessions_ops.rs @@ -110,6 +110,28 @@ impl UserDatabase { let session_id = id.into(); let conn = self.conn()?; + let mut rows = conn + .query( + "SELECT id FROM chat_groups WHERE session_id = ?", + vec![session_id.clone()], + ) + .await?; + + while let Some(row) = rows.next().await? { + let group_id: String = row.get(0)?; + conn.execute( + "DELETE FROM chat_messages WHERE group_id = ?", + vec![group_id], + ) + .await?; + } + + conn.execute( + "DELETE FROM chat_groups WHERE session_id = ?", + vec![session_id.clone()], + ) + .await?; + conn.execute("DELETE FROM sessions WHERE id = ?", vec![session_id]) .await?; diff --git a/package.json b/package.json index 6b24e8360b..04af4f62f2 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,5 @@ "packageManager": "pnpm@10.11.1", "devDependencies": { "turbo": "^2.5.6" - }, - "dependencies": { - "@ai-sdk/react": "^2.0.30" } } diff --git a/packages/utils/src/ai.ts b/packages/utils/src/ai.ts index 67930aab3a..7903d84638 100644 --- a/packages/utils/src/ai.ts +++ b/packages/utils/src/ai.ts @@ -5,25 +5,17 @@ import { getLicenseKey } from "tauri-plugin-keygen-api"; import { commands as connectorCommands } from "@hypr/plugin-connector"; import { fetch as customFetch } from "@hypr/utils"; -export { useChat } from "@ai-sdk/react"; - export { - type ChatRequestOptions, - type ChatTransport, - convertToModelMessages, dynamicTool, experimental_createMCPClient, generateObject, generateText, jsonSchema, - type LanguageModel, type Provider, smoothStream, stepCountIs, streamText, tool, - type UIMessage, - type UIMessageChunk, } from "ai"; export const localProviderName = "hypr-llm-local"; diff --git a/plugins/db/build.rs b/plugins/db/build.rs index 1f0c105c15..ec052cd8aa 100644 --- a/plugins/db/build.rs +++ b/plugins/db/build.rs @@ -47,11 +47,6 @@ const COMMANDS: &[&str] = &[ "create_chat_group", "upsert_chat_message", "delete_chat_messages", - "create_conversation", - "list_conversations", - "create_message_v2", - "list_messages_v2", - "update_message_v2_parts", // tag "upsert_tag", "delete_tag", diff --git a/plugins/db/js/bindings.gen.ts b/plugins/db/js/bindings.gen.ts index 443f458e8e..2edaeb223f 100644 --- a/plugins/db/js/bindings.gen.ts +++ b/plugins/db/js/bindings.gen.ts @@ -147,21 +147,6 @@ async upsertTag(tag: Tag) : Promise { }, async deleteTag(tagId: string) : Promise { return await TAURI_INVOKE("plugin:db|delete_tag", { tagId }); -}, -async createConversation(conversation: ChatConversation) : Promise { - return await TAURI_INVOKE("plugin:db|create_conversation", { conversation }); -}, -async listConversations(sessionId: string) : Promise { - return await TAURI_INVOKE("plugin:db|list_conversations", { sessionId }); -}, -async createMessageV2(message: ChatMessageV2) : Promise { - return await TAURI_INVOKE("plugin:db|create_message_v2", { message }); -}, -async listMessagesV2(conversationId: string) : Promise { - return await TAURI_INVOKE("plugin:db|list_messages_v2", { conversationId }); -}, -async updateMessageV2Parts(id: string, parts: string) : Promise { - return await TAURI_INVOKE("plugin:db|update_message_v2_parts", { id, parts }); } } @@ -176,13 +161,10 @@ async updateMessageV2Parts(id: string, parts: string) : Promise { /** user-defined types **/ export type Calendar = { id: string; tracking_id: string; user_id: string; platform: Platform; name: string; selected: boolean; source: string | null } -export type ChatConversation = { id: string; session_id: string; user_id: string; name: string | null; created_at: string; updated_at: string } export type ChatGroup = { id: string; user_id: string; name: string | null; created_at: string; session_id: string } export type ChatMessage = { id: string; group_id: string; created_at: string; role: ChatMessageRole; content: string; type: ChatMessageType; tool_details: string | null } export type ChatMessageRole = "User" | "Assistant" export type ChatMessageType = "text-delta" | "tool-start" | "tool-result" | "tool-error" -export type ChatMessageV2 = { id: string; conversation_id: string; role: ChatMessageV2Role; parts: string; metadata: string | null; created_at: string; updated_at: string } -export type ChatMessageV2Role = "system" | "user" | "assistant" export type Config = { id: string; user_id: string; general: ConfigGeneral; notification: ConfigNotification; ai: ConfigAI } export type ConfigAI = { api_base: string | null; api_key: string | null; ai_specificity: number | null; redemption_time_ms: number | null } export type ConfigGeneral = { autostart: boolean; display_language: string; spoken_languages?: string[]; jargons?: string[]; telemetry_consent: boolean; save_recordings: boolean | null; selected_template_id: string | null; summary_language?: string } diff --git a/plugins/db/permissions/autogenerated/commands/create_conversation.toml b/plugins/db/permissions/autogenerated/commands/create_conversation.toml deleted file mode 100644 index 72050e8b01..0000000000 --- a/plugins/db/permissions/autogenerated/commands/create_conversation.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-create-conversation" -description = "Enables the create_conversation command without any pre-configured scope." -commands.allow = ["create_conversation"] - -[[permission]] -identifier = "deny-create-conversation" -description = "Denies the create_conversation command without any pre-configured scope." -commands.deny = ["create_conversation"] diff --git a/plugins/db/permissions/autogenerated/commands/create_message_v2.toml b/plugins/db/permissions/autogenerated/commands/create_message_v2.toml deleted file mode 100644 index 984569b693..0000000000 --- a/plugins/db/permissions/autogenerated/commands/create_message_v2.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-create-message-v2" -description = "Enables the create_message_v2 command without any pre-configured scope." -commands.allow = ["create_message_v2"] - -[[permission]] -identifier = "deny-create-message-v2" -description = "Denies the create_message_v2 command without any pre-configured scope." -commands.deny = ["create_message_v2"] diff --git a/plugins/db/permissions/autogenerated/commands/list_conversations.toml b/plugins/db/permissions/autogenerated/commands/list_conversations.toml deleted file mode 100644 index b81f80dde3..0000000000 --- a/plugins/db/permissions/autogenerated/commands/list_conversations.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-list-conversations" -description = "Enables the list_conversations command without any pre-configured scope." -commands.allow = ["list_conversations"] - -[[permission]] -identifier = "deny-list-conversations" -description = "Denies the list_conversations command without any pre-configured scope." -commands.deny = ["list_conversations"] diff --git a/plugins/db/permissions/autogenerated/commands/list_messages_v2.toml b/plugins/db/permissions/autogenerated/commands/list_messages_v2.toml deleted file mode 100644 index 4e6ee3cbbb..0000000000 --- a/plugins/db/permissions/autogenerated/commands/list_messages_v2.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-list-messages-v2" -description = "Enables the list_messages_v2 command without any pre-configured scope." -commands.allow = ["list_messages_v2"] - -[[permission]] -identifier = "deny-list-messages-v2" -description = "Denies the list_messages_v2 command without any pre-configured scope." -commands.deny = ["list_messages_v2"] diff --git a/plugins/db/permissions/autogenerated/commands/update_message_v2_parts.toml b/plugins/db/permissions/autogenerated/commands/update_message_v2_parts.toml deleted file mode 100644 index 4515d85b9d..0000000000 --- a/plugins/db/permissions/autogenerated/commands/update_message_v2_parts.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Automatically generated - DO NOT EDIT! - -"$schema" = "../../schemas/schema.json" - -[[permission]] -identifier = "allow-update-message-v2-parts" -description = "Enables the update_message_v2_parts command without any pre-configured scope." -commands.allow = ["update_message_v2_parts"] - -[[permission]] -identifier = "deny-update-message-v2-parts" -description = "Denies the update_message_v2_parts command without any pre-configured scope." -commands.deny = ["update_message_v2_parts"] diff --git a/plugins/db/permissions/autogenerated/reference.md b/plugins/db/permissions/autogenerated/reference.md index ba9c91077b..aa46cf001c 100644 --- a/plugins/db/permissions/autogenerated/reference.md +++ b/plugins/db/permissions/autogenerated/reference.md @@ -44,11 +44,6 @@ Default permissions for the plugin - `allow-create-chat-group` - `allow-upsert-chat-message` - `allow-delete-chat-messages` -- `allow-list-conversations` -- `allow-create-message-v2` -- `allow-create-conversation` -- `allow-list-messages-v2` -- `allow-update-message-v2-parts` - `allow-upsert-tag` - `allow-delete-tag` - `allow-list-all-tags` @@ -121,58 +116,6 @@ Denies the create_chat_group command without any pre-configured scope. -`db:allow-create-conversation` - - - - -Enables the create_conversation command without any pre-configured scope. - - - - - - - -`db:deny-create-conversation` - - - - -Denies the create_conversation command without any pre-configured scope. - - - - - - - -`db:allow-create-message-v2` - - - - -Enables the create_message_v2 command without any pre-configured scope. - - - - - - - -`db:deny-create-message-v2` - - - - -Denies the create_message_v2 command without any pre-configured scope. - - - - - - - `db:allow-delete-chat-messages` @@ -667,32 +610,6 @@ Denies the list_chat_messages command without any pre-configured scope. -`db:allow-list-conversations` - - - - -Enables the list_conversations command without any pre-configured scope. - - - - - - - -`db:deny-list-conversations` - - - - -Denies the list_conversations command without any pre-configured scope. - - - - - - - `db:allow-list-events` @@ -745,32 +662,6 @@ Denies the list_humans command without any pre-configured scope. -`db:allow-list-messages-v2` - - - - -Enables the list_messages_v2 command without any pre-configured scope. - - - - - - - -`db:deny-list-messages-v2` - - - - -Denies the list_messages_v2 command without any pre-configured scope. - - - - - - - `db:allow-list-organization-members` @@ -1187,32 +1078,6 @@ Denies the unassign_tag_from_session command without any pre-configured scope. -`db:allow-update-message-v2-parts` - - - - -Enables the update_message_v2_parts command without any pre-configured scope. - - - - - - - -`db:deny-update-message-v2-parts` - - - - -Denies the update_message_v2_parts command without any pre-configured scope. - - - - - - - `db:allow-upsert-calendar` diff --git a/plugins/db/permissions/default.toml b/plugins/db/permissions/default.toml index 8f90a89631..8a6cf53d37 100644 --- a/plugins/db/permissions/default.toml +++ b/plugins/db/permissions/default.toml @@ -48,11 +48,6 @@ permissions = [ "allow-create-chat-group", "allow-upsert-chat-message", "allow-delete-chat-messages", - "allow-list-conversations", - "allow-create-message-v2", - "allow-create-conversation", - "allow-list-messages-v2", - "allow-update-message-v2-parts", # tag "allow-upsert-tag", "allow-delete-tag", diff --git a/plugins/db/permissions/schemas/schema.json b/plugins/db/permissions/schemas/schema.json index ddf2dad5e1..dea48f27e8 100644 --- a/plugins/db/permissions/schemas/schema.json +++ b/plugins/db/permissions/schemas/schema.json @@ -318,30 +318,6 @@ "const": "deny-create-chat-group", "markdownDescription": "Denies the create_chat_group command without any pre-configured scope." }, - { - "description": "Enables the create_conversation command without any pre-configured scope.", - "type": "string", - "const": "allow-create-conversation", - "markdownDescription": "Enables the create_conversation command without any pre-configured scope." - }, - { - "description": "Denies the create_conversation command without any pre-configured scope.", - "type": "string", - "const": "deny-create-conversation", - "markdownDescription": "Denies the create_conversation command without any pre-configured scope." - }, - { - "description": "Enables the create_message_v2 command without any pre-configured scope.", - "type": "string", - "const": "allow-create-message-v2", - "markdownDescription": "Enables the create_message_v2 command without any pre-configured scope." - }, - { - "description": "Denies the create_message_v2 command without any pre-configured scope.", - "type": "string", - "const": "deny-create-message-v2", - "markdownDescription": "Denies the create_message_v2 command without any pre-configured scope." - }, { "description": "Enables the delete_chat_messages command without any pre-configured scope.", "type": "string", @@ -570,18 +546,6 @@ "const": "deny-list-chat-messages", "markdownDescription": "Denies the list_chat_messages command without any pre-configured scope." }, - { - "description": "Enables the list_conversations command without any pre-configured scope.", - "type": "string", - "const": "allow-list-conversations", - "markdownDescription": "Enables the list_conversations command without any pre-configured scope." - }, - { - "description": "Denies the list_conversations command without any pre-configured scope.", - "type": "string", - "const": "deny-list-conversations", - "markdownDescription": "Denies the list_conversations command without any pre-configured scope." - }, { "description": "Enables the list_events command without any pre-configured scope.", "type": "string", @@ -606,18 +570,6 @@ "const": "deny-list-humans", "markdownDescription": "Denies the list_humans command without any pre-configured scope." }, - { - "description": "Enables the list_messages_v2 command without any pre-configured scope.", - "type": "string", - "const": "allow-list-messages-v2", - "markdownDescription": "Enables the list_messages_v2 command without any pre-configured scope." - }, - { - "description": "Denies the list_messages_v2 command without any pre-configured scope.", - "type": "string", - "const": "deny-list-messages-v2", - "markdownDescription": "Denies the list_messages_v2 command without any pre-configured scope." - }, { "description": "Enables the list_organization_members command without any pre-configured scope.", "type": "string", @@ -810,18 +762,6 @@ "const": "deny-unassign-tag-from-session", "markdownDescription": "Denies the unassign_tag_from_session command without any pre-configured scope." }, - { - "description": "Enables the update_message_v2_parts command without any pre-configured scope.", - "type": "string", - "const": "allow-update-message-v2-parts", - "markdownDescription": "Enables the update_message_v2_parts command without any pre-configured scope." - }, - { - "description": "Denies the update_message_v2_parts command without any pre-configured scope.", - "type": "string", - "const": "deny-update-message-v2-parts", - "markdownDescription": "Denies the update_message_v2_parts command without any pre-configured scope." - }, { "description": "Enables the upsert_calendar command without any pre-configured scope.", "type": "string", @@ -919,10 +859,10 @@ "markdownDescription": "Denies the visit_session command without any pre-configured scope." }, { - "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-onboarding-session-id`\n- `allow-thank-you-session-id`\n- `allow-upsert-session`\n- `allow-list-sessions`\n- `allow-get-session`\n- `allow-visit-session`\n- `allow-delete-session`\n- `allow-set-session-event`\n- `allow-session-add-participant`\n- `allow-session-remove-participant`\n- `allow-session-list-participants`\n- `allow-session-get-event`\n- `allow-get-words`\n- `allow-get-words-onboarding`\n- `allow-get-calendar`\n- `allow-list-calendars`\n- `allow-upsert-calendar`\n- `allow-toggle-calendar-selected`\n- `allow-list-templates`\n- `allow-upsert-template`\n- `allow-delete-template`\n- `allow-get-event`\n- `allow-list-events`\n- `allow-get-config`\n- `allow-set-config`\n- `allow-get-human`\n- `allow-delete-human`\n- `allow-upsert-human`\n- `allow-list-humans`\n- `allow-get-organization`\n- `allow-get-organization-by-user-id`\n- `allow-list-organizations`\n- `allow-list-organization-members`\n- `allow-upsert-organization`\n- `allow-delete-organization`\n- `allow-list-chat-groups`\n- `allow-list-chat-messages`\n- `allow-create-chat-group`\n- `allow-upsert-chat-message`\n- `allow-delete-chat-messages`\n- `allow-list-conversations`\n- `allow-create-message-v2`\n- `allow-create-conversation`\n- `allow-list-messages-v2`\n- `allow-update-message-v2-parts`\n- `allow-upsert-tag`\n- `allow-delete-tag`\n- `allow-list-all-tags`\n- `allow-list-session-tags`\n- `allow-assign-tag-to-session`\n- `allow-unassign-tag-from-session`\n- `allow-session-list-deleted-participant-ids`", + "description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-onboarding-session-id`\n- `allow-thank-you-session-id`\n- `allow-upsert-session`\n- `allow-list-sessions`\n- `allow-get-session`\n- `allow-visit-session`\n- `allow-delete-session`\n- `allow-set-session-event`\n- `allow-session-add-participant`\n- `allow-session-remove-participant`\n- `allow-session-list-participants`\n- `allow-session-get-event`\n- `allow-get-words`\n- `allow-get-words-onboarding`\n- `allow-get-calendar`\n- `allow-list-calendars`\n- `allow-upsert-calendar`\n- `allow-toggle-calendar-selected`\n- `allow-list-templates`\n- `allow-upsert-template`\n- `allow-delete-template`\n- `allow-get-event`\n- `allow-list-events`\n- `allow-get-config`\n- `allow-set-config`\n- `allow-get-human`\n- `allow-delete-human`\n- `allow-upsert-human`\n- `allow-list-humans`\n- `allow-get-organization`\n- `allow-get-organization-by-user-id`\n- `allow-list-organizations`\n- `allow-list-organization-members`\n- `allow-upsert-organization`\n- `allow-delete-organization`\n- `allow-list-chat-groups`\n- `allow-list-chat-messages`\n- `allow-create-chat-group`\n- `allow-upsert-chat-message`\n- `allow-delete-chat-messages`\n- `allow-upsert-tag`\n- `allow-delete-tag`\n- `allow-list-all-tags`\n- `allow-list-session-tags`\n- `allow-assign-tag-to-session`\n- `allow-unassign-tag-from-session`\n- `allow-session-list-deleted-participant-ids`", "type": "string", "const": "default", - "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-onboarding-session-id`\n- `allow-thank-you-session-id`\n- `allow-upsert-session`\n- `allow-list-sessions`\n- `allow-get-session`\n- `allow-visit-session`\n- `allow-delete-session`\n- `allow-set-session-event`\n- `allow-session-add-participant`\n- `allow-session-remove-participant`\n- `allow-session-list-participants`\n- `allow-session-get-event`\n- `allow-get-words`\n- `allow-get-words-onboarding`\n- `allow-get-calendar`\n- `allow-list-calendars`\n- `allow-upsert-calendar`\n- `allow-toggle-calendar-selected`\n- `allow-list-templates`\n- `allow-upsert-template`\n- `allow-delete-template`\n- `allow-get-event`\n- `allow-list-events`\n- `allow-get-config`\n- `allow-set-config`\n- `allow-get-human`\n- `allow-delete-human`\n- `allow-upsert-human`\n- `allow-list-humans`\n- `allow-get-organization`\n- `allow-get-organization-by-user-id`\n- `allow-list-organizations`\n- `allow-list-organization-members`\n- `allow-upsert-organization`\n- `allow-delete-organization`\n- `allow-list-chat-groups`\n- `allow-list-chat-messages`\n- `allow-create-chat-group`\n- `allow-upsert-chat-message`\n- `allow-delete-chat-messages`\n- `allow-list-conversations`\n- `allow-create-message-v2`\n- `allow-create-conversation`\n- `allow-list-messages-v2`\n- `allow-update-message-v2-parts`\n- `allow-upsert-tag`\n- `allow-delete-tag`\n- `allow-list-all-tags`\n- `allow-list-session-tags`\n- `allow-assign-tag-to-session`\n- `allow-unassign-tag-from-session`\n- `allow-session-list-deleted-participant-ids`" + "markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-onboarding-session-id`\n- `allow-thank-you-session-id`\n- `allow-upsert-session`\n- `allow-list-sessions`\n- `allow-get-session`\n- `allow-visit-session`\n- `allow-delete-session`\n- `allow-set-session-event`\n- `allow-session-add-participant`\n- `allow-session-remove-participant`\n- `allow-session-list-participants`\n- `allow-session-get-event`\n- `allow-get-words`\n- `allow-get-words-onboarding`\n- `allow-get-calendar`\n- `allow-list-calendars`\n- `allow-upsert-calendar`\n- `allow-toggle-calendar-selected`\n- `allow-list-templates`\n- `allow-upsert-template`\n- `allow-delete-template`\n- `allow-get-event`\n- `allow-list-events`\n- `allow-get-config`\n- `allow-set-config`\n- `allow-get-human`\n- `allow-delete-human`\n- `allow-upsert-human`\n- `allow-list-humans`\n- `allow-get-organization`\n- `allow-get-organization-by-user-id`\n- `allow-list-organizations`\n- `allow-list-organization-members`\n- `allow-upsert-organization`\n- `allow-delete-organization`\n- `allow-list-chat-groups`\n- `allow-list-chat-messages`\n- `allow-create-chat-group`\n- `allow-upsert-chat-message`\n- `allow-delete-chat-messages`\n- `allow-upsert-tag`\n- `allow-delete-tag`\n- `allow-list-all-tags`\n- `allow-list-session-tags`\n- `allow-assign-tag-to-session`\n- `allow-unassign-tag-from-session`\n- `allow-session-list-deleted-participant-ids`" } ] } diff --git a/plugins/db/src/commands/chats_v2.rs b/plugins/db/src/commands/chats_v2.rs deleted file mode 100644 index 3f5e3aecf3..0000000000 --- a/plugins/db/src/commands/chats_v2.rs +++ /dev/null @@ -1,102 +0,0 @@ -use hypr_db_user::{ChatConversation, ChatMessageV2}; - -#[tauri::command] -#[specta::specta] -#[tracing::instrument(skip(state))] -pub async fn create_conversation( - state: tauri::State<'_, crate::ManagedState>, - conversation: ChatConversation, -) -> Result { - let guard = state.lock().await; - - let db = guard - .db - .as_ref() - .ok_or(crate::Error::NoneDatabase) - .map_err(|e| e.to_string())?; - - db.create_conversation(conversation) - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -#[tracing::instrument(skip(state))] -pub async fn list_conversations( - state: tauri::State<'_, crate::ManagedState>, - session_id: String, -) -> Result, String> { - let guard = state.lock().await; - - let db = guard - .db - .as_ref() - .ok_or(crate::Error::NoneDatabase) - .map_err(|e| e.to_string())?; - - db.list_conversations(session_id) - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -#[tracing::instrument(skip(state))] -pub async fn create_message_v2( - state: tauri::State<'_, crate::ManagedState>, - message: ChatMessageV2, -) -> Result { - let guard = state.lock().await; - - let db = guard - .db - .as_ref() - .ok_or(crate::Error::NoneDatabase) - .map_err(|e| e.to_string())?; - - db.create_message_v2(message) - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -#[tracing::instrument(skip(state))] -pub async fn list_messages_v2( - state: tauri::State<'_, crate::ManagedState>, - conversation_id: String, -) -> Result, String> { - let guard = state.lock().await; - - let db = guard - .db - .as_ref() - .ok_or(crate::Error::NoneDatabase) - .map_err(|e| e.to_string())?; - - db.list_messages_v2(conversation_id) - .await - .map_err(|e| e.to_string()) -} - -#[tauri::command] -#[specta::specta] -#[tracing::instrument(skip(state))] -pub async fn update_message_v2_parts( - state: tauri::State<'_, crate::ManagedState>, - id: String, - parts: String, -) -> Result<(), String> { - let guard = state.lock().await; - - let db = guard - .db - .as_ref() - .ok_or(crate::Error::NoneDatabase) - .map_err(|e| e.to_string())?; - - db.update_message_v2_parts(id, parts) - .await - .map_err(|e| e.to_string()) -} diff --git a/plugins/db/src/commands/mod.rs b/plugins/db/src/commands/mod.rs index 57141d09c3..4002f26347 100644 --- a/plugins/db/src/commands/mod.rs +++ b/plugins/db/src/commands/mod.rs @@ -1,6 +1,5 @@ pub mod calendars; pub mod chats; -pub mod chats_v2; pub mod configs; pub mod events; pub mod humans; diff --git a/plugins/db/src/lib.rs b/plugins/db/src/lib.rs index c05f7eb5a6..86a1c8b012 100644 --- a/plugins/db/src/lib.rs +++ b/plugins/db/src/lib.rs @@ -70,11 +70,6 @@ fn make_specta_builder() -> tauri_specta::Builder { commands::tags::unassign_tag_from_session, commands::tags::upsert_tag, commands::tags::delete_tag, - commands::chats_v2::create_conversation, - commands::chats_v2::list_conversations, - commands::chats_v2::create_message_v2, - commands::chats_v2::list_messages_v2, - commands::chats_v2::update_message_v2_parts, ]) .error_handling(tauri_specta::ErrorHandlingMode::Throw) } diff --git a/plugins/local-llm/js/bindings.gen.ts b/plugins/local-llm/js/bindings.gen.ts index feb9ff1da0..36321d1563 100644 --- a/plugins/local-llm/js/bindings.gen.ts +++ b/plugins/local-llm/js/bindings.gen.ts @@ -57,11 +57,6 @@ async setCurrentModelSelection(model: ModelSelection) : Promise { /** user-defined events **/ -export const events = __makeEvents__<{ -llmEvent: LLMEvent -}>({ -llmEvent: "plugin:local-llm:llm-event" -}) /** user-defined constants **/ @@ -70,7 +65,6 @@ llmEvent: "plugin:local-llm:llm-event" /** user-defined types **/ export type CustomModelInfo = { path: string; name: string } -export type LLMEvent = { progress: number } export type ModelInfo = { key: SupportedModel; name: string; description: string; size_bytes: number } export type ModelSelection = { type: "Predefined"; content: { key: SupportedModel } } | { type: "Custom"; content: { path: string } } export type SupportedModel = "Llama3p2_3bQ4" | "Gemma3_4bQ4" | "HyprLLM" diff --git a/plugins/local-llm/src/events.rs b/plugins/local-llm/src/events.rs index a28e7a4def..e6e8f9a3b8 100644 --- a/plugins/local-llm/src/events.rs +++ b/plugins/local-llm/src/events.rs @@ -30,9 +30,3 @@ pub fn on_event(app: &tauri::AppHandle, event: &tauri::Run _ => {} } } - -#[derive(serde::Serialize, Clone, specta::Type, tauri_specta::Event)] -pub enum LLMEvent { - #[serde(rename = "progress")] - Progress(f64), -} diff --git a/plugins/local-llm/src/ext.rs b/plugins/local-llm/src/ext.rs index 26c274e7d6..32c7782581 100644 --- a/plugins/local-llm/src/ext.rs +++ b/plugins/local-llm/src/ext.rs @@ -2,7 +2,6 @@ use std::{future::Future, path::PathBuf}; use tauri::{ipc::Channel, Manager, Runtime}; use tauri_plugin_store2::StorePluginExt; -use tauri_specta::Event; use hypr_download_interface::DownloadProgress; use hypr_file::download_file_parallel; @@ -191,12 +190,7 @@ impl> LocalLlmPluginExt for T { let model_manager = crate::ModelManager::new(model_path); let state = self.state::(); - let handle = self.app_handle().clone(); - let emitter = move |event: crate::LLMEvent| { - let _ = event.emit(&handle); - }; - - let server_state = crate::ServerState::new(emitter, model_manager); + let server_state = crate::ServerState::new(model_manager); let server = crate::server::run_server(server_state).await?; tokio::time::sleep(std::time::Duration::from_millis(100)).await; diff --git a/plugins/local-llm/src/lib.rs b/plugins/local-llm/src/lib.rs index 1665ad0c73..f84dcdfb75 100644 --- a/plugins/local-llm/src/lib.rs +++ b/plugins/local-llm/src/lib.rs @@ -40,7 +40,6 @@ pub struct State { fn make_specta_builder() -> tauri_specta::Builder { tauri_specta::Builder::::new() .plugin_name(PLUGIN_NAME) - .events(tauri_specta::collect_events![events::LLMEvent]) .commands(tauri_specta::collect_commands![ commands::models_dir::, commands::list_supported_model, @@ -66,9 +65,7 @@ pub fn init() -> tauri::plugin::TauriPlugin { tauri::plugin::Builder::new(PLUGIN_NAME) .invoke_handler(specta_builder.invoke_handler()) - .setup(move |app, _api| { - specta_builder.mount_events(app); - + .setup(|app, _api| { let data_dir = app.path().app_data_dir().unwrap(); let models_dir = app.models_dir(); diff --git a/plugins/local-llm/src/server.rs b/plugins/local-llm/src/server.rs index 841c76baf4..33218a68e4 100644 --- a/plugins/local-llm/src/server.rs +++ b/plugins/local-llm/src/server.rs @@ -3,7 +3,7 @@ use std::pin::Pin; use std::sync::{Arc, Mutex}; use async_openai::types::{ - ChatChoice, ChatChoiceStream, ChatCompletionMessageToolCallChunk, + ChatChoice, ChatChoiceStream, ChatCompletionMessageToolCallChunk, ChatCompletionRequestMessage, ChatCompletionResponseMessage, ChatCompletionStreamResponseDelta, ChatCompletionToolType, CreateChatCompletionRequest, CreateChatCompletionResponse, CreateChatCompletionStreamResponse, FunctionCallStream, Role, @@ -22,7 +22,7 @@ use tokio::sync::mpsc; use tokio_util::sync::CancellationToken; use tower_http::cors::{self, CorsLayer}; -use crate::{events::LLMEvent, ModelManager}; +use crate::ModelManager; #[derive(Clone)] pub struct ServerHandle { @@ -38,18 +38,13 @@ impl ServerHandle { #[derive(Clone)] pub struct ServerState { - pub emitter: Arc, pub model_manager: ModelManager, pub cancellation_tokens: Arc>>, } impl ServerState { - pub fn new( - emitter: impl Fn(LLMEvent) + 'static + Send + Sync, - model_manager: ModelManager, - ) -> Self { + pub fn new(model_manager: ModelManager) -> Self { Self { - emitter: Arc::new(emitter), model_manager, cancellation_tokens: Arc::new(Mutex::new(Vec::new())), } @@ -127,12 +122,51 @@ async fn chat_completions( AxumState(state): AxumState, Json(request): Json, ) -> Result { + // TODO + let request = { + let mut r = request.clone(); + r.messages = r + .messages + .iter() + .filter_map(|m| match m { + ChatCompletionRequestMessage::Assistant(am) => { + let mut cloned_am = am.clone(); + let filtered_tool_calls = cloned_am.tool_calls.as_ref().map(|tc| { + tc.iter() + .filter(|c| c.function.name != "progress_update") + .cloned() + .collect::>() + }); + + let new_tool_calls = match filtered_tool_calls { + Some(calls) if calls.is_empty() => None, + Some(calls) => Some(calls), + None => None, + }; + + cloned_am.tool_calls = new_tool_calls; + Some(ChatCompletionRequestMessage::Assistant(cloned_am)) + } + ChatCompletionRequestMessage::Tool(tm) => { + if tm.tool_call_id == "progress_update" { + None + } else { + Some(m.clone()) + } + } + _ => Some(m.clone()), + }) + .collect(); + + r + }; + let response = if request.model == "mock-onboarding" { let provider = MockProvider::default(); tracing::info!("using_mock_provider"); provider.chat_completions(request, &state).await } else { - let provider = LocalProvider::new(state.emitter.clone(), state.model_manager.clone()); + let provider = LocalProvider::new(state.model_manager.clone()); tracing::info!("using_local_provider"); provider.chat_completions(request, &state).await }; @@ -143,16 +177,12 @@ async fn chat_completions( } struct LocalProvider { - emitter: Arc, model_manager: ModelManager, } impl LocalProvider { - fn new(emitter: Arc, model_manager: ModelManager) -> Self { - Self { - emitter, - model_manager, - } + fn new(model_manager: ModelManager) -> Self { + Self { model_manager } } async fn chat_completions( @@ -163,19 +193,11 @@ impl LocalProvider { let model = self.model_manager.get_model().await?; tracing::info!("loaded_model: {:?}", model.name); - let emitter = self.emitter.clone(); - - build_chat_completion_response( - &request, - || { - let (stream, token) = Self::build_stream(&model, &request)?; - state.register_token(token.clone()); - Ok(stream) - }, - move |v| { - emitter(LLMEvent::Progress(v)); - }, - ) + build_chat_completion_response(&request, || { + let (stream, token) = Self::build_stream(&model, &request)?; + state.register_token(token.clone()); + Ok(stream) + }) .await } @@ -215,7 +237,17 @@ impl LocalProvider { } }; - let tools = request.tools.clone(); + let tools = request + .tools + .as_ref() + .map(|tools| { + tools + .iter() + .filter(|tool| tool.function.name != "progress_update") + .cloned() + .collect::>() + }) + .filter(|tools| !tools.is_empty()); let request = hypr_llama::LlamaRequest { messages, @@ -267,15 +299,11 @@ impl MockProvider { state: &ServerState, ) -> Result { let content = crate::ONBOARDING_ENHANCED_MD; - build_chat_completion_response( - &request, - || { - let (stream, token) = Self::build_stream(&content); - state.register_token(token.clone()); - Ok(stream) - }, - |_v| {}, - ) + build_chat_completion_response(&request, || { + let (stream, token) = Self::build_stream(&content); + state.register_token(token.clone()); + Ok(stream) + }) .await } @@ -320,7 +348,6 @@ async fn build_chat_completion_response( Pin + Send>>, crate::Error, >, - progress_fn: impl Fn(f64) + Send + Sync + 'static, ) -> Result { let id = uuid::Uuid::new_v4().to_string(); let created = std::time::SystemTime::now() @@ -481,9 +508,34 @@ async fn build_chat_completion_response( })) } }, - StreamEvent::Progress(v) => { - progress_fn(v); - None + StreamEvent::Progress(progress) => { + Some(Ok(CreateChatCompletionStreamResponse { + choices: vec![ChatChoiceStream { + index: 0, + delta: ChatCompletionStreamResponseDelta { + tool_calls: Some(vec![ + ChatCompletionMessageToolCallChunk { + index: index.try_into().unwrap_or(0), + id: Some("progress_update".to_string()), + r#type: Some(ChatCompletionToolType::Function), + function: Some(FunctionCallStream { + name: Some("progress_update".to_string()), + arguments: Some( + serde_json::to_string(&serde_json::json!({ + "progress": progress + })) + .unwrap(), + ), + }), + }, + ]), + ..delta_template + }, + finish_reason: None, + logprobs: None, + }], + ..response_template + })) } } }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1ba285c73f..b267490e4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,10 +7,6 @@ settings: importers: .: - dependencies: - '@ai-sdk/react': - specifier: ^2.0.30 - version: 2.0.37(react@18.3.1)(zod@4.1.5) devDependencies: turbo: specifier: ^2.5.6 @@ -29,7 +25,7 @@ importers: version: 0.13.8(typescript@5.9.2)(zod@4.1.5) better-auth: specifier: ^1.3.8 - version: 1.3.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.3.8(react-dom@18.3.1(react@19.1.1))(react@19.1.1) hono: specifier: ^4.9.6 version: 4.9.6 @@ -54,25 +50,25 @@ importers: dependencies: '@ai-sdk/openai': specifier: ^2.0.24 - version: 2.0.27(zod@4.1.5) + version: 2.0.24(zod@4.1.5) '@cerbos/grpc': specifier: ^0.22.1 version: 0.22.1 '@libsql/client': specifier: ^0.15.14 - version: 0.15.15 + version: 0.15.14 '@mantine/core': specifier: ^8.2.8 - version: 8.3.0(@mantine/hooks@8.3.0(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 8.2.8(@mantine/hooks@8.2.8(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mantine/form': specifier: ^8.2.8 - version: 8.3.0(react@18.3.1) + version: 8.2.8(react@18.3.1) '@mantine/hooks': specifier: ^8.2.8 - version: 8.3.0(react@18.3.1) + version: 8.2.8(react@18.3.1) '@mantine/notifications': specifier: ^8.2.8 - version: 8.3.0(@mantine/core@8.3.0(@mantine/hooks@8.3.0(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 8.2.8(@mantine/core@8.2.8(@mantine/hooks@8.2.8(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.2.8(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tabler/icons-react': specifier: ^3.34.1 version: 3.34.1(react@18.3.1) @@ -81,19 +77,19 @@ importers: version: 5.87.1(react@18.3.1) '@tanstack/react-router': specifier: ^1.131.35 - version: 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-router-with-query': specifier: ^1.130.17 - version: 1.130.17(@tanstack/react-query@5.87.1(react@18.3.1))(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tanstack/router-core@1.131.36)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.130.17(@tanstack/react-query@5.87.1(react@18.3.1))(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tanstack/router-core@1.131.35)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-start': specifier: ^1.131.35 - version: 1.131.36(@libsql/client@0.15.15)(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)))(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + version: 1.131.35(@libsql/client@0.15.14)(@netlify/blobs@9.1.2)(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.7.0(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)))(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) ai: specifier: ^5.0.34 - version: 5.0.37(zod@4.1.5) + version: 5.0.34(zod@4.1.5) better-auth: specifier: ^1.3.8 - version: 1.3.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.3.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -102,22 +98,22 @@ importers: version: 0.31.4 drizzle-orm: specifier: ^0.44.5 - version: 0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5) + version: 0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5) drizzle-zod: specifier: ^0.8.3 - version: 0.8.3(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(zod@4.1.5) + version: 0.8.3(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(zod@4.1.5) lucide-react: specifier: ^0.525.0 version: 0.525.0(react@18.3.1) mantine-form-zod-resolver: specifier: ^1.3.0 - version: 1.3.0(@mantine/form@8.3.0(react@18.3.1))(zod@4.1.5) + version: 1.3.0(@mantine/form@8.2.8(react@18.3.1))(zod@4.1.5) openid-client: specifier: ^6.7.1 version: 6.7.1 posthog-js: specifier: ^1.261.7 - version: 1.261.8 + version: 1.261.7(@rrweb/types@2.0.0-alpha.17) react: specifier: ^18.3.1 version: 18.3.1 @@ -126,7 +122,7 @@ importers: version: 18.3.1(react@18.3.1) tailwind-preset-mantine: specifier: ^2.1.0 - version: 2.1.0(@mantine/core@8.3.0(@mantine/hooks@8.3.0(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(tailwindcss@4.1.13) + version: 2.1.0(@mantine/core@8.2.8(@mantine/hooks@8.2.8(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(tailwindcss@4.1.13) zod: specifier: ^4.1.5 version: 4.1.5 @@ -145,7 +141,7 @@ importers: version: 18.3.7(@types/react@18.3.24) '@vitejs/plugin-react': specifier: ^4.7.0 - version: 4.7.0(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + version: 4.7.0(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) autoprefixer: specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) @@ -169,10 +165,10 @@ importers: version: 5.9.2 vite: specifier: ^6.3.5 - version: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + version: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.2)(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + version: 5.1.4(typescript@5.9.2)(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) apps/desktop: dependencies: @@ -256,7 +252,7 @@ importers: version: 5.4.1(@lingui/babel-plugin-lingui-macro@5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2))(babel-plugin-macros@3.1.0)(react@18.3.1) '@lobehub/icons': specifier: ^2.31.0 - version: 2.32.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.31.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modelcontextprotocol/sdk': specifier: ^1.17.5 version: 1.17.5 @@ -298,16 +294,16 @@ importers: version: 5.87.1(react@18.3.1) '@tanstack/react-query-devtools': specifier: ^5.87.1 - version: 5.87.3(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1) + version: 5.87.1(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1) '@tanstack/react-router': specifier: ^1.131.35 - version: 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-router-devtools': specifier: ^1.131.35 - version: 1.131.36(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tanstack/router-core@1.131.36)(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(solid-js@1.9.9)(tiny-invariant@1.3.3) + version: 1.131.35(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tanstack/router-core@1.131.35)(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(solid-js@1.9.7)(tiny-invariant@1.3.3) '@tanstack/zod-adapter': specifier: ^1.131.35 - version: 1.131.36(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(zod@4.1.5) + version: 1.131.35(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(zod@4.1.5) '@tauri-apps/api': specifier: ^2.8.0 version: 2.8.0 @@ -349,7 +345,7 @@ importers: version: 4.17.12 beautiful-react-hooks: specifier: ^5.0.3 - version: 5.0.3(react-dom@18.3.1(react@18.3.1))(react-router-dom@7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rxjs@7.8.2) + version: 5.0.3(react-dom@18.3.1(react@18.3.1))(react-router-dom@7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rxjs@7.8.2) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -382,7 +378,7 @@ importers: version: 0.525.0(react@18.3.1) motion: specifier: ^11.18.2 - version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.18.2(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) mutative: specifier: ^1.2.0 version: 1.2.0 @@ -409,7 +405,7 @@ importers: version: 3.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-scan: specifier: ^0.4.3 - version: 0.4.3(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react-router-dom@7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router@7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.50.1) + version: 0.4.3(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react-router-dom@7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router@7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.50.0) remixicon: specifier: ^4.6.0 version: 4.6.0 @@ -446,13 +442,13 @@ importers: version: 5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2) '@lingui/vite-plugin': specifier: ^5.4.1 - version: 5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2)(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) + version: 5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2)(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) '@mux/mux-player': specifier: ^3.5.3 version: 3.5.3(react@18.3.1) '@tanstack/router-plugin': specifier: ^1.131.35 - version: 1.131.36(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) + version: 1.131.35(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) '@tauri-apps/cli': specifier: ^2.8.4 version: 2.8.4 @@ -479,7 +475,7 @@ importers: version: 1.3.5 '@vitejs/plugin-react': specifier: ^4.7.0 - version: 4.7.0(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) + version: 4.7.0(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) '@wdio/cli': specifier: ^8.46.0 version: 8.46.0 @@ -518,22 +514,22 @@ importers: version: 8.5.6 tailwindcss: specifier: ^3.4.17 - version: 3.4.17 + version: 3.4.17(ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.9.2)) typescript: specifier: ^5.9.2 version: 5.9.2 typescript-eslint: specifier: ^8.42.0 - version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) vite: specifier: ^5.4.19 - version: 5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + version: 5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) vite-multiple-assets: specifier: ^2.2.5 - version: 2.2.5(mime-types@3.0.1)(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) + version: 2.2.5(mime-types@3.0.1)(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(jsdom@26.1.0)(lightningcss@1.30.1)(msw@2.10.4(@types/node@22.18.1)(typescript@5.9.2))(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) apps/pro: dependencies: @@ -585,7 +581,7 @@ importers: version: 0.8.4 '@tanstack/react-query': specifier: ^5.87.1 - version: 5.87.1(react@18.3.1) + version: 5.87.1(react@19.1.1) devDependencies: '@hey-api/openapi-ts': specifier: ^0.78.3 @@ -613,7 +609,7 @@ importers: version: 5.87.1(react@18.3.1) '@tanstack/react-router': specifier: ^1.131.35 - version: 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tiptap/core': specifier: ^3.4.1 version: 3.4.1(@tiptap/pm@3.4.1) @@ -713,7 +709,7 @@ importers: version: 5.0.5 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(jsdom@26.1.0)(lightningcss@1.30.1)(msw@2.10.4(@types/node@22.18.1)(typescript@5.9.2))(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) packages/ui: dependencies: @@ -788,7 +784,7 @@ importers: version: 0.525.0(react@18.3.1) motion: specifier: ^12.23.12 - version: 12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -840,7 +836,7 @@ importers: version: 2.6.0 tailwindcss: specifier: ^3.4.17 - version: 3.4.17 + version: 3.4.17(ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.6.3)) typescript: specifier: ~5.6.3 version: 5.6.3 @@ -870,7 +866,7 @@ importers: version: link:../../plugins/windows '@lingui/core': specifier: ^5.4.1 - version: 5.4.1(@lingui/babel-plugin-lingui-macro@5.4.1(babel-plugin-macros@3.1.0))(babel-plugin-macros@3.1.0) + version: 5.4.1(@lingui/babel-plugin-lingui-macro@5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2))(babel-plugin-macros@3.1.0) '@tauri-apps/api': specifier: ^2.8.0 version: 2.8.0 @@ -879,7 +875,7 @@ importers: version: 2.5.2 ai: specifier: ^5.0.34 - version: 5.0.37(zod@4.1.5) + version: 5.0.34(zod@4.1.5) date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -904,7 +900,7 @@ importers: version: 18.3.24 vitest: specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(jsdom@26.1.0)(lightningcss@1.30.1)(msw@2.10.4(@types/node@22.18.1)(typescript@5.9.2))(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) plugins/analytics: dependencies: @@ -1055,8 +1051,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4 - '@ai-sdk/openai@2.0.27': - resolution: {integrity: sha512-5fUFBlE9qGFgezVIVkzQk87qZYkxsn5PsedtCFPoGxHK6c2QVYHuD1UcrVIKt0elr043Vx17Xo/gS5oJAR5YEQ==} + '@ai-sdk/openai@2.0.24': + resolution: {integrity: sha512-8fPFvlb6PpDjy6JtJBP3Hqs4THKFNYOw6+j7nG7iJivNp+uvHlrHwnU6wQgMAesxEDjZRmVB6ntXWxGPCbBeJw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4 @@ -1071,16 +1067,6 @@ packages: resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} engines: {node: '>=18'} - '@ai-sdk/react@2.0.37': - resolution: {integrity: sha512-1VgtKUuGUPJf1UqjPgipox+ZKdVAYmal8tki3cgC9nByf7vP5J+RARRPaFUHBd+frOOeYPOT2LvSqu0EejBEMw==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.25.76 || ^4 - peerDependenciesMeta: - zod: - optional: true - '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -1125,6 +1111,9 @@ packages: '@antfu/utils@9.2.0': resolution: {integrity: sha512-Oq1d9BGZakE/FyoEtcNeSwM7MpDO2vUBi11RWBZXf75zPsbUVWmUs03EqkRFrcgbXyKTas0BdZWC1wcuSoqSAw==} + '@asamuzakjp/css-color@3.2.0': + resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -1297,6 +1286,15 @@ packages: '@bufbuild/protobuf@2.7.0': resolution: {integrity: sha512-qn6tAIZEw5i/wiESBF4nQxZkl86aY4KoO0IkUa2Lh+rya64oTOdJQFlZuMwI1Qz9VBJQrQC4QlSA2DNek5gCOA==} + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} + + '@bundled-es-modules/statuses@1.0.1': + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + + '@bundled-es-modules/tough-cookie@0.1.6': + resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@cacheable/memoize@1.1.1': resolution: {integrity: sha512-/O7iqUCOrT7tUV5Ic1Pp5YRuyXbcznFpq/nqA+Ep5v8Ops4qy+kOEnigsTdTRnNEX1+WkOXTRvkMrqR1+rL+0A==} @@ -1339,6 +1337,38 @@ packages: resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} engines: {node: '>=18.0.0'} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + '@date-fns/tz@1.4.1': resolution: {integrity: sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==} @@ -1397,6 +1427,12 @@ packages: '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + '@emotion/is-prop-valid@0.8.8': + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + + '@emotion/memoize@0.7.4': + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} @@ -1866,8 +1902,8 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@eslint-community/eslint-utils@4.8.0': + resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -1904,6 +1940,9 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/busboy@3.2.0': + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + '@floating-ui/core@0.7.3': resolution: {integrity: sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==} @@ -1928,6 +1967,12 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' + '@floating-ui/react@0.26.28': + resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + '@floating-ui/react@0.27.16': resolution: {integrity: sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==} peerDependencies: @@ -2018,6 +2063,37 @@ packages: '@iconify/utils@3.0.1': resolution: {integrity: sha512-A78CUEnFGX8I/WlILxJCuIJXloL0j/OJ9PSchPAfCargEIKmUBWvvEMmKWB5oONwiUqlNt+5eRufdkLxeHIWYw==} + '@inquirer/confirm@5.1.16': + resolution: {integrity: sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.2.0': + resolution: {integrity: sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.13': + resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.8': + resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@ioredis/commands@1.3.1': resolution: {integrity: sha512-bYtU8avhGIcje3IhvF9aSjsa5URMZBHnwKtOvXsT4sfYy9gppW11gLPT/9oNqlJZD47yPKveQFTAFWpHjKvUoQ==} @@ -2068,6 +2144,9 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} @@ -2084,11 +2163,11 @@ packages: '@levischuck/tiny-cbor@0.2.11': resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==} - '@libsql/client@0.15.15': - resolution: {integrity: sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==} + '@libsql/client@0.15.14': + resolution: {integrity: sha512-oXeFYcSyAsYWvpWVmynrwNwb+NHNHtMfSIVdfQTF1B9RsgDXQE5YCDP3SS0i1FA8nuLWy2trFDVwP1b2LNdNPQ==} - '@libsql/core@0.15.15': - resolution: {integrity: sha512-C88Z6UKl+OyuKKPwz224riz02ih/zHYI3Ho/LAcVOgjsunIRZoBw7fjRfaH9oPMmSNeQfhGklSG2il1URoOIsA==} + '@libsql/core@0.15.14': + resolution: {integrity: sha512-b2eVQma78Ss+edIIFi7LnhhyUy5hAJjYvrSAD5RFdO/YKP2rEvNAT1pIn2Li7NrqcsMmoEQWlpUWH4fWMdXtpQ==} '@libsql/darwin-arm64@0.5.22': resolution: {integrity: sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==} @@ -2226,8 +2305,8 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 - '@lobehub/icons@2.32.0': - resolution: {integrity: sha512-lVNs0g2Xa8sKYh4Bldf8to8sK47t5wN7Ijtqt619cCfkvRFZ8i1Y4QlrLRDKGIci03SU3Wtqka/By57esOsXkw==} + '@lobehub/icons@2.31.0': + resolution: {integrity: sha512-P7cYBdi3vPAr7f/kk1xYRiobCMGQHhipslYbdEXOu/LbLRWChcuGpjPehci10pe58byD9Pxftq1f20/7c8tZYA==} peerDependencies: antd: ^5.23.0 react: ^19.0.0 @@ -2241,33 +2320,33 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 - '@mantine/core@8.3.0': - resolution: {integrity: sha512-WDKnEMkYYXrovqwKl3jHNqXWZkKS349/Btbvynldw0zierm0dJqYXNlLdPhjg9CkmTM3FFDg6MjYwlsHL8K8VQ==} + '@mantine/core@8.2.8': + resolution: {integrity: sha512-dybAXrlQ+QiIhpnVCkdH6P4Sjm9I9RymYXfDp97oj9KfGRMEJGLDdPAwp/2GhXe7UdDkzqD48JCkbfRWF2Q+qA==} peerDependencies: - '@mantine/hooks': 8.3.0 + '@mantine/hooks': 8.2.8 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/form@8.3.0': - resolution: {integrity: sha512-x6NeoUk+Umd56CwXB28cyZxTztMkNMKvlLnRoTkguf6/ak3xRvGDJ4wcVHfYxls8jDSEvCT94voa/cirXObkyg==} + '@mantine/form@8.2.8': + resolution: {integrity: sha512-edigaUCmyxoPcqhMgkgJHXRgbzR1tym88xQNNgfGA1KYc9gr0BTk/3dOa5B93HIVdO9/DEXZwYKN4cjrKPDY+g==} peerDependencies: react: ^18.x || ^19.x - '@mantine/hooks@8.3.0': - resolution: {integrity: sha512-y/D8Hi4C1iEjTpjeMWKmz9QHMdPm5qQsBsRz6rpdRlVurtBhNf3DCJEtvwtmmKN1F9vBK8DDGy/OjQPUHLDqcA==} + '@mantine/hooks@8.2.8': + resolution: {integrity: sha512-KK1krCcXizWT6JF8gWexv58imQBbviylAJqSqdZ4zUPgrpe81ehMyfxo5Z9EZsnSwMxkB4RLMhCCJhC5g8GvLA==} peerDependencies: react: ^18.x || ^19.x - '@mantine/notifications@8.3.0': - resolution: {integrity: sha512-x8L+1ij1UZxcMECODK6tnwxgfUl5dyjujv0VBg4GLvcn6L3nUP8YaOhSp8ZJJqfE9m/+LJ/brCx5vik6X3WjKA==} + '@mantine/notifications@8.2.8': + resolution: {integrity: sha512-luNksAUkROoMzKCB/30nQ8o38wt54ktylbpBcTrAcjE1q00nH/IEYLS58iUYGf8l/xGBV1KH8jgSik58iqk++A==} peerDependencies: - '@mantine/core': 8.3.0 - '@mantine/hooks': 8.3.0 + '@mantine/core': 8.2.8 + '@mantine/hooks': 8.2.8 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/store@8.3.0': - resolution: {integrity: sha512-rgF4ZCXeU2C5qvGPjUfslspho9UQL2xPDtG8VWY+q60ZyEeUykdVfegny8GnuHlysjpg4nFaaWr3jcJvUlvcdA==} + '@mantine/store@8.2.8': + resolution: {integrity: sha512-xma5vcJlcR2UN6NZj0Rhskfppmz6wUTY/52EBU9sKZw60e1iiuTX2Bk/sfUa34VKZF4cRS46VLz2qstyCJne4Q==} peerDependencies: react: ^18.x || ^19.x @@ -2298,6 +2377,10 @@ packages: resolution: {integrity: sha512-QakrKIGniGuRVfWBdMsDea/dx1PNE739QJ7gCM41s9q+qaCYTHCdsIBXQVVXry3mfWAiaM9kT22Hyz53Uw8mfg==} engines: {node: '>=18'} + '@mswjs/interceptors@0.39.6': + resolution: {integrity: sha512-bndDP83naYYkfayr/qhBHMhk0YGwS1iv6vaEGcr0SQbO0IZtbOPqjKjds/WcG+bJA+1T5vCx6kprKOzn5Bg+Vw==} + engines: {node: '>=18'} + '@mux/mux-data-google-ima@0.2.8': resolution: {integrity: sha512-0ZEkHdcZ6bS8QtcjFcoJeZxJTpX7qRIledf4q1trMWPznugvtajCjCM2kieK/pzkZj1JM6liDRFs1PJSfVUs2A==} @@ -2326,13 +2409,28 @@ packages: '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - '@noble/ciphers@2.0.0': - resolution: {integrity: sha512-j/l6jpnpaIBM87cAYPJzi/6TgqmBv9spkqPyCXvRYsu5uxqh6tPJZDnD85yo8VWqzTuTQPgfv7NgT63u7kbwAQ==} - engines: {node: '>= 20.19.0'} + '@netlify/blobs@9.1.2': + resolution: {integrity: sha512-7dMjExSH4zj4ShvLem49mE3mf0K171Tx2pV4WDWhJbRUWW3SJIR2qntz0LvUGS97N5HO1SmnzrgWUhEXCsApiw==} + engines: {node: ^14.16.0 || >=16.0.0} + + '@netlify/dev-utils@2.2.0': + resolution: {integrity: sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw==} + engines: {node: ^14.16.0 || >=16.0.0} + + '@netlify/open-api@2.37.0': + resolution: {integrity: sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==} + engines: {node: '>=14.8.0'} + + '@netlify/runtime-utils@1.3.1': + resolution: {integrity: sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==} + engines: {node: '>=16.0.0'} + + '@noble/ciphers@0.6.0': + resolution: {integrity: sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==} - '@noble/hashes@2.0.0': - resolution: {integrity: sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw==} - engines: {node: '>= 20.19.0'} + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -2362,6 +2460,15 @@ packages: resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} engines: {node: '>=8.0'} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} @@ -2454,20 +2561,20 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@peculiar/asn1-android@2.5.0': - resolution: {integrity: sha512-t8A83hgghWQkcneRsgGs2ebAlRe54ns88p7ouv8PW2tzF1nAW4yHcL4uZKrFpIU+uszIRzTkcCuie37gpkId0A==} + '@peculiar/asn1-android@2.4.0': + resolution: {integrity: sha512-YFueREq97CLslZZBI8dKzis7jMfEHSLxM+nr0Zdx1POiXFLjqqwoY5s0F1UimdBiEw/iKlHey2m56MRDv7Jtyg==} - '@peculiar/asn1-ecc@2.5.0': - resolution: {integrity: sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg==} + '@peculiar/asn1-ecc@2.4.0': + resolution: {integrity: sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ==} - '@peculiar/asn1-rsa@2.5.0': - resolution: {integrity: sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q==} + '@peculiar/asn1-rsa@2.4.0': + resolution: {integrity: sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img==} - '@peculiar/asn1-schema@2.5.0': - resolution: {integrity: sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==} + '@peculiar/asn1-schema@2.4.0': + resolution: {integrity: sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==} - '@peculiar/asn1-x509@2.5.0': - resolution: {integrity: sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ==} + '@peculiar/asn1-x509@2.4.0': + resolution: {integrity: sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==} '@pivanov/utils@0.0.2': resolution: {integrity: sha512-q9CN0bFWxWgMY5hVVYyBgez1jGiLBa6I+LkG37ycylPhFvEGOOeaADGtUSu46CaZasPnlY8fCdVJZmrgKb1EPA==} @@ -3362,111 +3469,114 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.50.1': - resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==} + '@rollup/rollup-android-arm-eabi@4.50.0': + resolution: {integrity: sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.50.1': - resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==} + '@rollup/rollup-android-arm64@4.50.0': + resolution: {integrity: sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.50.1': - resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==} + '@rollup/rollup-darwin-arm64@4.50.0': + resolution: {integrity: sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.50.1': - resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==} + '@rollup/rollup-darwin-x64@4.50.0': + resolution: {integrity: sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.50.1': - resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==} + '@rollup/rollup-freebsd-arm64@4.50.0': + resolution: {integrity: sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.50.1': - resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==} + '@rollup/rollup-freebsd-x64@4.50.0': + resolution: {integrity: sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.50.1': - resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==} + '@rollup/rollup-linux-arm-gnueabihf@4.50.0': + resolution: {integrity: sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.50.1': - resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==} + '@rollup/rollup-linux-arm-musleabihf@4.50.0': + resolution: {integrity: sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.50.1': - resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==} + '@rollup/rollup-linux-arm64-gnu@4.50.0': + resolution: {integrity: sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.50.1': - resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==} + '@rollup/rollup-linux-arm64-musl@4.50.0': + resolution: {integrity: sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.50.1': - resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==} + '@rollup/rollup-linux-loongarch64-gnu@4.50.0': + resolution: {integrity: sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.50.1': - resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==} + '@rollup/rollup-linux-ppc64-gnu@4.50.0': + resolution: {integrity: sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.50.1': - resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==} + '@rollup/rollup-linux-riscv64-gnu@4.50.0': + resolution: {integrity: sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.50.1': - resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==} + '@rollup/rollup-linux-riscv64-musl@4.50.0': + resolution: {integrity: sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.50.1': - resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==} + '@rollup/rollup-linux-s390x-gnu@4.50.0': + resolution: {integrity: sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.50.1': - resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==} + '@rollup/rollup-linux-x64-gnu@4.50.0': + resolution: {integrity: sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.50.1': - resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==} + '@rollup/rollup-linux-x64-musl@4.50.0': + resolution: {integrity: sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.50.1': - resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==} + '@rollup/rollup-openharmony-arm64@4.50.0': + resolution: {integrity: sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.50.1': - resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==} + '@rollup/rollup-win32-arm64-msvc@4.50.0': + resolution: {integrity: sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.50.1': - resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==} + '@rollup/rollup-win32-ia32-msvc@4.50.0': + resolution: {integrity: sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.50.1': - resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==} + '@rollup/rollup-win32-x64-msvc@4.50.0': + resolution: {integrity: sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==} cpu: [x64] os: [win32] + '@rrweb/types@2.0.0-alpha.17': + resolution: {integrity: sha512-AfDTVUuCyCaIG0lTSqYtrZqJX39ZEYzs4fYKnexhQ+id+kbZIpIJtaut5cto6dWZbB3SEe4fW0o90Po3LvTmfg==} + '@sentry-internal/browser-utils@8.55.0': resolution: {integrity: sha512-ROgqtQfpH/82AQIpESPqPQe0UyWywKJsmVIqi3c5Fh+zkds5LUxnssTj3yNd1x+kxaPDVB023jAP+3ibNgeNDw==} engines: {node: '>=14.18'} @@ -3560,9 +3670,84 @@ packages: peerDependencies: react: '>= 16.3.0' + '@swc/core-darwin-arm64@1.10.6': + resolution: {integrity: sha512-USbMvT8Rw5PvIfF6HyTm+yW84J9c45emzmHBDIWY76vZHkFsS5MepNi+JLQyBzBBgE7ScwBRBNhRx6VNhkSoww==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.10.6': + resolution: {integrity: sha512-7t2IozcZN4r1p27ei+Kb8IjN4aLoBDn107fPi+aPLcVp2uFgJEUzhCDuZXBNW2057Mx1OHcjzrkaleRpECz3Xg==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.10.6': + resolution: {integrity: sha512-CPgWT+D0bDp/qhXsLkIJ54LmKU1/zvyGaf/yz8A4iR+YoF6R5CSXENXhNJY8cIrb6+uNWJZzHJ+gefB5V51bpA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.10.6': + resolution: {integrity: sha512-5qZ6hVnqO/ShETXdGSzvdGUVx372qydlj1YWSYiaxQzTAepEBc8TC1NVUgYtOHOKVRkky1d7p6GQ9lymsd4bHw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.10.6': + resolution: {integrity: sha512-hB2xZFmXCKf2iJF5y2z01PSuLqEoUP3jIX/XlIHN+/AIP7PkSKsValE63LnjlnWPnSEI0IxUyRE3T3FzWE/fQQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.10.6': + resolution: {integrity: sha512-PRGPp0I22+oJ8RMGg8M4hXYxEffH3ayu0WoSDPOjfol1F51Wj1tfTWN4wVa2RibzJjkBwMOT0KGLGb/hSEDDXQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.10.6': + resolution: {integrity: sha512-SoNBxlA86lnoV9vIz/TCyakLkdRhFSHx6tFMKNH8wAhz1kKYbZfDmpYoIzeQqdTh0tpx8e/Zu1zdK4smovsZqQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.10.6': + resolution: {integrity: sha512-6L5Y2E+FVvM+BtoA+mJFjf/SjpFr73w2kHBxINxwH8/PkjAjkePDr5m0ibQhPXV61bTwX49+1otzTY85EsUW9Q==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.10.6': + resolution: {integrity: sha512-kxK3tW8DJwEkAkwy0vhwoBAShRebH1QTe0mvH9tlBQ21rToVZQn+GCV/I44dind80hYPw0Tw2JKFVfoEJyBszg==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.10.6': + resolution: {integrity: sha512-4pJka/+t8XcHee12G/R5VWcilkp5poT2EJhrybpuREkpQ7iC/4WOlOVrohbWQ4AhDQmojYQI/iS+gdF2JFLzTQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.10.6': + resolution: {integrity: sha512-zgXXsI6SAVwr6XsXyMnqlyLoa1lT+r09bAWI1xT3679ejWqI1Vnl14eJG0GjWYXCEMKHCNytfMq3OOQ62C39QQ==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} + '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -3693,11 +3878,11 @@ packages: '@tanstack/query-core@5.87.1': resolution: {integrity: sha512-HOFHVvhOCprrWvtccSzc7+RNqpnLlZ5R6lTmngb8aq7b4rc2/jDT0w+vLdQ4lD9bNtQ+/A4GsFXy030Gk4ollA==} - '@tanstack/query-devtools@5.87.3': - resolution: {integrity: sha512-LkzxzSr2HS1ALHTgDmJH5eGAVsSQiuwz//VhFW5OqNk0OQ+Fsqba0Tsf+NzWRtXYvpgUqwQr4b2zdFZwxHcGvg==} + '@tanstack/query-devtools@5.86.0': + resolution: {integrity: sha512-/JDw9BP80eambEK/EsDMGAcsL2VFT+8F5KCOwierjPU7QP8Wt1GT32yJpn3qOinBM8/zS3Jy36+F0GiyJp411A==} - '@tanstack/react-query-devtools@5.87.3': - resolution: {integrity: sha512-uV7m4/m58jU4OaLEyiPLRoXnL5H5E598lhFLSXIcK83on+ZXW7aIfiu5kwRwe1qFa4X4thH8wKaxz1lt6jNmAA==} + '@tanstack/react-query-devtools@5.87.1': + resolution: {integrity: sha512-YPuEub8RQrrsXOxoiMJn33VcGPIeuVINWBgLu9RLSQB8ueXaKlGLZ3NJkahGpbt2AbWf749FQ6R+1jBFk3kdCA==} peerDependencies: '@tanstack/react-query': ^5.87.1 react: ^18 || ^19 @@ -3707,11 +3892,11 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.131.36': - resolution: {integrity: sha512-2huBmW+mqPoJs6ZHfjuunEkVRfgWZh67IUjgdSyqdaYGLa3qsG3zcG4bpTIq6HwJuzcK00JRM3AQ4NLPdttaJQ==} + '@tanstack/react-router-devtools@1.131.35': + resolution: {integrity: sha512-F93UQDpOJPXvyu4PUiRyr7al6B4sJIgwIkyr7O8QQNY2r2NLqyEWeJMWfOJD/FtrF6r+4G8UR/PE3sXF+kNO5Q==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.131.36 + '@tanstack/react-router': ^1.131.35 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -3725,36 +3910,36 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.131.36': - resolution: {integrity: sha512-9tglm3Rf9qkANBIyYLbGlOjNj7GDBr0jOEOaADfwiGV3Ua3P562MGn7nHUOrfRfA6u2MCg0EKJ+LH7AeWxAqkg==} + '@tanstack/react-router@1.131.35': + resolution: {integrity: sha512-2mwHgwoSs4wih67jfl2TjcF4enYpLpY0TljE+Sl1njZ01CWLrrQgjQ6tEuVA24Pm5re4V01A3abKvDtN1miQ9Q==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-client@1.131.36': - resolution: {integrity: sha512-yo0zPsoHMjcti68X32mWA8KYZv0mIflYp6yKesTfMmztySB3IFKxS3yng8RUWlJoEaUC5hmoM7axphcCT4hAwQ==} + '@tanstack/react-start-client@1.131.35': + resolution: {integrity: sha512-5PzUgI46O0/76Sh3Z8iRq88YfKFxWfvrGE3hVRUsZFz7tOX18cQ4uS8VxZrID32Z5hEIeyzP+pOZ8320PKIttw==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start-plugin@1.131.36': - resolution: {integrity: sha512-H6Oi5Y1qvunXQ5WqJwPs5gqJ4NdsGmyrZq17C99UA4Jc0U3d4qembbRhIjgwy4MSKwgvYA1M6SaB0yzUm4ZDCg==} + '@tanstack/react-start-plugin@1.131.35': + resolution: {integrity: sha512-rJN248N6H1iq1PCTSKqkPC6Eo2DFIljVP7jNCU1dcWtYKcqj/4HiE5umhECIQJBwB/fooZJKE9i/l5R0b/slOw==} engines: {node: '>=12'} peerDependencies: '@vitejs/plugin-react': '>=4.3.4' vite: '>=6.0.0' - '@tanstack/react-start-server@1.131.36': - resolution: {integrity: sha512-GnJ7KN0jHBTgb2CU5mZPWH3dX09FSqX8r47bV/cn7TZ3gS/Lc9C0A103fCnMmL9pDcbl8ZN3vixFuEGAKW5JsA==} + '@tanstack/react-start-server@1.131.35': + resolution: {integrity: sha512-5Q+H6LuaSxGtD5SB2NzzQ6uNL3qvljN/st0IfTzihMtRvIJsY3g+7VmuD/gjb6welqULzLmitFWRr3dUlf1/oA==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start@1.131.36': - resolution: {integrity: sha512-nOef3/rqOSeIrorqn3/niFqkAzj9aYPm7y6n/jU/l8Dxt8idFMc7k4Y9Nw2/ddmdgKfe0KECetc23K3RZ/VG7g==} + '@tanstack/react-start@1.131.35': + resolution: {integrity: sha512-LkSK6X9/ksdlRgCJChvBHLALFP4xvkoeCpm+VzzPn2xUg+RQHsA/GerBxmGWHxc4GMXxr7SSXZC/J49VZ8vsjA==} engines: {node: '>=12'} peerDependencies: '@vitejs/plugin-react': '>=4.3.4' @@ -3762,21 +3947,21 @@ packages: react-dom: '>=18.0.0 || >=19.0.0' vite: '>=6.0.0' - '@tanstack/react-store@0.7.5': - resolution: {integrity: sha512-A+WZtEnHZpvbKXm8qR+xndNKywBLez2KKKKEQc7w0Qs45GvY1LpRI3BTZNmELwEVim8+Apf99iEDH2J+MUIzlQ==} + '@tanstack/react-store@0.7.4': + resolution: {integrity: sha512-DyG1e5Qz/c1cNLt/NdFbCA7K1QGuFXQYT6EfUltYMJoQ4LzBOGnOl5IjuxepNcRtmIKkGpmdMzdFZEkevgU9bQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.131.36': - resolution: {integrity: sha512-faGrKwrJBjJDxbcyeaOXgQcyccmzIGkwk+tnFeJuMTnH5OMfArykYnTZ9BxIrlOY2Mori9DXmYKMlig6mVqmGA==} + '@tanstack/router-core@1.131.35': + resolution: {integrity: sha512-wS+Tcczo3+63LbrRKQGrpUSa9yws0V/fg32KK/tOi0BDlloVM3KTED3UP2hMVyqaMgts6jK7n1b/cEGWOlLdAA==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.131.36': - resolution: {integrity: sha512-ToZVh1kBAcOt4lp7p/v9g4cjbSBlodxngIFx+lvmhCZ7Y+SG7Y6uP7ivw8WsUAdXAWLzIhIW6Jg57TT7sz8tkg==} + '@tanstack/router-devtools-core@1.131.35': + resolution: {integrity: sha512-a3FgyedrjreUK3bypxvtUgumjsGsOQn6V/ksNVyC3yTIdpmRL1b7zrzkM0vT18H0x5iaX33Ix3Xt/renqh3qwg==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.131.36 + '@tanstack/router-core': ^1.131.35 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -3784,16 +3969,16 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.131.36': - resolution: {integrity: sha512-Rl1Q2DFcAFXaYSvHQwO+HKmp5zSBz8D3qZl+fJ0a0w4/2I+Km1xwjzDwBUkFVNJtTUor40uU76SYJzV0/9s1tw==} + '@tanstack/router-generator@1.131.35': + resolution: {integrity: sha512-fOxjiactUQXGfOAv4dC/hFjFUSUV0XmwnQwhNHswWNol6Te/gIBBj14umAaG/PqTaQZoN/b6v+wvkVvpQt3Dbw==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.131.36': - resolution: {integrity: sha512-EU/NopEkQw3AyjZvB33r4uIfUtbU64rbdJDCgGfumv1wpi/B4lJTO9W6iiUsoIsi1mtlNQKbFKNIbx+VyGh19Q==} + '@tanstack/router-plugin@1.131.35': + resolution: {integrity: sha512-/J7ipJsNK1oSJv6M8gsS/0eCo34eg5DTwwX5Cv+JFoZ+svcuaJrqN2QxyMt88Kq10IKRUo8xzaLbRxwyjY8hbA==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.131.36 + '@tanstack/react-router': ^1.131.35 vite: '>=5.0.0 || >=6.0.0' vite-plugin-solid: ^2.11.2 webpack: '>=5.92.0' @@ -3817,45 +4002,45 @@ packages: resolution: {integrity: sha512-hWsaSgEZAVyzHg8+IcJWCEtfI9ZSlNELErfLiGHG9XCHEXMegFWsrESsKHlASzJqef9RsuOLDl+1IMPIskwdDw==} engines: {node: '>=12'} - '@tanstack/start-client-core@1.131.36': - resolution: {integrity: sha512-9n12FHyxn+1YtDqSLmQxq+adUkjKrlHBg9vbLFVerH1+XpXXXsbGvLIOMPhH9muf7YxCmuA6CRLfcXqUCdjzeg==} + '@tanstack/start-client-core@1.131.35': + resolution: {integrity: sha512-4PMk+peOJogVB7IUbvEZ+O8Z75iCvSC8VNuGHsBzAiEuLGd5RecBMMPBZCh64k78U2g85if5pMnD/iw31EowHw==} engines: {node: '>=12'} - '@tanstack/start-plugin-core@1.131.36': - resolution: {integrity: sha512-ftOt3VJNieagrtsZ6fjsPitUHpxmALupZuMCtLA1EKsa9eSunS466U3ylXtypvbuQMv0mhICUkCpWJ+n+NoTTA==} + '@tanstack/start-plugin-core@1.131.35': + resolution: {integrity: sha512-Kkf/NA57p+SaAkDOBrrQ6DnhssBecAioHLQwoEYxZK2LiAmiGRAAw9F+yycsMZ1AM3sD9dbkjniRIzluNB9Otw==} engines: {node: '>=12'} peerDependencies: vite: '>=6.0.0' - '@tanstack/start-server-core@1.131.36': - resolution: {integrity: sha512-qHejodoiPWZ4Jt3USIC/UwKLj5YKWaZGPAAr8xpgega80gO+AdokNmQOf6cXvbNVYcqaB2e1lBhlgX5UPoh+5g==} + '@tanstack/start-server-core@1.131.35': + resolution: {integrity: sha512-ciwJwK3RZ+eGIZioDZncg9LbhnGRhi/fukykjX6AgPOHTsShhvOkp5Yx0OhBhxqeK6r/KQhkh+nx5RTWOZtP/g==} engines: {node: '>=12'} - '@tanstack/start-server-functions-client@1.131.36': - resolution: {integrity: sha512-w+5tvzuYv4NucGNTuGMQrJwu1TLsrqtYIK1IZMbFdqRye8fQ4/jA4GRt9aI0q7I3MOQ9ctljoWxMmAzopbG9kw==} + '@tanstack/start-server-functions-client@1.131.35': + resolution: {integrity: sha512-ZWqtpLVmAYwvwhk0zB2wo+UWV7TNLfcSd+w0EYxT9QFHWoJ8bMUHkj43HUQAEPNRBZBbes8+gUdt1Zi6f+Z0Zg==} engines: {node: '>=12'} - '@tanstack/start-server-functions-fetcher@1.131.36': - resolution: {integrity: sha512-9C2HSen3lKvDs5oQHoVpvin5x4U9NZq1uxA8HaHoDOfJNuQYF87SNczqbI/y4GVT5XS4E7B08ktlgrAfTFgDTA==} + '@tanstack/start-server-functions-fetcher@1.131.35': + resolution: {integrity: sha512-KTeWoYcZsVqMTUVoiNVZs+oN55IUsmH8jutd2P/S7VS/SyJ38cZDnCO4BHqEw84AmfLWDTnucA61IkD574jstA==} engines: {node: '>=12'} '@tanstack/start-server-functions-server@1.131.2': resolution: {integrity: sha512-u67d6XspczlC/dYki/Id28oWsTjkZMJhDqO4E23U3rHs8eYgxvMBHKqdeqWgOyC+QWT9k6ze1pJmbv+rmc3wOQ==} engines: {node: '>=12'} - '@tanstack/start-storage-context@1.131.36': - resolution: {integrity: sha512-ZzZQ9hZ1AUZhMSKgK3AWdrF44knvOmhBlZclL0xe8gM6kkLUHpp8/LWngAuPVBmdU9BQ528z3g4vLX8Wvea0KA==} + '@tanstack/start-storage-context@1.131.35': + resolution: {integrity: sha512-FHihO1s8I1WDnEaZSFFZh7GClVVsl5MAukjAMREll7E0tUu8n0fwOb9fnKDgHfzLzH0xhQhJhCagc5QIn2cZdQ==} engines: {node: '>=12'} - '@tanstack/store@0.7.5': - resolution: {integrity: sha512-qd/OjkjaFRKqKU4Yjipaen/EOB9MyEg6Wr9fW103RBPACf1ZcKhbhcu2S5mj5IgdPib6xFIgCUti/mKVkl+fRw==} + '@tanstack/store@0.7.4': + resolution: {integrity: sha512-F1XqZQici1Aq6WigEfcxJSml92nW+85Om8ElBMokPNg5glCYVOmPkZGIQeieYFxcPiKTfwo0MTOQpUyJtwncrg==} '@tanstack/virtual-file-routes@1.131.2': resolution: {integrity: sha512-VEEOxc4mvyu67O+Bl0APtYjwcNRcL9it9B4HKbNgcBTIOEalhk+ufBl4kiqc8WP1sx1+NAaiS+3CcJBhrqaSRg==} engines: {node: '>=12'} - '@tanstack/zod-adapter@1.131.36': - resolution: {integrity: sha512-2AwzoQOsNET1QePMmObelh46nKTzsBcrhh92VY0Fr2HP+x06lkWOFPScqOWHzOsvMJEC4/WfwZK5Hnc/FvpSUA==} + '@tanstack/zod-adapter@1.131.35': + resolution: {integrity: sha512-i9NHehlZ/KDIPn7qzCHwa5+leAbrOtwJc4NepMmzd0Izl7LFaa3DB9n9C0k26O4ixZneesFtp/Frp861birL7Q==} engines: {node: '>=12'} peerDependencies: '@tanstack/react-router': '>=1.43.2' @@ -4175,6 +4360,18 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/babel__code-frame@7.0.6': resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} @@ -4193,6 +4390,9 @@ packages: '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -4406,6 +4606,12 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/statuses@2.0.6': + resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -4436,63 +4642,63 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.43.0': - resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} + '@typescript-eslint/eslint-plugin@8.42.0': + resolution: {integrity: sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.43.0 + '@typescript-eslint/parser': ^8.42.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.43.0': - resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} + '@typescript-eslint/parser@8.42.0': + resolution: {integrity: sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.43.0': - resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} + '@typescript-eslint/project-service@8.42.0': + resolution: {integrity: sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.43.0': - resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} + '@typescript-eslint/scope-manager@8.42.0': + resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.43.0': - resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} + '@typescript-eslint/tsconfig-utils@8.42.0': + resolution: {integrity: sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.43.0': - resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} + '@typescript-eslint/type-utils@8.42.0': + resolution: {integrity: sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.43.0': - resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} + '@typescript-eslint/types@8.42.0': + resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.43.0': - resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} + '@typescript-eslint/typescript-estree@8.42.0': + resolution: {integrity: sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.43.0': - resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} + '@typescript-eslint/utils@8.42.0': + resolution: {integrity: sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.43.0': - resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} + '@typescript-eslint/visitor-keys@8.42.0': + resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -4607,8 +4813,28 @@ packages: resolution: {integrity: sha512-C94kJjZhEfPUNbOA69BQr1SgziQYgjNXK8S1GJXQKuwxN/24PQkYCzeBqXstfxyTXyOwoQCcEZAQ/qJccboufQ==} engines: {node: ^16.13 || >=18} - '@zip.js/zip.js@2.8.1': - resolution: {integrity: sha512-U20br2zjlo2+Ikw1S2jIWtxirUTj4kQwY3qZYa+LZi7F7hSbJVHoSNxgIO2UEN1VWYWuHJtx1UYkmERpA3TqIg==} + '@whatwg-node/disposablestack@0.0.6': + resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/fetch@0.10.10': + resolution: {integrity: sha512-watz4i/Vv4HpoJ+GranJ7HH75Pf+OkPQ63NoVmru6Srgc8VezTArB00i/oQlnn0KWh14gM42F22Qcc9SU9mo/w==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/node-fetch@0.7.25': + resolution: {integrity: sha512-szCTESNJV+Xd56zU6ShOi/JWROxE9IwCic8o5D9z5QECZloas6Ez5tUuKqXTAdu6fHFx1t6C+5gwj8smzOLjtg==} + engines: {node: '>=18.0.0'} + + '@whatwg-node/promise-helpers@1.3.2': + resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} + engines: {node: '>=16.0.0'} + + '@whatwg-node/server@0.9.71': + resolution: {integrity: sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==} + engines: {node: '>=18.0.0'} + + '@zip.js/zip.js@2.7.73': + resolution: {integrity: sha512-I2UP8/rdQE5hTtVVL08B7P8XuwXiKuuMUPjNuFOVL/9b+8IsExR9S5jz2H58u0rJjU4M1BikLgqEMG8gZJZVBw==} engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'} abbrev@3.0.1: @@ -4636,6 +4862,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -4652,8 +4882,8 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - ai@5.0.37: - resolution: {integrity: sha512-6QJEoLvynMBdk+vC/HT3Ry4w9DjhTKlC2PU+XZU/5z5QPGkGVloby7LJtzNYDOA41OltH+JOohSYqg/9phFwqg==} + ai@5.0.34: + resolution: {integrity: sha512-ouReddlmQ8ihFwY+g8fJP7u64l7uCPnJSK9R6kTiyTJ3VvztcH1HrYXqG8+XEzBVLJKJmUoYxY1gkFdwMdF8wQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4 @@ -4673,8 +4903,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + ansi-regex@6.2.0: + resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -4685,8 +4915,8 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} ansis@4.1.0: @@ -4720,6 +4950,9 @@ packages: resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -4921,22 +5154,19 @@ packages: react-router-dom: '>=5.0.0' rxjs: '>=7.0.0' - better-auth@1.3.9: - resolution: {integrity: sha512-Ty6BHzuShlqSs7I4RMlBRQ3duOWNB7WWriIu2FJVGjQAOtTVvamzFCR4/j5ROFLoNkpvNTRF7BJozsrMICL1gw==} + better-auth@1.3.8: + resolution: {integrity: sha512-uRFzHbWkhr8eWNy+BJwyMnrZPOvQjwrcLND3nc6jusRteYA9cjeRGElgCPTWTIyWUfzaQ708Lb5Mdq9Gv41Qpw==} peerDependencies: - '@lynx-js/react': '*' react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@lynx-js/react': - optional: true react: optional: true react-dom: optional: true - better-call@1.0.18: - resolution: {integrity: sha512-Ojyck3P3fs/egBmCW50tvfbCJorNV5KphfPOKrkCxPfOr8Brth1ruDtAJuhHVHEUiWrXv+vpEgWQk7m7FzhbbQ==} + better-call@1.0.16: + resolution: {integrity: sha512-42dgJ1rOtc0anOoxjXPOWuel/Z/4aeO7EJ2SiXNwvlkySSgjXhNjAjTMWa8DL1nt6EXS3jl3VKC3mPsU/lUgVA==} bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} @@ -4955,8 +5185,8 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - bippy@0.3.27: - resolution: {integrity: sha512-0k9M+yXcgUDpMgSl+7QjYRqUk8Ud4Z18uL7m34AKkkXy7Fi79Yl8q2pdyDGOyb0uhmRzHgJUOsAIYW1qvlnGaA==} + bippy@0.3.26: + resolution: {integrity: sha512-UfzW0Kn+G3PZvmeBaN81h26YAMdObnw1zojWhn83jr5hnIGhBYPoALH4zIK2XQDN7Njj3tOxmXD3P0zh+/XsFw==} peerDependencies: react: '>=17.0.1' @@ -5069,6 +5299,9 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} + callsite@1.0.0: + resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -5113,8 +5346,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + chalk@5.6.0: + resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} character-entities-html4@2.1.0: @@ -5412,6 +5645,9 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} @@ -5456,6 +5692,10 @@ packages: engines: {node: '>=4'} hasBin: true + cssstyle@4.6.0: + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} + engines: {node: '>=18'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -5630,6 +5870,10 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -5700,6 +5944,9 @@ packages: supports-color: optional: true + decache@4.6.2: + resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==} + decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -5708,6 +5955,9 @@ packages: resolution: {integrity: sha512-G7Cqgaelq68XHJNGlZ7lrNQyhZGsFqpwtGFexqUv4IQdjKoSYF7ipZ9UuTJZUSQXFj/XaoBLuEVIVqr8EJngEQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} @@ -5829,6 +6079,10 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} @@ -6020,8 +6274,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.215: - resolution: {integrity: sha512-TIvGp57UpeNetj/wV/xpFNpWGb0b/ROw372lHPx5Aafx02gjTBtWnEEcaSX3W2dLM3OSdGGyHX/cHl01JQsLaQ==} + electron-to-chromium@1.5.214: + resolution: {integrity: sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==} embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} @@ -6070,6 +6324,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -6422,6 +6680,10 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -6692,6 +6954,10 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + gzip-size@7.0.0: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6796,6 +7062,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + hls.js@1.6.11: resolution: {integrity: sha512-tdDwOAgPGXohSiNE4oxGr3CI9Hx9lsGLFe6TULUvRk2TfHS+w1tSAJntrvxsHaxvjtr6BXsDZM7NOqJFhU4mmg==} @@ -6827,6 +7096,10 @@ packages: hsl-to-rgb-for-reals@1.1.1: resolution: {integrity: sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + html-pdf@3.0.1: resolution: {integrity: sha512-CKNSacmQn+CKJ2GNfT4UYKaPy/T3Ndj82yJ2aju/UPmnvWNjIpyumqRqkFU0mwT6BTHBFhFGTnXN8dBn4Bdj0Q==} engines: {node: '>=4.0.0'} @@ -7084,6 +7357,9 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -7104,6 +7380,9 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -7259,6 +7538,9 @@ packages: resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + jose@6.1.0: resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==} @@ -7289,6 +7571,15 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + jsdom@26.1.0: + resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -7631,12 +7922,19 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - magic-string@0.30.19: - resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + luxon@3.7.1: + resolution: {integrity: sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==} + engines: {node: '>=12'} + + magic-string@0.30.18: + resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + mantine-form-zod-resolver@1.3.0: resolution: {integrity: sha512-XlXXkJCYuUuOllW0zedYW+m/lbdFQ/bso1Vz+pJOYkxgjhoGvzN2EXWCS2+0iTOT9Q7WnOwWvHmvpTJN3PxSXw==} engines: {node: '>=16.6.0'} @@ -7757,6 +8055,9 @@ packages: mermaid@11.11.0: resolution: {integrity: sha512-9lb/VNkZqWTRjVgCV+l1N+t4kyi94y+l5xrmBmbbxZYkfRl5hEDaTPMOcaWKCl1McG8nBEaMlWwkcAEEgjhBgg==} + micro-api-client@3.3.0: + resolution: {integrity: sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -8040,6 +8341,16 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msw@2.10.4: + resolution: {integrity: sha512-6R1or/qyele7q3RyPwNuvc0IxO8L8/Aim6Sz5ncXEgcWUNxSKE+udriTOWHtpMwmfkLYlacA2y7TIx4cL5lgHA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + mutative@1.2.0: resolution: {integrity: sha512-1muFw45Lwjso6TSBGiXfbjKS01fVSD/qaqBfTo/gXgp79e8KM4Sa1XP/S4iN2/DvSdIZgjFJI+JIhC7eKf3GTg==} engines: {node: '>=14.0'} @@ -8048,6 +8359,10 @@ packages: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + mux-embed@5.12.0: resolution: {integrity: sha512-Qj1MAqgAP4eNI5CmlvGCd0d0ZfcLU2wb4QzN5QqIa+IIa8NInQBZAiAfdsGWklY9mz+xYGkduy31BLafpuzlLw==} @@ -8081,6 +8396,10 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + netlify@13.3.5: + resolution: {integrity: sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==} + engines: {node: ^14.16.0 || >=16.0.0} + netmask@2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} @@ -8173,6 +8492,9 @@ packages: numeral@2.0.6: resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} + nwsapi@2.2.22: + resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} + nypm@0.5.4: resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} engines: {node: ^14.16.0 || >=16.10.0} @@ -8263,8 +8585,8 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openai@5.20.0: - resolution: {integrity: sha512-Bmc2zLM/YWgFrDpXr9hwXqGGDdMmMpE9+qoZPsaHpn0Y/Qk1Vu26hNqXo7+nHdli+sLsXINvS1f8kR3NKhGKmA==} + openai@5.19.1: + resolution: {integrity: sha512-zSqnUF7oR9ksmpusKkpUgkNrj8Sl57U+OyzO8jzc7LUjTMg4DRfR3uCm+EIMA6iw06sRPNp4t7ojp3sCpEUZRQ==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -8293,6 +8615,9 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -8321,6 +8646,14 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-wait-for@5.0.2: + resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} + engines: {node: '>=12'} + pac-proxy-agent@7.2.0: resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} engines: {node: '>= 14'} @@ -8351,6 +8684,10 @@ packages: parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-gitignore@2.0.0: + resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} + engines: {node: '>=14'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -8413,6 +8750,9 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} @@ -8586,8 +8926,8 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - posthog-js@1.261.8: - resolution: {integrity: sha512-HohKQ5Fuvei/3ZLIdayq6lDpeXsG891t2y2izpHu6q/1SoCS+HlYjViz3WCu9KlE7AfjfpwvN1kjnFNNPWeOig==} + posthog-js@1.261.7: + resolution: {integrity: sha512-Fjpbz6VfIMsEbKIN/UyTWhU1DGgVIngqoRjPGRolemIMOVzTfI77OZq8WwiBhMug+rU+wNhGCQhC41qRlR5CxA==} peerDependencies: '@rrweb/types': 2.0.0-alpha.17 rrweb-snapshot: 2.0.0-alpha.17 @@ -8769,6 +9109,9 @@ packages: resolution: {integrity: sha512-pDSIZJ9sFuOp6VnD+5IkakSVf+rICAuuU88Hcsr6AKL0QtxSIfVuKiVP2oahFI7tk3CRSexwV+Ya6MOoTxzg9g==} engines: {node: '>=18'} + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -9189,15 +9532,15 @@ packages: react: '>=16.3.0' react-dom: '>=16.3.0' - react-router-dom@7.8.2: - resolution: {integrity: sha512-Z4VM5mKDipal2jQ385H6UBhiiEDlnJPx6jyWsTYoZQdl5TrjxEV2a9yl3Fi60NBJxYzOTGTTHXPi0pdizvTwow==} + react-router-dom@7.4.1: + resolution: {integrity: sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.8.2: - resolution: {integrity: sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==} + react-router@7.4.1: + resolution: {integrity: sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -9259,6 +9602,10 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} + engines: {node: '>=0.10.0'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -9401,6 +9748,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resize-observer-polyfill@1.5.1: resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} @@ -9473,8 +9823,8 @@ packages: rollup: optional: true - rollup@4.50.1: - resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==} + rollup@4.50.0: + resolution: {integrity: sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -9491,6 +9841,12 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + + rrweb-snapshot@2.0.0-alpha.18: + resolution: {integrity: sha512-hBHZL/NfgQX6wO1D9mpwqFu1NJPpim+moIcKhFEjVTZVRUfCln+LOugRc4teVTCISYHN8Cw5e2iNTWCSm+SkoA==} + run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -9532,6 +9888,10 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -9679,8 +10039,8 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - solid-js@1.9.9: - resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} + solid-js@1.9.7: + resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} sonner@1.7.4: resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} @@ -9786,6 +10146,9 @@ packages: streamx@2.22.1: resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + string-convert@0.2.1: resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} @@ -9829,8 +10192,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} strip-final-newline@3.0.0: @@ -9870,8 +10233,8 @@ packages: peerDependencies: postcss: ^8.3.3 - supports-color@10.2.2: - resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + supports-color@10.2.0: + resolution: {integrity: sha512-5eG9FQjEjDbAlI5+kdpdyPIBMRH4GfTVDGREVupaZHmVoppknhM29b/S9BkQz7cathp85BVgRi/As3Siln7e0Q==} engines: {node: '>=18'} supports-color@7.2.0: @@ -9898,6 +10261,9 @@ packages: peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -9976,10 +10342,6 @@ packages: throttleit@1.0.1: resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} - throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -10024,6 +10386,13 @@ packages: tippy.js@6.3.7: resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -10046,12 +10415,24 @@ packages: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + traverse@0.3.9: resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} @@ -10078,6 +10459,20 @@ packages: resolution: {integrity: sha512-DiwiXfwvcTeZ5wCE0z+2A9EseZsztaiZtGrtSaY5JOD7ekPnR/GoIVD5gXZAlK9Na9Kvpo9Waz5rW64WKAWApg==} engines: {node: '>=12'} + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + tsconfck@3.1.6: resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} @@ -10122,6 +10517,9 @@ packages: cpu: [arm64] os: [linux] + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + turbo-windows-64@2.5.6: resolution: {integrity: sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==} cpu: [x64] @@ -10189,8 +10587,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.43.0: - resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} + typescript-eslint@8.42.0: + resolution: {integrity: sha512-ozR/rQn+aQXQxh1YgbCzQWDFrsi9mcg+1PM3l/z5o1+20P7suOIaNg515bpr/OYt6FObz/NHcBstydDLHWeEKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10252,6 +10650,10 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -10287,6 +10689,10 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -10399,9 +10805,15 @@ packages: resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + urlpattern-polyfill@10.1.0: + resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -10478,6 +10890,9 @@ packages: deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + v8n@1.5.1: resolution: {integrity: sha512-LdabyT4OffkyXFCe9UT+uMkxNBs5rcTVuZClvxQr08D5TUgo1OFKkoT65qYRCsiKBl/usHjpXvP4hHMzzDRj3A==} @@ -10524,8 +10939,8 @@ packages: vite: optional: true - vite@5.4.20: - resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -10555,8 +10970,8 @@ packages: terser: optional: true - vite@6.3.6: - resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==} + vite@6.3.5: + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -10654,6 +11069,10 @@ packages: w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + wait-port@1.1.0: resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} engines: {node: '>=10'} @@ -10695,6 +11114,10 @@ packages: webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -10706,6 +11129,10 @@ packages: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -10772,6 +11199,10 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + write-file-atomic@6.0.0: + resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} + engines: {node: ^18.17.0 || >=20.5.0} + ws@8.16.0: resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'} @@ -10796,10 +11227,17 @@ packages: utf-8-validate: optional: true + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + xmlbuilder2@3.1.1: resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==} engines: {node: '>=12.0'} + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -10846,6 +11284,10 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -10854,6 +11296,10 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} @@ -10923,7 +11369,7 @@ snapshots: '@ai-sdk/provider-utils': 3.0.8(zod@4.1.5) zod: 4.1.5 - '@ai-sdk/openai@2.0.27(zod@4.1.5)': + '@ai-sdk/openai@2.0.24(zod@4.1.5)': dependencies: '@ai-sdk/provider': 2.0.0 '@ai-sdk/provider-utils': 3.0.8(zod@4.1.5) @@ -10940,16 +11386,6 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/react@2.0.37(react@18.3.1)(zod@4.1.5)': - dependencies: - '@ai-sdk/provider-utils': 3.0.8(zod@4.1.5) - ai: 5.0.37(zod@4.1.5) - react: 18.3.1 - swr: 2.3.6(react@18.3.1) - throttleit: 2.1.0 - optionalDependencies: - zod: 4.1.5 - '@alloc/quick-lru@5.2.0': {} '@ant-design/colors@7.2.1': @@ -11008,6 +11444,15 @@ snapshots: '@antfu/utils@9.2.0': {} + '@asamuzakjp/css-color@3.2.0': + dependencies: + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 10.4.3 + optional: true + '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -11245,17 +11690,33 @@ snapshots: '@bufbuild/protobuf@2.7.0': {} - '@cacheable/memoize@1.1.1': + '@bundled-es-modules/cookie@2.0.1': dependencies: - '@cacheable/utils': 1.1.1 + cookie: 0.7.2 + optional: true - '@cacheable/memory@1.0.1': + '@bundled-es-modules/statuses@1.0.1': dependencies: - '@cacheable/memoize': 1.1.1 - '@cacheable/utils': 1.1.1 - '@keyv/bigmap': 1.0.0 - hookified: 1.12.0 - keyv: 5.5.0 + statuses: 2.0.2 + optional: true + + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + optional: true + + '@cacheable/memoize@1.1.1': + dependencies: + '@cacheable/utils': 1.1.1 + + '@cacheable/memory@1.0.1': + dependencies: + '@cacheable/memoize': 1.1.1 + '@cacheable/utils': 1.1.1 + '@keyv/bigmap': 1.0.0 + hookified: 1.12.0 + keyv: 5.5.0 '@cacheable/utils@1.1.1': {} @@ -11301,6 +11762,36 @@ snapshots: dependencies: mime: 3.0.0 + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + optional: true + + '@csstools/color-helpers@5.1.0': + optional: true + + '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/color-helpers': 5.1.0 + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-tokenizer@3.0.4': + optional: true + '@date-fns/tz@1.4.1': {} '@dnd-kit/accessibility@3.1.1(react@18.3.1)': @@ -11382,6 +11873,14 @@ snapshots: '@emotion/hash@0.9.2': {} + '@emotion/is-prop-valid@0.8.8': + dependencies: + '@emotion/memoize': 0.7.4 + optional: true + + '@emotion/memoize@0.7.4': + optional: true + '@emotion/memoize@0.9.0': {} '@emotion/react@11.14.0(@types/react@18.3.24)(react@18.3.1)': @@ -11645,7 +12144,7 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': dependencies: eslint: 9.35.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 @@ -11689,6 +12188,9 @@ snapshots: '@eslint/core': 0.15.2 levn: 0.4.1 + '@fastify/busboy@3.2.0': + optional: true + '@floating-ui/core@0.7.3': {} '@floating-ui/core@1.7.3': @@ -11719,6 +12221,14 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.2.10 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tabbable: 6.2.0 + '@floating-ui/react@0.27.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -11818,6 +12328,36 @@ snapshots: transitivePeerDependencies: - supports-color + '@inquirer/confirm@5.1.16(@types/node@22.18.1)': + dependencies: + '@inquirer/core': 10.2.0(@types/node@22.18.1) + '@inquirer/type': 3.0.8(@types/node@22.18.1) + optionalDependencies: + '@types/node': 22.18.1 + optional: true + + '@inquirer/core@10.2.0(@types/node@22.18.1)': + dependencies: + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@22.18.1) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 22.18.1 + optional: true + + '@inquirer/figures@1.0.13': + optional: true + + '@inquirer/type@3.0.8(@types/node@22.18.1)': + optionalDependencies: + '@types/node': 22.18.1 + optional: true + '@ioredis/commands@1.3.1': {} '@isaacs/balanced-match@4.0.1': {} @@ -11830,7 +12370,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -11880,6 +12420,12 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + optional: true + '@js-sdsl/ordered-map@4.4.2': {} '@jsdevtools/ono@7.1.3': {} @@ -11892,9 +12438,9 @@ snapshots: '@levischuck/tiny-cbor@0.2.11': {} - '@libsql/client@0.15.15': + '@libsql/client@0.15.14': dependencies: - '@libsql/core': 0.15.15 + '@libsql/core': 0.15.14 '@libsql/hrana-client': 0.7.0 js-base64: 3.7.8 libsql: 0.5.22 @@ -11903,7 +12449,7 @@ snapshots: - bufferutil - utf-8-validate - '@libsql/core@0.15.15': + '@libsql/core@0.15.14': dependencies: js-base64: 3.7.8 @@ -11956,21 +12502,6 @@ snapshots: '@lingui/babel-plugin-extract-messages@5.4.1': {} - '@lingui/babel-plugin-lingui-macro@5.4.1(babel-plugin-macros@3.1.0)': - dependencies: - '@babel/core': 7.28.4 - '@babel/runtime': 7.28.4 - '@babel/types': 7.28.4 - '@lingui/conf': 5.4.1(typescript@5.9.2) - '@lingui/core': 5.4.1(@lingui/babel-plugin-lingui-macro@5.4.1(babel-plugin-macros@3.1.0))(babel-plugin-macros@3.1.0) - '@lingui/message-utils': 5.4.1 - optionalDependencies: - babel-plugin-macros: 3.1.0 - transitivePeerDependencies: - - supports-color - - typescript - optional: true - '@lingui/babel-plugin-lingui-macro@5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2)': dependencies: '@babel/core': 7.28.4 @@ -12035,14 +12566,6 @@ snapshots: '@lingui/babel-plugin-lingui-macro': 5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2) babel-plugin-macros: 3.1.0 - '@lingui/core@5.4.1(@lingui/babel-plugin-lingui-macro@5.4.1(babel-plugin-macros@3.1.0))(babel-plugin-macros@3.1.0)': - dependencies: - '@babel/runtime': 7.28.4 - '@lingui/message-utils': 5.4.1 - optionalDependencies: - '@lingui/babel-plugin-lingui-macro': 5.4.1(babel-plugin-macros@3.1.0) - babel-plugin-macros: 3.1.0 - '@lingui/format-po@5.4.1(typescript@5.9.2)': dependencies: '@lingui/conf': 5.4.1(typescript@5.9.2) @@ -12066,11 +12589,11 @@ snapshots: '@lingui/babel-plugin-lingui-macro': 5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2) babel-plugin-macros: 3.1.0 - '@lingui/vite-plugin@5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2)(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0))': + '@lingui/vite-plugin@5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2)(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0))': dependencies: '@lingui/cli': 5.4.1(babel-plugin-macros@3.1.0)(typescript@5.9.2) '@lingui/conf': 5.4.1(typescript@5.9.2) - vite: 5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + vite: 5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -12088,12 +12611,12 @@ snapshots: '@lobehub/emojilib@1.0.0': {} - '@lobehub/fluent-emoji@2.0.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@lobehub/fluent-emoji@2.0.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@lobehub/emojilib': 1.0.0 - '@lobehub/ui': 2.11.9(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - antd: 5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - antd-style: 3.7.1(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lobehub/ui': 2.11.9(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + antd: 5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + antd-style: 3.7.1(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) emoji-regex: 10.5.0 lodash-es: 4.17.21 lucide-react: 0.469.0(react@18.3.1) @@ -12107,11 +12630,11 @@ snapshots: - framer-motion - supports-color - '@lobehub/icons@2.32.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@lobehub/icons@2.31.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@lobehub/ui': 2.11.9(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - antd: 5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - antd-style: 3.7.1(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lobehub/ui': 2.11.9(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + antd: 5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + antd-style: 3.7.1(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) lucide-react: 0.469.0(react@18.3.1) polished: 4.3.1 react: 18.3.1 @@ -12123,7 +12646,7 @@ snapshots: - framer-motion - supports-color - '@lobehub/ui@2.11.9(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@lobehub/ui@2.11.9(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@ant-design/cssinjs': 1.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@dnd-kit/core': 6.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12134,22 +12657,22 @@ snapshots: '@emoji-mart/react': 1.1.1(emoji-mart@5.6.0)(react@18.3.1) '@floating-ui/react': 0.27.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@giscus/react': 3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@lobehub/fluent-emoji': 2.0.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@lobehub/icons': 2.32.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lobehub/fluent-emoji': 2.0.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@lobehub/icons': 2.31.0(@babel/core@7.28.4)(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/mdx': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@18.3.24)(react@18.3.1) '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) '@shikijs/transformers': 3.12.2 '@splinetool/runtime': 0.9.526 ahooks: 3.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - antd: 5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - antd-style: 3.7.1(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + antd: 5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + antd-style: 3.7.1(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) chroma-js: 3.1.2 class-variance-authority: 0.7.1 dayjs: 1.11.18 emoji-mart: 5.6.0 fast-deep-equal: 3.1.3 - framer-motion: 12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + framer-motion: 12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) immer: 10.1.3 katex: 0.16.22 leva: 0.10.0(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12194,10 +12717,10 @@ snapshots: - '@types/react' - supports-color - '@mantine/core@8.3.0(@mantine/hooks@8.3.0(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/core@8.2.8(@mantine/hooks@8.2.8(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react': 0.27.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mantine/hooks': 8.3.0(react@18.3.1) + '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/hooks': 8.2.8(react@18.3.1) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -12208,26 +12731,26 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mantine/form@8.3.0(react@18.3.1)': + '@mantine/form@8.2.8(react@18.3.1)': dependencies: fast-deep-equal: 3.1.3 klona: 2.0.6 react: 18.3.1 - '@mantine/hooks@8.3.0(react@18.3.1)': + '@mantine/hooks@8.2.8(react@18.3.1)': dependencies: react: 18.3.1 - '@mantine/notifications@8.3.0(@mantine/core@8.3.0(@mantine/hooks@8.3.0(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.3.0(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mantine/notifications@8.2.8(@mantine/core@8.2.8(@mantine/hooks@8.2.8(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mantine/hooks@8.2.8(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mantine/core': 8.3.0(@mantine/hooks@8.3.0(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mantine/hooks': 8.3.0(react@18.3.1) - '@mantine/store': 8.3.0(react@18.3.1) + '@mantine/core': 8.2.8(@mantine/hooks@8.2.8(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/hooks': 8.2.8(react@18.3.1) + '@mantine/store': 8.2.8(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mantine/store@8.3.0(react@18.3.1)': + '@mantine/store@8.2.8(react@18.3.1)': dependencies: react: 18.3.1 @@ -12307,6 +12830,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@mswjs/interceptors@0.39.6': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + optional: true + '@mux/mux-data-google-ima@0.2.8': dependencies: mux-embed: 5.9.0 @@ -12346,9 +12879,36 @@ snapshots: '@neon-rs/load@0.0.4': {} - '@noble/ciphers@2.0.0': {} + '@netlify/blobs@9.1.2': + dependencies: + '@netlify/dev-utils': 2.2.0 + '@netlify/runtime-utils': 1.3.1 + optional: true - '@noble/hashes@2.0.0': {} + '@netlify/dev-utils@2.2.0': + dependencies: + '@whatwg-node/server': 0.9.71 + chokidar: 4.0.3 + decache: 4.6.2 + dot-prop: 9.0.0 + env-paths: 3.0.0 + find-up: 7.0.0 + lodash.debounce: 4.0.8 + netlify: 13.3.5 + parse-gitignore: 2.0.0 + uuid: 11.1.0 + write-file-atomic: 6.0.0 + optional: true + + '@netlify/open-api@2.37.0': + optional: true + + '@netlify/runtime-utils@1.3.1': + optional: true + + '@noble/ciphers@0.6.0': {} + + '@noble/hashes@1.8.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -12379,6 +12939,18 @@ snapshots: '@oozcitak/util@8.3.8': {} + '@open-draft/deferred-promise@2.2.0': + optional: true + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + optional: true + + '@open-draft/until@2.1.0': + optional: true + '@opentelemetry/api@1.9.0': {} '@parcel/watcher-android-arm64@2.5.1': @@ -12446,35 +13018,35 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.1 '@parcel/watcher-win32-x64': 2.5.1 - '@peculiar/asn1-android@2.5.0': + '@peculiar/asn1-android@2.4.0': dependencies: - '@peculiar/asn1-schema': 2.5.0 + '@peculiar/asn1-schema': 2.4.0 asn1js: 3.0.6 tslib: 2.8.1 - '@peculiar/asn1-ecc@2.5.0': + '@peculiar/asn1-ecc@2.4.0': dependencies: - '@peculiar/asn1-schema': 2.5.0 - '@peculiar/asn1-x509': 2.5.0 + '@peculiar/asn1-schema': 2.4.0 + '@peculiar/asn1-x509': 2.4.0 asn1js: 3.0.6 tslib: 2.8.1 - '@peculiar/asn1-rsa@2.5.0': + '@peculiar/asn1-rsa@2.4.0': dependencies: - '@peculiar/asn1-schema': 2.5.0 - '@peculiar/asn1-x509': 2.5.0 + '@peculiar/asn1-schema': 2.4.0 + '@peculiar/asn1-x509': 2.4.0 asn1js: 3.0.6 tslib: 2.8.1 - '@peculiar/asn1-schema@2.5.0': + '@peculiar/asn1-schema@2.4.0': dependencies: asn1js: 3.0.6 pvtsutils: 1.3.6 tslib: 2.8.1 - '@peculiar/asn1-x509@2.5.0': + '@peculiar/asn1-x509@2.4.0': dependencies: - '@peculiar/asn1-schema': 2.5.0 + '@peculiar/asn1-schema': 2.4.0 asn1js: 3.0.6 pvtsutils: 1.3.6 tslib: 2.8.1 @@ -12497,7 +13069,7 @@ snapshots: dependencies: '@poppinss/colors': 4.1.5 '@sindresorhus/is': 7.0.2 - supports-color: 10.2.2 + supports-color: 10.2.0 '@poppinss/exception@1.2.2': {} @@ -13441,130 +14013,135 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/plugin-alias@5.1.1(rollup@4.50.1)': + '@rollup/plugin-alias@5.1.1(rollup@4.50.0)': optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - '@rollup/plugin-commonjs@28.0.6(rollup@4.50.1)': + '@rollup/plugin-commonjs@28.0.6(rollup@4.50.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@rollup/pluginutils': 5.3.0(rollup@4.50.0) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) is-reference: 1.2.1 - magic-string: 0.30.19 + magic-string: 0.30.18 picomatch: 4.0.3 optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - '@rollup/plugin-inject@5.0.5(rollup@4.50.1)': + '@rollup/plugin-inject@5.0.5(rollup@4.50.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@rollup/pluginutils': 5.3.0(rollup@4.50.0) estree-walker: 2.0.2 - magic-string: 0.30.19 + magic-string: 0.30.18 optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - '@rollup/plugin-json@6.1.0(rollup@4.50.1)': + '@rollup/plugin-json@6.1.0(rollup@4.50.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@rollup/pluginutils': 5.3.0(rollup@4.50.0) optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - '@rollup/plugin-node-resolve@16.0.1(rollup@4.50.1)': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.50.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@rollup/pluginutils': 5.3.0(rollup@4.50.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - '@rollup/plugin-replace@6.0.2(rollup@4.50.1)': + '@rollup/plugin-replace@6.0.2(rollup@4.50.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) - magic-string: 0.30.19 + '@rollup/pluginutils': 5.3.0(rollup@4.50.0) + magic-string: 0.30.18 optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - '@rollup/plugin-terser@0.4.4(rollup@4.50.1)': + '@rollup/plugin-terser@0.4.4(rollup@4.50.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.44.0 optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - '@rollup/pluginutils@5.3.0(rollup@4.50.1)': + '@rollup/pluginutils@5.3.0(rollup@4.50.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - '@rollup/rollup-android-arm-eabi@4.50.1': + '@rollup/rollup-android-arm-eabi@4.50.0': optional: true - '@rollup/rollup-android-arm64@4.50.1': + '@rollup/rollup-android-arm64@4.50.0': optional: true - '@rollup/rollup-darwin-arm64@4.50.1': + '@rollup/rollup-darwin-arm64@4.50.0': optional: true - '@rollup/rollup-darwin-x64@4.50.1': + '@rollup/rollup-darwin-x64@4.50.0': optional: true - '@rollup/rollup-freebsd-arm64@4.50.1': + '@rollup/rollup-freebsd-arm64@4.50.0': optional: true - '@rollup/rollup-freebsd-x64@4.50.1': + '@rollup/rollup-freebsd-x64@4.50.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.50.1': + '@rollup/rollup-linux-arm-gnueabihf@4.50.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.50.1': + '@rollup/rollup-linux-arm-musleabihf@4.50.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.50.1': + '@rollup/rollup-linux-arm64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.50.1': + '@rollup/rollup-linux-arm64-musl@4.50.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.50.1': + '@rollup/rollup-linux-loongarch64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.50.1': + '@rollup/rollup-linux-ppc64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.50.1': + '@rollup/rollup-linux-riscv64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.50.1': + '@rollup/rollup-linux-riscv64-musl@4.50.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.50.1': + '@rollup/rollup-linux-s390x-gnu@4.50.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.50.1': + '@rollup/rollup-linux-x64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-x64-musl@4.50.1': + '@rollup/rollup-linux-x64-musl@4.50.0': optional: true - '@rollup/rollup-openharmony-arm64@4.50.1': + '@rollup/rollup-openharmony-arm64@4.50.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.50.1': + '@rollup/rollup-win32-arm64-msvc@4.50.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.50.1': + '@rollup/rollup-win32-ia32-msvc@4.50.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.50.1': + '@rollup/rollup-win32-x64-msvc@4.50.0': + optional: true + + '@rrweb/types@2.0.0-alpha.17': + dependencies: + rrweb-snapshot: 2.0.0-alpha.18 optional: true '@sentry-internal/browser-utils@8.55.0': @@ -13646,11 +14223,11 @@ snapshots: dependencies: '@hexagon/base64': 1.1.28 '@levischuck/tiny-cbor': 0.2.11 - '@peculiar/asn1-android': 2.5.0 - '@peculiar/asn1-ecc': 2.5.0 - '@peculiar/asn1-rsa': 2.5.0 - '@peculiar/asn1-schema': 2.5.0 - '@peculiar/asn1-x509': 2.5.0 + '@peculiar/asn1-android': 2.4.0 + '@peculiar/asn1-ecc': 2.4.0 + '@peculiar/asn1-rsa': 2.4.0 + '@peculiar/asn1-schema': 2.4.0 + '@peculiar/asn1-x509': 2.4.0 '@sinclair/typebox@0.27.8': {} @@ -13675,10 +14252,66 @@ snapshots: dependencies: react: 18.3.1 + '@swc/core-darwin-arm64@1.10.6': + optional: true + + '@swc/core-darwin-x64@1.10.6': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.10.6': + optional: true + + '@swc/core-linux-arm64-gnu@1.10.6': + optional: true + + '@swc/core-linux-arm64-musl@1.10.6': + optional: true + + '@swc/core-linux-x64-gnu@1.10.6': + optional: true + + '@swc/core-linux-x64-musl@1.10.6': + optional: true + + '@swc/core-win32-arm64-msvc@1.10.6': + optional: true + + '@swc/core-win32-ia32-msvc@1.10.6': + optional: true + + '@swc/core-win32-x64-msvc@1.10.6': + optional: true + + '@swc/core@1.10.6(@swc/helpers@0.5.17)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.25 + optionalDependencies: + '@swc/core-darwin-arm64': 1.10.6 + '@swc/core-darwin-x64': 1.10.6 + '@swc/core-linux-arm-gnueabihf': 1.10.6 + '@swc/core-linux-arm64-gnu': 1.10.6 + '@swc/core-linux-arm64-musl': 1.10.6 + '@swc/core-linux-x64-gnu': 1.10.6 + '@swc/core-linux-x64-musl': 1.10.6 + '@swc/core-win32-arm64-msvc': 1.10.6 + '@swc/core-win32-ia32-msvc': 1.10.6 + '@swc/core-win32-x64-msvc': 1.10.6 + '@swc/helpers': 0.5.17 + optional: true + + '@swc/counter@0.1.3': + optional: true + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 + '@swc/types@0.1.25': + dependencies: + '@swc/counter': 0.1.3 + optional: true + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -13706,7 +14339,7 @@ snapshots: enhanced-resolve: 5.18.3 jiti: 2.5.1 lightningcss: 1.30.1 - magic-string: 0.30.19 + magic-string: 0.30.18 source-map-js: 1.2.1 tailwindcss: 4.1.13 @@ -13772,7 +14405,7 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.13 - '@tanstack/directive-functions-plugin@1.131.2(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@tanstack/directive-functions-plugin@1.131.2(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -13781,7 +14414,7 @@ snapshots: '@tanstack/router-utils': 1.131.2 babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 - vite: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + vite: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -13789,11 +14422,11 @@ snapshots: '@tanstack/query-core@5.87.1': {} - '@tanstack/query-devtools@5.87.3': {} + '@tanstack/query-devtools@5.86.0': {} - '@tanstack/react-query-devtools@5.87.3(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query-devtools@5.87.1(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/query-devtools': 5.87.3 + '@tanstack/query-devtools': 5.86.0 '@tanstack/react-query': 5.87.1(react@18.3.1) react: 18.3.1 @@ -13802,10 +14435,15 @@ snapshots: '@tanstack/query-core': 5.87.1 react: 18.3.1 - '@tanstack/react-router-devtools@1.131.36(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tanstack/router-core@1.131.36)(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(solid-js@1.9.9)(tiny-invariant@1.3.3)': + '@tanstack/react-query@5.87.1(react@19.1.1)': + dependencies: + '@tanstack/query-core': 5.87.1 + react: 19.1.1 + + '@tanstack/react-router-devtools@1.131.35(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tanstack/router-core@1.131.35)(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(solid-js@1.9.7)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/react-router': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/router-devtools-core': 1.131.36(@tanstack/router-core@1.131.36)(csstype@3.1.3)(solid-js@1.9.9)(tiny-invariant@1.3.3) + '@tanstack/react-router': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/router-devtools-core': 1.131.35(@tanstack/router-core@1.131.35)(csstype@3.1.3)(solid-js@1.9.7)(tiny-invariant@1.3.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -13814,42 +14452,42 @@ snapshots: - solid-js - tiny-invariant - '@tanstack/react-router-with-query@1.130.17(@tanstack/react-query@5.87.1(react@18.3.1))(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tanstack/router-core@1.131.36)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-router-with-query@1.130.17(@tanstack/react-query@5.87.1(react@18.3.1))(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@tanstack/router-core@1.131.35)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/react-query': 5.87.1(react@18.3.1) - '@tanstack/react-router': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/router-core': 1.131.36 + '@tanstack/react-router': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/router-core': 1.131.35 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/history': 1.131.2 - '@tanstack/react-store': 0.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/router-core': 1.131.36 + '@tanstack/react-store': 0.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/router-core': 1.131.35 isbot: 5.1.30 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-client@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-start-client@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/react-router': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/router-core': 1.131.36 - '@tanstack/start-client-core': 1.131.36 + '@tanstack/react-router': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/router-core': 1.131.35 + '@tanstack/start-client-core': 1.131.35 cookie-es: 1.2.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-plugin@1.131.36(@libsql/client@0.15.15)(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)))(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@tanstack/react-start-plugin@1.131.35(@libsql/client@0.15.14)(@netlify/blobs@9.1.2)(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.7.0(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)))(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: - '@tanstack/start-plugin-core': 1.131.36(@libsql/client@0.15.15)(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) - '@vitejs/plugin-react': 4.7.0(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/start-plugin-core': 1.131.35(@libsql/client@0.15.14)(@netlify/blobs@9.1.2)(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@vitejs/plugin-react': 4.7.0(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) pathe: 2.0.3 - vite: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + vite: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -13884,29 +14522,29 @@ snapshots: - webpack - xml2js - '@tanstack/react-start-server@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-start-server@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/history': 1.131.2 - '@tanstack/react-router': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/router-core': 1.131.36 - '@tanstack/start-client-core': 1.131.36 - '@tanstack/start-server-core': 1.131.36 + '@tanstack/react-router': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/router-core': 1.131.35 + '@tanstack/start-client-core': 1.131.35 + '@tanstack/start-server-core': 1.131.35 h3: 1.13.0 isbot: 5.1.30 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/react-start@1.131.36(@libsql/client@0.15.15)(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)))(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@tanstack/react-start@1.131.35(@libsql/client@0.15.14)(@netlify/blobs@9.1.2)(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.7.0(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)))(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: - '@tanstack/react-start-client': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-start-plugin': 1.131.36(@libsql/client@0.15.15)(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)))(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) - '@tanstack/react-start-server': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/start-server-functions-client': 1.131.36(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) - '@tanstack/start-server-functions-server': 1.131.2(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) - '@vitejs/plugin-react': 4.7.0(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/react-start-client': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-start-plugin': 1.131.35(@libsql/client@0.15.14)(@netlify/blobs@9.1.2)(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@vitejs/plugin-react@4.7.0(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)))(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/react-start-server': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/start-server-functions-client': 1.131.35(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/start-server-functions-server': 1.131.2(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@vitejs/plugin-react': 4.7.0(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - vite: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + vite: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -13940,36 +14578,36 @@ snapshots: - webpack - xml2js - '@tanstack/react-store@0.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-store@0.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/store': 0.7.5 + '@tanstack/store': 0.7.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.5.0(react@18.3.1) - '@tanstack/router-core@1.131.36': + '@tanstack/router-core@1.131.35': dependencies: '@tanstack/history': 1.131.2 - '@tanstack/store': 0.7.5 + '@tanstack/store': 0.7.4 cookie-es: 1.2.2 seroval: 1.3.2 seroval-plugins: 1.3.3(seroval@1.3.2) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.131.36(@tanstack/router-core@1.131.36)(csstype@3.1.3)(solid-js@1.9.9)(tiny-invariant@1.3.3)': + '@tanstack/router-devtools-core@1.131.35(@tanstack/router-core@1.131.35)(csstype@3.1.3)(solid-js@1.9.7)(tiny-invariant@1.3.3)': dependencies: - '@tanstack/router-core': 1.131.36 + '@tanstack/router-core': 1.131.35 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) - solid-js: 1.9.9 + solid-js: 1.9.7 tiny-invariant: 1.3.3 optionalDependencies: csstype: 3.1.3 - '@tanstack/router-generator@1.131.36': + '@tanstack/router-generator@1.131.35': dependencies: - '@tanstack/router-core': 1.131.36 + '@tanstack/router-core': 1.131.35 '@tanstack/router-utils': 1.131.2 '@tanstack/virtual-file-routes': 1.131.2 prettier: 3.6.2 @@ -13980,7 +14618,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.131.36(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0))': + '@tanstack/router-plugin@1.131.35(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -13988,8 +14626,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/router-core': 1.131.36 - '@tanstack/router-generator': 1.131.36 + '@tanstack/router-core': 1.131.35 + '@tanstack/router-generator': 1.131.35 '@tanstack/router-utils': 1.131.2 '@tanstack/virtual-file-routes': 1.131.2 babel-dead-code-elimination: 1.0.10 @@ -13997,12 +14635,12 @@ snapshots: unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - vite: 5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + '@tanstack/react-router': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + vite: 5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.131.36(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@tanstack/router-plugin@1.131.35(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -14010,8 +14648,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/router-core': 1.131.36 - '@tanstack/router-generator': 1.131.36 + '@tanstack/router-core': 1.131.35 + '@tanstack/router-generator': 1.131.35 '@tanstack/router-utils': 1.131.2 '@tanstack/virtual-file-routes': 1.131.2 babel-dead-code-elimination: 1.0.10 @@ -14019,8 +14657,8 @@ snapshots: unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - vite: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + '@tanstack/react-router': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + vite: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -14035,7 +14673,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/server-functions-plugin@1.131.2(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@tanstack/server-functions-plugin@1.131.2(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -14044,42 +14682,42 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/directive-functions-plugin': 1.131.2(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/directive-functions-plugin': 1.131.2(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color - vite - '@tanstack/start-client-core@1.131.36': + '@tanstack/start-client-core@1.131.35': dependencies: - '@tanstack/router-core': 1.131.36 - '@tanstack/start-storage-context': 1.131.36 + '@tanstack/router-core': 1.131.35 + '@tanstack/start-storage-context': 1.131.35 cookie-es: 1.2.2 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.131.36(@libsql/client@0.15.15)(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@tanstack/start-plugin-core@1.131.35(@libsql/client@0.15.14)(@netlify/blobs@9.1.2)(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/router-core': 1.131.36 - '@tanstack/router-generator': 1.131.36 - '@tanstack/router-plugin': 1.131.36(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/router-core': 1.131.35 + '@tanstack/router-generator': 1.131.35 + '@tanstack/router-plugin': 1.131.35(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) '@tanstack/router-utils': 1.131.2 - '@tanstack/server-functions-plugin': 1.131.2(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) - '@tanstack/start-server-core': 1.131.36 + '@tanstack/server-functions-plugin': 1.131.2(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/start-server-core': 1.131.35 '@types/babel__code-frame': 7.0.6 '@types/babel__core': 7.20.5 babel-dead-code-elimination: 1.0.10 cheerio: 1.1.2 h3: 1.13.0 - nitropack: 2.12.5(@libsql/client@0.15.15)(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5)) + nitropack: 2.12.5(@libsql/client@0.15.14)(@netlify/blobs@9.1.2)(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5)) pathe: 2.0.3 ufo: 1.6.1 - vite: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + vite: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + vitefu: 1.1.1(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) xmlbuilder2: 3.1.1 zod: 3.25.76 transitivePeerDependencies: @@ -14115,50 +14753,50 @@ snapshots: - webpack - xml2js - '@tanstack/start-server-core@1.131.36': + '@tanstack/start-server-core@1.131.35': dependencies: '@tanstack/history': 1.131.2 - '@tanstack/router-core': 1.131.36 - '@tanstack/start-client-core': 1.131.36 - '@tanstack/start-storage-context': 1.131.36 + '@tanstack/router-core': 1.131.35 + '@tanstack/start-client-core': 1.131.35 + '@tanstack/start-storage-context': 1.131.35 h3: 1.13.0 isbot: 5.1.30 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 unctx: 2.4.1 - '@tanstack/start-server-functions-client@1.131.36(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@tanstack/start-server-functions-client@1.131.35(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: - '@tanstack/server-functions-plugin': 1.131.2(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) - '@tanstack/start-server-functions-fetcher': 1.131.36 + '@tanstack/server-functions-plugin': 1.131.2(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/start-server-functions-fetcher': 1.131.35 transitivePeerDependencies: - supports-color - vite - '@tanstack/start-server-functions-fetcher@1.131.36': + '@tanstack/start-server-functions-fetcher@1.131.35': dependencies: - '@tanstack/router-core': 1.131.36 - '@tanstack/start-client-core': 1.131.36 + '@tanstack/router-core': 1.131.35 + '@tanstack/start-client-core': 1.131.35 - '@tanstack/start-server-functions-server@1.131.2(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@tanstack/start-server-functions-server@1.131.2(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: - '@tanstack/server-functions-plugin': 1.131.2(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) + '@tanstack/server-functions-plugin': 1.131.2(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)) tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color - vite - '@tanstack/start-storage-context@1.131.36': + '@tanstack/start-storage-context@1.131.35': dependencies: - '@tanstack/router-core': 1.131.36 + '@tanstack/router-core': 1.131.35 - '@tanstack/store@0.7.5': {} + '@tanstack/store@0.7.4': {} '@tanstack/virtual-file-routes@1.131.2': {} - '@tanstack/zod-adapter@1.131.36(@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(zod@4.1.5)': + '@tanstack/zod-adapter@1.131.35(@tanstack/react-router@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(zod@4.1.5)': dependencies: - '@tanstack/react-router': 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-router': 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) zod: 4.1.5 '@tauri-apps/api@2.0.0-beta.8': {} @@ -14475,6 +15113,18 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} + '@tsconfig/node10@1.0.11': + optional: true + + '@tsconfig/node12@1.0.11': + optional: true + + '@tsconfig/node14@1.0.3': + optional: true + + '@tsconfig/node16@1.0.4': + optional: true + '@types/babel__code-frame@7.0.6': {} '@types/babel__core@7.20.5': @@ -14502,6 +15152,8 @@ snapshots: dependencies: '@types/deep-eql': 4.0.2 + '@types/cookie@0.6.0': {} + '@types/d3-array@3.2.1': {} '@types/d3-axis@3.0.6': @@ -14732,6 +15384,12 @@ snapshots: '@types/stack-utils@2.0.3': {} + '@types/statuses@2.0.6': + optional: true + + '@types/tough-cookie@4.0.5': + optional: true + '@types/trusted-types@2.0.7': {} '@types/turndown@5.0.5': {} @@ -14759,14 +15417,14 @@ snapshots: '@types/node': 22.18.1 optional: true - '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/type-utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.42.0 eslint: 9.35.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -14776,41 +15434,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.42.0 debug: 4.4.1(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.42.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) + '@typescript-eslint/types': 8.42.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.43.0': + '@typescript-eslint/scope-manager@8.42.0': dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/visitor-keys': 8.42.0 - '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.42.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1(supports-color@8.1.1) eslint: 9.35.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) @@ -14818,14 +15476,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.43.0': {} + '@typescript-eslint/types@8.42.0': {} - '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.42.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.43.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/visitor-keys': 8.43.0 + '@typescript-eslint/project-service': 8.42.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/visitor-keys': 8.42.0 debug: 4.4.1(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -14836,20 +15494,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/types': 8.43.0 - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.43.0': + '@typescript-eslint/visitor-keys@8.42.0': dependencies: - '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/types': 8.42.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -14863,10 +15521,10 @@ snapshots: '@vercel/edge@1.2.2': {} - '@vercel/nft@0.30.1(rollup@4.50.1)': + '@vercel/nft@0.30.1(rollup@4.50.0)': dependencies: '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@rollup/pluginutils': 5.3.0(rollup@4.50.0) acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) async-sema: 3.1.1 @@ -14882,7 +15540,7 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-react@4.7.0(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0))': + '@vitejs/plugin-react@4.7.0(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -14890,11 +15548,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + vite: 5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': + '@vitejs/plugin-react@4.7.0(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -14902,7 +15560,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + vite: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -14914,13 +15572,14 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0))': + '@vitest/mocker@3.2.4(msw@2.10.4(@types/node@22.18.1)(typescript@5.9.2))(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.19 + magic-string: 0.30.18 optionalDependencies: - vite: 5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + msw: 2.10.4(@types/node@22.18.1)(typescript@5.9.2) + vite: 5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) '@vitest/pretty-format@2.1.9': dependencies: @@ -14939,13 +15598,13 @@ snapshots: '@vitest/snapshot@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 - magic-string: 0.30.19 + magic-string: 0.30.18 pathe: 1.1.2 '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.19 + magic-string: 0.30.18 pathe: 2.0.3 '@vitest/spy@3.2.4': @@ -14969,7 +15628,7 @@ snapshots: '@wdio/types': 8.41.0 '@wdio/utils': 8.46.0 async-exit-hook: 2.0.1 - chalk: 5.6.2 + chalk: 5.6.0 chokidar: 4.0.3 cli-spinners: 2.9.2 dotenv: 16.6.1 @@ -15037,10 +15696,10 @@ snapshots: '@wdio/logger@8.38.0': dependencies: - chalk: 5.6.2 + chalk: 5.6.0 loglevel: 1.9.2 loglevel-plugin-prefix: 0.8.4 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 '@wdio/mocha-framework@8.46.0': dependencies: @@ -15093,7 +15752,7 @@ snapshots: dependencies: '@wdio/reporter': 8.43.0 '@wdio/types': 8.41.0 - chalk: 5.6.2 + chalk: 5.6.0 easy-table: 1.2.0 pretty-ms: 7.0.1 @@ -15120,7 +15779,40 @@ snapshots: - bare-buffer - supports-color - '@zip.js/zip.js@2.8.1': {} + '@whatwg-node/disposablestack@0.0.6': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + optional: true + + '@whatwg-node/fetch@0.10.10': + dependencies: + '@whatwg-node/node-fetch': 0.7.25 + urlpattern-polyfill: 10.1.0 + optional: true + + '@whatwg-node/node-fetch@0.7.25': + dependencies: + '@fastify/busboy': 3.2.0 + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + optional: true + + '@whatwg-node/promise-helpers@1.3.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@whatwg-node/server@0.9.71': + dependencies: + '@whatwg-node/disposablestack': 0.0.6 + '@whatwg-node/fetch': 0.10.10 + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + optional: true + + '@zip.js/zip.js@2.7.73': {} abbrev@3.0.1: {} @@ -15143,6 +15835,11 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + optional: true + acorn@8.15.0: {} agent-base@7.1.4: {} @@ -15162,7 +15859,7 @@ snapshots: screenfull: 5.2.0 tslib: 2.8.1 - ai@5.0.37(zod@4.1.5): + ai@5.0.34(zod@4.1.5): dependencies: '@ai-sdk/gateway': 1.0.19(zod@4.1.5) '@ai-sdk/provider': 2.0.0 @@ -15185,7 +15882,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} + ansi-regex@6.2.0: {} ansi-styles@4.3.0: dependencies: @@ -15193,11 +15890,11 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.3: {} + ansi-styles@6.2.1: {} ansis@4.1.0: {} - antd-style@3.7.1(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + antd-style@3.7.1(@types/react@18.3.24)(antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@ant-design/cssinjs': 1.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@babel/runtime': 7.28.4 @@ -15206,7 +15903,7 @@ snapshots: '@emotion/react': 11.14.0(@types/react@18.3.24)(react@18.3.1) '@emotion/serialize': 1.3.3 '@emotion/utils': 1.4.2 - antd: 5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + antd: 5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 use-merge-value: 1.2.0(react@18.3.1) transitivePeerDependencies: @@ -15214,7 +15911,7 @@ snapshots: - react-dom - supports-color - antd@5.27.3(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + antd@5.27.3(date-fns@4.1.0)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@ant-design/colors': 7.2.1 '@ant-design/cssinjs': 1.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -15246,7 +15943,7 @@ snapshots: rc-motion: 2.9.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-notification: 5.6.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-pagination: 5.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - rc-picker: 4.11.3(date-fns@4.1.0)(dayjs@1.11.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rc-picker: 4.11.3(date-fns@4.1.0)(dayjs@1.11.18)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-rate: 2.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-resize-observer: 1.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -15299,6 +15996,9 @@ snapshots: tar-stream: 3.1.7 zip-stream: 6.0.1 + arg@4.1.3: + optional: true + arg@5.0.2: {} argparse@1.0.10: @@ -15514,26 +16214,26 @@ snapshots: tweetnacl: 0.14.5 optional: true - beautiful-react-hooks@5.0.3(react-dom@18.3.1(react@18.3.1))(react-router-dom@7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rxjs@7.8.2): + beautiful-react-hooks@5.0.3(react-dom@18.3.1(react@18.3.1))(react-router-dom@7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rxjs@7.8.2): dependencies: lodash.debounce: 4.0.8 lodash.throttle: 4.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router-dom: 7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: 7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rxjs: 7.8.2 - better-auth@1.3.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + better-auth@1.3.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@better-auth/utils': 0.2.6 '@better-fetch/fetch': 1.1.18 - '@noble/ciphers': 2.0.0 - '@noble/hashes': 2.0.0 + '@noble/ciphers': 0.6.0 + '@noble/hashes': 1.8.0 '@simplewebauthn/browser': 13.1.2 '@simplewebauthn/server': 13.1.2 - better-call: 1.0.18 + better-call: 1.0.16 defu: 6.1.4 - jose: 6.1.0 + jose: 5.10.0 kysely: 0.28.5 nanostores: 0.11.4 zod: 4.1.5 @@ -15541,7 +16241,25 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - better-call@1.0.18: + better-auth@1.3.8(react-dom@18.3.1(react@19.1.1))(react@19.1.1): + dependencies: + '@better-auth/utils': 0.2.6 + '@better-fetch/fetch': 1.1.18 + '@noble/ciphers': 0.6.0 + '@noble/hashes': 1.8.0 + '@simplewebauthn/browser': 13.1.2 + '@simplewebauthn/server': 13.1.2 + better-call: 1.0.16 + defu: 6.1.4 + jose: 5.10.0 + kysely: 0.28.5 + nanostores: 0.11.4 + zod: 4.1.5 + optionalDependencies: + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + + better-call@1.0.16: dependencies: '@better-fetch/fetch': 1.1.18 rou3: 0.5.1 @@ -15565,7 +16283,7 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 - bippy@0.3.27(@types/react@18.3.24)(react@18.3.1): + bippy@0.3.26(@types/react@18.3.24)(react@18.3.1): dependencies: '@types/react-reconciler': 0.28.9(@types/react@18.3.24) react: 18.3.1 @@ -15622,7 +16340,7 @@ snapshots: browserslist@4.25.4: dependencies: caniuse-lite: 1.0.30001741 - electron-to-chromium: 1.5.215 + electron-to-chromium: 1.5.214 node-releases: 2.0.20 update-browserslist-db: 1.1.3(browserslist@4.25.4) @@ -15717,6 +16435,9 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 + callsite@1.0.0: + optional: true + callsites@3.1.0: {} camelcase-css@2.0.1: {} @@ -15767,7 +16488,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.6.2: {} + chalk@5.6.0: {} character-entities-html4@2.1.0: {} @@ -16064,6 +16785,9 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.7.0 + create-require@1.1.1: + optional: true + crelt@1.0.6: {} croner@9.1.0: {} @@ -16112,6 +16836,12 @@ snapshots: cssesc@3.0.0: {} + cssstyle@4.6.0: + dependencies: + '@asamuzakjp/css-color': 3.2.0 + rrweb-cssom: 0.8.0 + optional: true + csstype@3.1.3: {} custom-media-element@1.4.5: {} @@ -16309,6 +17039,12 @@ snapshots: data-uri-to-buffer@6.0.2: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + optional: true + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -16333,10 +17069,10 @@ snapshots: dayjs@1.11.18: {} - db0@0.3.2(@libsql/client@0.15.15)(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5)): + db0@0.3.2(@libsql/client@0.15.14)(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5)): optionalDependencies: - '@libsql/client': 0.15.15 - drizzle-orm: 0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5) + '@libsql/client': 0.15.14 + drizzle-orm: 0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5) debug@2.6.9: dependencies: @@ -16353,10 +17089,18 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + decache@4.6.2: + dependencies: + callsite: 1.0.0 + optional: true + decamelize@4.0.0: {} decamelize@6.0.1: {} + decimal.js@10.6.0: + optional: true + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -16449,6 +17193,9 @@ snapshots: diff-sequences@29.6.3: {} + diff@4.0.2: + optional: true + diff@5.2.0: {} diff@7.0.0: {} @@ -16507,15 +17254,15 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5): + drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5): optionalDependencies: - '@libsql/client': 0.15.15 + '@libsql/client': 0.15.14 '@opentelemetry/api': 1.9.0 kysely: 0.28.5 - drizzle-zod@0.8.3(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(zod@4.1.5): + drizzle-zod@0.8.3(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5))(zod@4.1.5): dependencies: - drizzle-orm: 0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5) + drizzle-orm: 0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5) zod: 4.1.5 dunder-proto@1.0.1: @@ -16552,7 +17299,7 @@ snapshots: edgedriver@5.6.1: dependencies: '@wdio/logger': 8.38.0 - '@zip.js/zip.js': 2.8.1 + '@zip.js/zip.js': 2.7.73 decamelize: 6.0.1 edge-paths: 3.0.5 fast-xml-parser: 4.5.3 @@ -16565,7 +17312,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.215: {} + electron-to-chromium@1.5.214: {} embla-carousel-react@8.6.0(react@18.3.1): dependencies: @@ -16607,6 +17354,9 @@ snapshots: entities@6.0.1: {} + env-paths@3.0.0: + optional: true + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -16839,7 +17589,7 @@ snapshots: eslint-plugin-lingui@0.9.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) micromatch: 4.0.8 transitivePeerDependencies: @@ -16879,7 +17629,7 @@ snapshots: eslint@9.35.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 @@ -16990,7 +17740,7 @@ snapshots: dependencies: cross-fetch: 4.1.0 dotenv: 16.4.7 - openai: 5.20.0(ws@8.18.3)(zod@3.25.76) + openai: 5.19.1(ws@8.18.3)(zod@3.25.76) zod: 3.25.76 zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: @@ -17214,6 +17964,13 @@ snapshots: locate-path: 7.2.0 path-exists: 5.0.0 + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + optional: true + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -17266,21 +18023,23 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.18.2(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 11.18.1 motion-utils: 11.18.1 tslib: 2.8.1 optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - framer-motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 12.23.12 motion-utils: 12.23.6 tslib: 2.8.1 optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -17533,6 +18292,9 @@ snapshots: graphemer@1.4.0: {} + graphql@16.11.0: + optional: true + gzip-size@7.0.0: dependencies: duplexer: 0.1.2 @@ -17753,6 +18515,9 @@ snapshots: he@1.2.0: {} + headers-polyfill@4.0.3: + optional: true + hls.js@1.6.11: {} hoist-non-react-statics@3.3.2: @@ -17779,6 +18544,11 @@ snapshots: hsl-to-rgb-for-reals@1.1.1: {} + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + optional: true + html-pdf@3.0.1: optionalDependencies: phantomjs-prebuilt: 2.1.16 @@ -17895,7 +18665,7 @@ snapshots: dependencies: '@ljharb/through': 2.3.14 ansi-escapes: 4.3.2 - chalk: 5.6.2 + chalk: 5.6.0 cli-cursor: 3.1.0 cli-width: 4.1.0 external-editor: 3.1.0 @@ -18043,6 +18813,9 @@ snapshots: is-negative-zero@2.0.3: {} + is-node-process@1.2.0: + optional: true + is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -18058,6 +18831,9 @@ snapshots: dependencies: isobject: 3.0.1 + is-potential-custom-element-name@1.0.1: + optional: true + is-promise@4.0.0: {} is-reference@1.2.1: @@ -18225,6 +19001,8 @@ snapshots: jiti@2.5.1: {} + jose@5.10.0: {} + jose@6.1.0: {} js-base64@3.7.8: {} @@ -18249,6 +19027,34 @@ snapshots: jsbn@0.1.1: optional: true + jsdom@26.1.0: + dependencies: + cssstyle: 4.6.0 + data-urls: 5.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.22 + parse5: 7.3.0 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.18.3 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + optional: true + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -18594,7 +19400,10 @@ snapshots: dependencies: react: 18.3.1 - magic-string@0.30.19: + luxon@3.7.1: + optional: true + + magic-string@0.30.18: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -18604,9 +19413,12 @@ snapshots: '@babel/types': 7.28.4 source-map-js: 1.2.1 - mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.0(react@18.3.1))(zod@4.1.5): + make-error@1.3.6: + optional: true + + mantine-form-zod-resolver@1.3.0(@mantine/form@8.2.8(react@18.3.1))(zod@4.1.5): dependencies: - '@mantine/form': 8.3.0(react@18.3.1) + '@mantine/form': 8.2.8(react@18.3.1) zod: 4.1.5 markdown-extensions@2.0.0: {} @@ -18861,6 +19673,9 @@ snapshots: transitivePeerDependencies: - supports-color + micro-api-client@3.3.0: + optional: true + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.2.0 @@ -19266,19 +20081,21 @@ snapshots: motion-utils@12.23.6: {} - motion@11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + motion@11.18.2(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - framer-motion: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + framer-motion: 11.18.2(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + motion@12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - framer-motion: 12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + framer-motion: 12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19291,10 +20108,39 @@ snapshots: ms@2.1.3: {} + msw@2.10.4(@types/node@22.18.1)(typescript@5.9.2): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 5.1.16(@types/node@22.18.1) + '@mswjs/interceptors': 0.39.6 + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.6 + graphql: 16.11.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + strict-event-emitter: 0.5.1 + type-fest: 4.41.0 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - '@types/node' + optional: true + mutative@1.2.0: {} mute-stream@1.0.0: {} + mute-stream@2.0.0: + optional: true + mux-embed@5.12.0: {} mux-embed@5.9.0: {} @@ -19317,6 +20163,16 @@ snapshots: neo-async@2.6.2: {} + netlify@13.3.5: + dependencies: + '@netlify/open-api': 2.37.0 + lodash-es: 4.17.21 + micro-api-client: 3.3.0 + node-fetch: 3.3.2 + p-wait-for: 5.0.2 + qs: 6.14.0 + optional: true + netmask@2.0.2: {} next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -19324,17 +20180,17 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - nitropack@2.12.5(@libsql/client@0.15.15)(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5)): + nitropack@2.12.5(@libsql/client@0.15.14)(@netlify/blobs@9.1.2)(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5)): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@rollup/plugin-alias': 5.1.1(rollup@4.50.1) - '@rollup/plugin-commonjs': 28.0.6(rollup@4.50.1) - '@rollup/plugin-inject': 5.0.5(rollup@4.50.1) - '@rollup/plugin-json': 6.1.0(rollup@4.50.1) - '@rollup/plugin-node-resolve': 16.0.1(rollup@4.50.1) - '@rollup/plugin-replace': 6.0.2(rollup@4.50.1) - '@rollup/plugin-terser': 0.4.4(rollup@4.50.1) - '@vercel/nft': 0.30.1(rollup@4.50.1) + '@rollup/plugin-alias': 5.1.1(rollup@4.50.0) + '@rollup/plugin-commonjs': 28.0.6(rollup@4.50.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.50.0) + '@rollup/plugin-json': 6.1.0(rollup@4.50.0) + '@rollup/plugin-node-resolve': 16.0.1(rollup@4.50.0) + '@rollup/plugin-replace': 6.0.2(rollup@4.50.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.50.0) + '@vercel/nft': 0.30.1(rollup@4.50.0) archiver: 7.0.1 c12: 3.2.0(magicast@0.3.5) chokidar: 4.0.3 @@ -19345,7 +20201,7 @@ snapshots: cookie-es: 2.0.0 croner: 9.1.0 crossws: 0.3.5 - db0: 0.3.2(@libsql/client@0.15.15)(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5)) + db0: 0.3.2(@libsql/client@0.15.14)(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5)) defu: 6.1.4 destr: 2.0.5 dot-prop: 9.0.0 @@ -19363,7 +20219,7 @@ snapshots: klona: 2.0.6 knitwork: 1.2.0 listhen: 1.9.0 - magic-string: 0.30.19 + magic-string: 0.30.18 magicast: 0.3.5 mime: 4.0.7 mlly: 1.8.0 @@ -19376,8 +20232,8 @@ snapshots: pkg-types: 2.3.0 pretty-bytes: 7.0.1 radix3: 1.1.2 - rollup: 4.50.1 - rollup-plugin-visualizer: 6.0.3(rollup@4.50.1) + rollup: 4.50.0 + rollup-plugin-visualizer: 6.0.3(rollup@4.50.0) scule: 1.3.0 semver: 7.7.2 serve-placeholder: 2.0.2 @@ -19391,7 +20247,7 @@ snapshots: unenv: 2.0.0-rc.20 unimport: 5.2.0 unplugin-utils: 0.3.0 - unstorage: 1.17.1(db0@0.3.2(@libsql/client@0.15.15)(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5)))(ioredis@5.7.0) + unstorage: 1.17.1(@netlify/blobs@9.1.2)(db0@0.3.2(@libsql/client@0.15.14)(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5)))(ioredis@5.7.0) untyped: 2.0.0 unwasm: 0.3.11 youch: 4.1.0-beta.8 @@ -19478,6 +20334,9 @@ snapshots: numeral@2.0.6: {} + nwsapi@2.2.22: + optional: true + nypm@0.5.4: dependencies: citty: 0.1.6 @@ -19587,7 +20446,7 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@5.20.0(ws@8.18.3)(zod@3.25.76): + openai@5.19.1(ws@8.18.3)(zod@3.25.76): optionalDependencies: ws: 8.18.3 zod: 3.25.76 @@ -19622,6 +20481,9 @@ snapshots: os-tmpdir@1.0.2: {} + outvariant@1.4.3: + optional: true + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -19648,6 +20510,14 @@ snapshots: dependencies: p-limit: 4.0.0 + p-timeout@6.1.4: + optional: true + + p-wait-for@5.0.2: + dependencies: + p-timeout: 6.1.4 + optional: true + pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 @@ -19690,6 +20560,9 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-gitignore@2.0.0: + optional: true + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -19748,6 +20621,9 @@ snapshots: lru-cache: 11.2.1 minipass: 7.1.2 + path-to-regexp@6.3.0: + optional: true + path-to-regexp@8.3.0: {} path-type@4.0.0: {} @@ -19857,12 +20733,21 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.6 - postcss-load-config@4.0.2(postcss@8.5.6): + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.6.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.1 optionalDependencies: postcss: 8.5.6 + ts-node: 10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.6.3) + + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.9.2)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.1 + optionalDependencies: + postcss: 8.5.6 + ts-node: 10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.9.2) postcss-mixins@12.1.2(postcss@8.5.6): dependencies: @@ -19910,13 +20795,15 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - posthog-js@1.261.8: + posthog-js@1.261.7(@rrweb/types@2.0.0-alpha.17): dependencies: '@posthog/core': 1.0.2 core-js: 3.45.1 fflate: 0.4.8 preact: 10.27.1 web-vitals: 4.2.4 + optionalDependencies: + '@rrweb/types': 2.0.0-alpha.17 preact@10.27.1: {} @@ -20150,6 +21037,9 @@ snapshots: filter-obj: 5.1.0 split-on-first: 3.0.0 + querystringify@2.2.0: + optional: true + queue-microtask@1.2.3: {} queue@6.0.2: @@ -20344,7 +21234,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - rc-picker@4.11.3(date-fns@4.1.0)(dayjs@1.11.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-picker@4.11.3(date-fns@4.1.0)(dayjs@1.11.18)(luxon@3.7.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.28.4 '@rc-component/trigger': 2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -20357,6 +21247,7 @@ snapshots: optionalDependencies: date-fns: 4.1.0 dayjs: 1.11.18 + luxon: 3.7.1 rc-progress@4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -20546,6 +21437,13 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-dom@18.3.1(react@19.1.1): + dependencies: + loose-envify: 1.4.0 + react: 19.1.1 + scheduler: 0.23.2 + optional: true + react-draggable@4.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: clsx: 1.2.1 @@ -20688,21 +21586,23 @@ snapshots: react-draggable: 4.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.6.2 - react-router-dom@7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router: 7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router@7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router@7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: + '@types/cookie': 0.6.0 cookie: 1.0.2 react: 18.3.1 set-cookie-parser: 2.7.1 + turbo-stream: 2.4.0 optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-scan@0.4.3(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react-router-dom@7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router@7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.50.1): + react-scan@0.4.3(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react-router-dom@7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-router@7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.50.0): dependencies: '@babel/core': 7.28.4 '@babel/generator': 7.28.3 @@ -20711,9 +21611,9 @@ snapshots: '@clack/prompts': 0.8.2 '@pivanov/utils': 0.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@preact/signals': 1.3.2(preact@10.27.1) - '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + '@rollup/pluginutils': 5.3.0(rollup@4.50.0) '@types/node': 20.19.13 - bippy: 0.3.27(@types/react@18.3.24)(react@18.3.1) + bippy: 0.3.26(@types/react@18.3.24)(react@18.3.1) esbuild: 0.25.9 estree-walker: 3.0.3 kleur: 4.1.5 @@ -20724,8 +21624,8 @@ snapshots: react-dom: 18.3.1(react@18.3.1) tsx: 4.20.5 optionalDependencies: - react-router: 7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-router-dom: 7.8.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router: 7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-router-dom: 7.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) unplugin: 2.1.0 transitivePeerDependencies: - '@types/react' @@ -20767,6 +21667,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + react@19.1.1: {} + read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -21033,6 +21935,9 @@ snapshots: require-from-string@2.0.2: {} + requires-port@1.0.0: + optional: true + resize-observer-polyfill@1.5.1: {} resolve-alpn@1.2.1: {} @@ -21083,40 +21988,40 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-visualizer@6.0.3(rollup@4.50.1): + rollup-plugin-visualizer@6.0.3(rollup@4.50.0): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.50.1 + rollup: 4.50.0 - rollup@4.50.1: + rollup@4.50.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.50.1 - '@rollup/rollup-android-arm64': 4.50.1 - '@rollup/rollup-darwin-arm64': 4.50.1 - '@rollup/rollup-darwin-x64': 4.50.1 - '@rollup/rollup-freebsd-arm64': 4.50.1 - '@rollup/rollup-freebsd-x64': 4.50.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.50.1 - '@rollup/rollup-linux-arm-musleabihf': 4.50.1 - '@rollup/rollup-linux-arm64-gnu': 4.50.1 - '@rollup/rollup-linux-arm64-musl': 4.50.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.50.1 - '@rollup/rollup-linux-ppc64-gnu': 4.50.1 - '@rollup/rollup-linux-riscv64-gnu': 4.50.1 - '@rollup/rollup-linux-riscv64-musl': 4.50.1 - '@rollup/rollup-linux-s390x-gnu': 4.50.1 - '@rollup/rollup-linux-x64-gnu': 4.50.1 - '@rollup/rollup-linux-x64-musl': 4.50.1 - '@rollup/rollup-openharmony-arm64': 4.50.1 - '@rollup/rollup-win32-arm64-msvc': 4.50.1 - '@rollup/rollup-win32-ia32-msvc': 4.50.1 - '@rollup/rollup-win32-x64-msvc': 4.50.1 + '@rollup/rollup-android-arm-eabi': 4.50.0 + '@rollup/rollup-android-arm64': 4.50.0 + '@rollup/rollup-darwin-arm64': 4.50.0 + '@rollup/rollup-darwin-x64': 4.50.0 + '@rollup/rollup-freebsd-arm64': 4.50.0 + '@rollup/rollup-freebsd-x64': 4.50.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.50.0 + '@rollup/rollup-linux-arm-musleabihf': 4.50.0 + '@rollup/rollup-linux-arm64-gnu': 4.50.0 + '@rollup/rollup-linux-arm64-musl': 4.50.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.50.0 + '@rollup/rollup-linux-ppc64-gnu': 4.50.0 + '@rollup/rollup-linux-riscv64-gnu': 4.50.0 + '@rollup/rollup-linux-riscv64-musl': 4.50.0 + '@rollup/rollup-linux-s390x-gnu': 4.50.0 + '@rollup/rollup-linux-x64-gnu': 4.50.0 + '@rollup/rollup-linux-x64-musl': 4.50.0 + '@rollup/rollup-openharmony-arm64': 4.50.0 + '@rollup/rollup-win32-arm64-msvc': 4.50.0 + '@rollup/rollup-win32-ia32-msvc': 4.50.0 + '@rollup/rollup-win32-x64-msvc': 4.50.0 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -21140,6 +22045,14 @@ snapshots: transitivePeerDependencies: - supports-color + rrweb-cssom@0.8.0: + optional: true + + rrweb-snapshot@2.0.0-alpha.18: + dependencies: + postcss: 8.5.6 + optional: true + run-applescript@7.0.0: {} run-async@3.0.0: {} @@ -21181,6 +22094,11 @@ snapshots: safer-buffer@2.1.2: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + optional: true + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 @@ -21357,7 +22275,7 @@ snapshots: ip-address: 10.0.1 smart-buffer: 4.2.0 - solid-js@1.9.9: + solid-js@1.9.7: dependencies: csstype: 3.1.3 seroval: 1.3.2 @@ -21457,6 +22375,9 @@ snapshots: optionalDependencies: bare-events: 2.6.1 + strict-event-emitter@0.5.1: + optional: true + string-convert@0.2.1: {} string-width@4.2.3: @@ -21469,7 +22390,7 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 string.prototype.matchall@4.0.12: dependencies: @@ -21532,9 +22453,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: + strip-ansi@7.1.0: dependencies: - ansi-regex: 6.2.2 + ansi-regex: 6.2.0 strip-final-newline@3.0.0: {} @@ -21572,7 +22493,7 @@ snapshots: dependencies: postcss: 8.5.6 - supports-color@10.2.2: {} + supports-color@10.2.0: {} supports-color@7.2.0: dependencies: @@ -21595,19 +22516,22 @@ snapshots: react: 18.3.1 use-sync-external-store: 1.5.0(react@18.3.1) + symbol-tree@3.2.4: + optional: true + system-architecture@0.1.0: {} tabbable@6.2.0: {} tailwind-merge@2.6.0: {} - tailwind-preset-mantine@2.1.0(@mantine/core@8.3.0(@mantine/hooks@8.3.0(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(tailwindcss@4.1.13): + tailwind-preset-mantine@2.1.0(@mantine/core@8.2.8(@mantine/hooks@8.2.8(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(tailwindcss@4.1.13): dependencies: - '@mantine/core': 8.3.0(@mantine/hooks@8.3.0(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mantine/core': 8.2.8(@mantine/hooks@8.2.8(react@18.3.1))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwindcss: 4.1.13 tsx: 4.20.5 - tailwindcss@3.4.17: + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.6.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -21626,7 +22550,34 @@ snapshots: postcss: 8.5.6 postcss-import: 15.1.0(postcss@8.5.6) postcss-js: 4.0.1(postcss@8.5.6) - postcss-load-config: 4.0.2(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.6.3)) + postcss-nested: 6.2.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.9.2)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.0.1(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.9.2)) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.10 @@ -21716,8 +22667,6 @@ snapshots: throttleit@1.0.1: optional: true - throttleit@2.1.0: {} - through@2.3.8: {} tiny-inflate@1.0.3: {} @@ -21749,6 +22698,14 @@ snapshots: dependencies: '@popperjs/core': 2.11.8 + tldts-core@6.1.86: + optional: true + + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 + optional: true + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -21771,12 +22728,30 @@ snapshots: punycode: 2.3.1 optional: true + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + optional: true + + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.86 + optional: true + tr46@0.0.3: {} tr46@1.0.1: dependencies: punycode: 2.3.1 + tr46@5.1.1: + dependencies: + punycode: 2.3.1 + optional: true + traverse@0.3.9: {} trim-lines@3.0.1: {} @@ -21793,6 +22768,48 @@ snapshots: ts-md5@1.3.1: {} + ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.6.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.18.1 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.6.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.10.6(@swc/helpers@0.5.17) + optional: true + + ts-node@10.9.2(@swc/core@1.10.6(@swc/helpers@0.5.17))(@types/node@22.18.1)(typescript@5.9.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.18.1 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.10.6(@swc/helpers@0.5.17) + optional: true + tsconfck@3.1.6(typescript@5.9.2): optionalDependencies: typescript: 5.9.2 @@ -21825,6 +22842,8 @@ snapshots: turbo-linux-arm64@2.5.6: optional: true + turbo-stream@2.4.0: {} + turbo-windows-64@2.5.6: optional: true @@ -21903,12 +22922,12 @@ snapshots: typedarray@0.0.6: optional: true - typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -21945,7 +22964,7 @@ snapshots: dependencies: acorn: 8.15.0 estree-walker: 3.0.3 - magic-string: 0.30.19 + magic-string: 0.30.18 unplugin: 2.3.10 undici-types@6.21.0: {} @@ -21978,6 +22997,9 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 + unicorn-magic@0.1.0: + optional: true + unicorn-magic@0.3.0: {} unified@11.0.5: @@ -21996,7 +23018,7 @@ snapshots: escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.1.2 - magic-string: 0.30.19 + magic-string: 0.30.18 mlly: 1.8.0 pathe: 2.0.3 picomatch: 4.0.3 @@ -22044,6 +23066,9 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + universalify@0.2.0: + optional: true + unpipe@1.0.0: {} unplugin-utils@0.2.5: @@ -22069,7 +23094,7 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - unstorage@1.17.1(db0@0.3.2(@libsql/client@0.15.15)(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5)))(ioredis@5.7.0): + unstorage@1.17.1(@netlify/blobs@9.1.2)(db0@0.3.2(@libsql/client@0.15.14)(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5)))(ioredis@5.7.0): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -22080,7 +23105,8 @@ snapshots: ofetch: 1.4.1 ufo: 1.6.1 optionalDependencies: - db0: 0.3.2(@libsql/client@0.15.15)(drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5)) + '@netlify/blobs': 9.1.2 + db0: 0.3.2(@libsql/client@0.15.14)(drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5)) ioredis: 5.7.0 untun@0.1.3: @@ -22100,7 +23126,7 @@ snapshots: unwasm@0.3.11: dependencies: knitwork: 1.2.0 - magic-string: 0.30.19 + magic-string: 0.30.18 mlly: 1.8.0 pathe: 2.0.3 pkg-types: 2.3.0 @@ -22133,8 +23159,17 @@ snapshots: url-join@5.0.0: {} + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + optional: true + urlpattern-polyfill@10.0.0: {} + urlpattern-polyfill@10.1.0: + optional: true + use-callback-ref@1.3.3(@types/react@18.3.24)(react@18.3.1): dependencies: react: 18.3.1 @@ -22190,6 +23225,9 @@ snapshots: uuid@3.4.0: optional: true + v8-compile-cache-lib@3.0.1: + optional: true + v8n@1.5.1: {} validate-npm-package-license@3.0.4: @@ -22227,13 +23265,13 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - vite-multiple-assets@2.2.5(mime-types@3.0.1)(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)): + vite-multiple-assets@2.2.5(mime-types@3.0.1)(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)): dependencies: fast-glob: 3.3.3 micromatch: 4.0.8 mime-types: 3.0.1 - rollup: 4.50.1 - vite: 5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + rollup: 4.50.0 + vite: 5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) watchpack: 2.4.4 vite-node@3.2.4(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0): @@ -22242,7 +23280,7 @@ snapshots: debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + vite: 5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) transitivePeerDependencies: - '@types/node' - less @@ -22254,22 +23292,22 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)): + vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)): dependencies: debug: 4.4.1(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.2) optionalDependencies: - vite: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + vite: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0): + vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.50.1 + rollup: 4.50.0 optionalDependencies: '@types/node': 22.18.1 fsevents: 2.3.3 @@ -22277,13 +23315,13 @@ snapshots: sugarss: 5.0.1(postcss@8.5.6) terser: 5.44.0 - vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1): + vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1): dependencies: esbuild: 0.25.9 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.50.1 + rollup: 4.50.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.18.1 @@ -22295,15 +23333,15 @@ snapshots: tsx: 4.20.5 yaml: 2.8.1 - vitefu@1.1.1(vite@6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)): + vitefu@1.1.1(vite@6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1)): optionalDependencies: - vite: 6.3.6(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) + vite: 6.3.5(@types/node@22.18.1)(jiti@2.5.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)(tsx@4.20.5)(yaml@2.8.1) - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.1)(jsdom@26.1.0)(lightningcss@1.30.1)(msw@2.10.4(@types/node@22.18.1)(typescript@5.9.2))(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) + '@vitest/mocker': 3.2.4(msw@2.10.4(@types/node@22.18.1)(typescript@5.9.2))(vite@5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -22312,7 +23350,7 @@ snapshots: chai: 5.3.3 debug: 4.4.1(supports-color@8.1.1) expect-type: 1.2.2 - magic-string: 0.30.19 + magic-string: 0.30.18 pathe: 2.0.3 picomatch: 4.0.3 std-env: 3.9.0 @@ -22321,12 +23359,13 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 5.4.20(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) + vite: 5.4.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) vite-node: 3.2.4(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.18.1 + jsdom: 26.1.0 transitivePeerDependencies: - less - lightningcss @@ -22357,6 +23396,11 @@ snapshots: w3c-keyname@2.2.8: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + optional: true + wait-port@1.1.0: dependencies: chalk: 4.1.2 @@ -22437,6 +23481,9 @@ snapshots: webidl-conversions@4.0.2: {} + webidl-conversions@7.0.0: + optional: true + webpack-virtual-modules@0.6.2: {} whatwg-encoding@3.1.1: @@ -22445,6 +23492,12 @@ snapshots: whatwg-mimetype@4.0.0: {} + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + optional: true + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -22535,16 +23588,25 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.3 + ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.1.2 + strip-ansi: 7.1.0 wrappy@1.0.2: {} + write-file-atomic@6.0.0: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + optional: true + ws@8.16.0: {} ws@8.18.3: {} + xml-name-validator@5.0.0: + optional: true + xmlbuilder2@3.1.1: dependencies: '@oozcitak/dom': 1.15.10 @@ -22552,6 +23614,9 @@ snapshots: '@oozcitak/util': 8.3.8 js-yaml: 3.14.1 + xmlchars@2.2.0: + optional: true + y18n@5.0.8: {} yallist@3.1.1: {} @@ -22600,10 +23665,16 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + yn@3.1.1: + optional: true + yocto-queue@0.1.0: {} yocto-queue@1.2.1: {} + yoctocolors-cjs@2.1.3: + optional: true + yoga-layout@3.2.1: {} youch-core@0.3.3: