diff --git a/.gitignore b/.gitignore index 02f86fcbd0..35e7397b01 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,5 @@ internal .turbo .windsurfrules -CLAUDE.md \ No newline at end of file +CLAUDE.md +.cursor/ \ 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 e6a789bd38..3a73f8faec 100644 --- a/apps/desktop/src/components/editor-area/index.tsx +++ b/apps/desktop/src/components/editor-area/index.tsx @@ -12,6 +12,7 @@ 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"; @@ -361,6 +362,21 @@ 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 cb1a374fd0..47408024ae 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) { + if (node.attrs && node.attrs.type !== "selection") { 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 deleted file mode 100644 index bf9782068c..0000000000 --- a/apps/desktop/src/components/right-panel/components/chat/chat-message.tsx +++ /dev/null @@ -1,48 +0,0 @@ -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 db0c742984..f627dbcd93 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,14 +1,16 @@ +import type { UIMessage } from "@hypr/utils/ai"; import { useEffect, useRef, useState } from "react"; -import { ChatMessage } from "./chat-message"; -import { Message } from "./types"; +import { UIMessageComponent } from "./ui-message"; interface ChatMessagesViewProps { - messages: Message[]; + messages: UIMessage[]; sessionTitle?: string; hasEnhancedNote?: boolean; onApplyMarkdown?: (markdownContent: string) => void; - isGenerating?: boolean; - isStreamingText?: boolean; + isSubmitted?: boolean; + isStreaming?: boolean; + isReady?: boolean; + isError?: boolean; } function ThinkingIndicator() { @@ -30,7 +32,7 @@ function ThinkingIndicator() { } `} -
+
Thinking . . @@ -41,27 +43,45 @@ function ThinkingIndicator() { } export function ChatMessagesView( - { messages, sessionTitle, hasEnhancedNote, onApplyMarkdown, isGenerating, isStreamingText }: ChatMessagesViewProps, + { messages, sessionTitle, hasEnhancedNote, onApplyMarkdown, isSubmitted, isStreaming, isReady, isError }: + ChatMessagesViewProps, ) { const messagesEndRef = useRef(null); const [showThinking, setShowThinking] = useState(false); const thinkingTimeoutRef = useRef(null); const shouldShowThinking = () => { - if (!isGenerating) { - return false; - } - - if (messages.length === 0) { + // Show thinking when request is submitted but not yet streaming + if (isSubmitted) { return true; } - const lastMessage = messages[messages.length - 1]; - if (lastMessage.isUser) { - 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; + } + } + } } - if (!lastMessage.isUser && !isStreamingText) { + // Fallback for other transition states + if (!isReady && !isStreaming && !isError) { return true; } @@ -89,16 +109,16 @@ export function ChatMessagesView( clearTimeout(thinkingTimeoutRef.current); } }; - }, [isGenerating, isStreamingText, messages]); + }, [isSubmitted, isStreaming, isReady, isError, 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 deleted file mode 100644 index 2b11a66fed..0000000000 --- a/apps/desktop/src/components/right-panel/components/chat/message-content.tsx +++ /dev/null @@ -1,357 +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 { 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 new file mode 100644 index 0000000000..7c43ecbfe4 --- /dev/null +++ b/apps/desktop/src/components/right-panel/components/chat/ui-message.tsx @@ -0,0 +1,473 @@ +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 new file mode 100644 index 0000000000..875cae26ca --- /dev/null +++ b/apps/desktop/src/components/right-panel/hooks/useChat2.ts @@ -0,0 +1,203 @@ +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 deleted file mode 100644 index 8759f6c4d0..0000000000 --- a/apps/desktop/src/components/right-panel/hooks/useChatLogic.ts +++ /dev/null @@ -1,622 +0,0 @@ -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 deleted file mode 100644 index a1de3c15f7..0000000000 --- a/apps/desktop/src/components/right-panel/hooks/useChatQueries.ts +++ /dev/null @@ -1,175 +0,0 @@ -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 new file mode 100644 index 0000000000..539e73ff5c --- /dev/null +++ b/apps/desktop/src/components/right-panel/hooks/useChatQueries2.ts @@ -0,0 +1,175 @@ +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 new file mode 100644 index 0000000000..a70e7616bc --- /dev/null +++ b/apps/desktop/src/components/right-panel/utils/chat-transport.ts @@ -0,0 +1,274 @@ +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 3fb3bb7877..f73937d781 100644 --- a/apps/desktop/src/components/right-panel/utils/chat-utils.ts +++ b/apps/desktop/src/components/right-panel/utils/chat-utils.ts @@ -2,7 +2,8 @@ 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 { Message } from "../components/chat/types"; +import type { UIMessage } from "@hypr/utils/ai"; +import { convertToModelMessages } from "@hypr/utils/ai"; export const formatDate = (date: Date) => { const now = new Date(); @@ -33,27 +34,101 @@ export const focusInput = (chatInputRef: React.RefObject) = } }; -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; +/** + * 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; + } - const { type } = await connectorCommands.getLlmConnection(); + // 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 participants = sessionId ? await dbCommands.sessionListParticipants(sessionId) : []; + // Keep all other parts (text, etc.) + return true; + }); - const calendarEvent = sessionId ? await dbCommands.sessionGetEvent(sessionId) : null; + return { + ...message, + parts: cleanedParts, + }; + }); +}; +/** + * 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", @@ -63,12 +138,14 @@ export const prepareMessageHistory = 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" @@ -79,6 +156,17 @@ export const prepareMessageHistory = 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 || []), @@ -94,130 +182,138 @@ export const prepareMessageHistory = async ( mcpTools: mcpToolsArray, }); - 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, - }); - }); - - const processedMentions: Array<{ type: string; label: string; content: string }> = []; + // Clean UIMessages to remove problematic tool states before conversion + const cleanedMessages = cleanUIMessages(messages); - if (mentionedContent && mentionedContent.length > 0) { - for (const mention of mentionedContent) { - try { - if (mention.type === "note") { - const sessionData = await dbCommands.getSession({ id: mention.id }); + // Convert cleaned UIMessages to model messages + const modelMessages = convertToModelMessages(cleanedMessages); + const preparedMessages: any[] = []; - if (sessionData) { - let noteContent = ""; + // Always add system message first + preparedMessages.push({ + role: "system", + content: systemContent, + }); - 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; + // 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, + }); + } } - 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) + "..."; + 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`; + } + } } - - humanContent += `- "${session.title || "Untitled"}": ${briefContent}\n`; + } catch (error) { + console.error(`Error fetching notes for person "${humanData.full_name}":`, error); } } + + processedMentions.push({ + type: "human", + label: mention.label, + content: humanContent, + }); } - } catch (error) { - console.error(`Error fetching notes for person "${humanData.full_name}":`, error); } - } - - if (humanData) { - processedMentions.push({ - type: "human", - label: mention.label, - content: humanContent, - }); + } catch (error) { + console.error(`Error fetching content for "${mention.label}":`, error); } } - } catch (error) { - console.error(`Error fetching content for "${mention.label}":`, error); } - } - } - - // 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, - }); + // 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, + } + : undefined, + }); + + preparedMessages.push({ + role: "user", + content: enhancedContent, + }); + } else { + // For all other messages, just add them as-is + preparedMessages.push(msg); + } } - return conversationHistory; + return preparedMessages; }; 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 6ce1908df7..b83cf263eb 100644 --- a/apps/desktop/src/components/right-panel/utils/markdown-parser.ts +++ b/apps/desktop/src/components/right-panel/utils/markdown-parser.ts @@ -1,7 +1,12 @@ -import { MessagePart } from "../components/chat/types"; +// Simple type for parsed markdown parts +export interface ParsedPart { + type: "text" | "markdown"; + content: string; + isComplete?: boolean; +} -export const parseMarkdownBlocks = (text: string): MessagePart[] => { - const parts: MessagePart[] = []; +export const parseMarkdownBlocks = (text: string): ParsedPart[] => { + const parts: ParsedPart[] = []; 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 282cde25d3..7196c30c00 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,9 +29,13 @@ export const createEditEnhancedNoteTool = ({ return { success: false, error: "No session ID available" }; } - const sessionStore = sessions[sessionId]; - if (!sessionStore) { - return { success: false, error: "Session not found" }; + // 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"); + } } 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 941e8132fa..8ce8cc231f 100644 --- a/apps/desktop/src/components/right-panel/views/chat-view.tsx +++ b/apps/desktop/src/components/right-panel/views/chat-view.tsx @@ -1,9 +1,12 @@ -import { useQuery } from "@tanstack/react-query"; import { useNavigate } from "@tanstack/react-router"; -import { useEffect, useRef, useState } from "react"; +import { useEffect, useState } from "react"; +import { showProGateModal } from "@/components/pro-gate-modal/service"; import { useHypr, useRightPanel } from "@/contexts"; -import { commands as connectorCommands } from "@hypr/plugin-connector"; +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 { ChatHistoryView, ChatInput, @@ -14,73 +17,190 @@ import { } from "../components/chat"; import { useActiveEntity } from "../hooks/useActiveEntity"; -import { useChatLogic } from "../hooks/useChatLogic"; -import { useChatQueries } from "../hooks/useChatQueries"; -import type { Message } from "../types/chat-types"; +import { useChat2 } from "../hooks/useChat2"; +import { useChatQueries2 } from "../hooks/useChatQueries2"; import { focusInput, formatDate } from "../utils/chat-utils"; export function ChatView() { const navigate = useNavigate(); - const { isExpanded, chatInputRef } = useRightPanel(); + const { isExpanded, chatInputRef, pendingSelection } = 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 [hasChatStarted, setHasChatStarted] = useState(false); - const [currentChatGroupId, setCurrentChatGroupId] = useState(null); + const [currentConversationId, setCurrentConversationId] = useState(null); const [chatHistory, _setChatHistory] = useState([]); - const prevIsGenerating = useRef(false); - const { activeEntity, sessionId } = useActiveEntity({ - setMessages, + setMessages: () => {}, setInputValue, setShowHistory, - setHasChatStarted, + setHasChatStarted: () => {}, }); - const llmConnectionQuery = useQuery({ - queryKey: ["llm-connection"], - queryFn: () => connectorCommands.getLlmConnection(), - refetchOnWindowFocus: true, - }); + const sessions = useSessions((s) => s.sessions); - const { chatGroupsQuery, sessionData, getChatGroupId } = useChatQueries({ + const { + conversations, + sessionData, + createConversation, + getOrCreateConversationId, + } = useChatQueries2({ sessionId, userId, - currentChatGroupId, - setCurrentChatGroupId, - setMessages, - setHasChatStarted, - prevIsGenerating, + currentConversationId, + setCurrentConversationId, + setMessages: () => {}, + isGenerating: false, }); const { + messages, + stop, + setMessages, isGenerating, - isStreamingText, - handleSubmit, - handleQuickAction, - handleApplyMarkdown, - handleKeyDown, - handleStop, - } = useChatLogic({ + sendMessage, + status, + } = useChat2({ sessionId, userId, - activeEntity, - messages, - inputValue, - hasChatStarted, - setMessages, - setInputValue, - setHasChatStarted, - getChatGroupId, - sessionData, - chatInputRef, - llmConnectionQuery, + conversationId: currentConversationId, + sessionData: sessionData, + selectionData: pendingSelection, + onError: (err: Error) => { + console.error("Chat error:", err); + }, }); + 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); }; @@ -89,19 +209,29 @@ export function ChatView() { focusInput(chatInputRef); }; - const handleNewChat = async () => { + const handleNewChat = () => { + if (!messages || messages.length === 0) { + return; + } + if (!sessionId || !userId) { return; } - setCurrentChatGroupId(null); - setMessages([]); - setHasChatStarted(false); + if (isGenerating) { + return; + } + + setCurrentConversationId(null); setInputValue(""); + setMessages([]); }; const handleSelectChatGroup = async (groupId: string) => { - setCurrentChatGroupId(groupId); + if (isGenerating) { + return; + } + setCurrentConversationId(groupId); }; const handleViewHistory = () => { @@ -112,7 +242,7 @@ export function ChatView() { setSearchValue(e.target.value); }; - const handleSelectChat = (chatId: string) => { + const handleSelectChat = (_chatId: string) => { setShowHistory(false); }; @@ -155,7 +285,7 @@ export function ChatView() { @@ -169,11 +299,13 @@ export function ChatView() { : ( )} diff --git a/crates/db-user/src/chat_conversations_migration.sql b/crates/db-user/src/chat_conversations_migration.sql new file mode 100644 index 0000000000..03214e21dc --- /dev/null +++ b/crates/db-user/src/chat_conversations_migration.sql @@ -0,0 +1,9 @@ +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 new file mode 100644 index 0000000000..83bdb41eb3 --- /dev/null +++ b/crates/db-user/src/chat_conversations_ops.rs @@ -0,0 +1,76 @@ +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 new file mode 100644 index 0000000000..0724c66f1f --- /dev/null +++ b/crates/db-user/src/chat_conversations_types.rs @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000000..1d93bdfb67 --- /dev/null +++ b/crates/db-user/src/chat_messages_v2_migration.sql @@ -0,0 +1,12 @@ +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 new file mode 100644 index 0000000000..62cea259bc --- /dev/null +++ b/crates/db-user/src/chat_messages_v2_ops.rs @@ -0,0 +1,74 @@ +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 new file mode 100644 index 0000000000..f8ef073c7f --- /dev/null +++ b/crates/db-user/src/chat_messages_v2_types.rs @@ -0,0 +1,28 @@ +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 402b9c1dc3..de07e00df8 100644 --- a/crates/db-user/src/lib.rs +++ b/crates/db-user/src/lib.rs @@ -1,9 +1,13 @@ 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; @@ -26,6 +30,10 @@ 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::*; @@ -34,6 +42,10 @@ 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::*; @@ -130,7 +142,7 @@ impl std::ops::Deref for UserDatabase { } // Append only. Do not reorder. -const MIGRATIONS: [&str; 25] = [ +const MIGRATIONS: [&str; 26] = [ include_str!("./calendars_migration.sql"), include_str!("./configs_migration.sql"), include_str!("./events_migration.sql"), @@ -155,7 +167,8 @@ const MIGRATIONS: [&str; 25] = [ include_str!("./events_migration_2.sql"), include_str!("./chat_messages_migration_1.sql"), include_str!("./chat_messages_migration_2.sql"), - include_str!("./templates_migration_1.sql"), + include_str!("./chat_conversations_migration.sql"), + include_str!("./chat_messages_v2_migration.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 33e748b139..36d4ad46fd 100644 --- a/crates/db-user/src/sessions_ops.rs +++ b/crates/db-user/src/sessions_ops.rs @@ -110,28 +110,6 @@ 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 04af4f62f2..6b24e8360b 100644 --- a/package.json +++ b/package.json @@ -2,5 +2,8 @@ "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 7903d84638..67930aab3a 100644 --- a/packages/utils/src/ai.ts +++ b/packages/utils/src/ai.ts @@ -5,17 +5,25 @@ 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 ec052cd8aa..1f0c105c15 100644 --- a/plugins/db/build.rs +++ b/plugins/db/build.rs @@ -47,6 +47,11 @@ 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 2edaeb223f..443f458e8e 100644 --- a/plugins/db/js/bindings.gen.ts +++ b/plugins/db/js/bindings.gen.ts @@ -147,6 +147,21 @@ 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 }); } } @@ -161,10 +176,13 @@ async deleteTag(tagId: 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 new file mode 100644 index 0000000000..72050e8b01 --- /dev/null +++ b/plugins/db/permissions/autogenerated/commands/create_conversation.toml @@ -0,0 +1,13 @@ +# 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 new file mode 100644 index 0000000000..984569b693 --- /dev/null +++ b/plugins/db/permissions/autogenerated/commands/create_message_v2.toml @@ -0,0 +1,13 @@ +# 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 new file mode 100644 index 0000000000..b81f80dde3 --- /dev/null +++ b/plugins/db/permissions/autogenerated/commands/list_conversations.toml @@ -0,0 +1,13 @@ +# 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 new file mode 100644 index 0000000000..4e6ee3cbbb --- /dev/null +++ b/plugins/db/permissions/autogenerated/commands/list_messages_v2.toml @@ -0,0 +1,13 @@ +# 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 new file mode 100644 index 0000000000..4515d85b9d --- /dev/null +++ b/plugins/db/permissions/autogenerated/commands/update_message_v2_parts.toml @@ -0,0 +1,13 @@ +# 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 aa46cf001c..ba9c91077b 100644 --- a/plugins/db/permissions/autogenerated/reference.md +++ b/plugins/db/permissions/autogenerated/reference.md @@ -44,6 +44,11 @@ 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` @@ -116,6 +121,58 @@ 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` @@ -610,6 +667,32 @@ 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` @@ -662,6 +745,32 @@ 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` @@ -1078,6 +1187,32 @@ 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 8a6cf53d37..8f90a89631 100644 --- a/plugins/db/permissions/default.toml +++ b/plugins/db/permissions/default.toml @@ -48,6 +48,11 @@ 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 dea48f27e8..ddf2dad5e1 100644 --- a/plugins/db/permissions/schemas/schema.json +++ b/plugins/db/permissions/schemas/schema.json @@ -318,6 +318,30 @@ "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", @@ -546,6 +570,18 @@ "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", @@ -570,6 +606,18 @@ "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", @@ -762,6 +810,18 @@ "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", @@ -859,10 +919,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-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-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`", "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-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-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`" } ] } diff --git a/plugins/db/src/commands/chats_v2.rs b/plugins/db/src/commands/chats_v2.rs new file mode 100644 index 0000000000..3f5e3aecf3 --- /dev/null +++ b/plugins/db/src/commands/chats_v2.rs @@ -0,0 +1,102 @@ +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 4002f26347..57141d09c3 100644 --- a/plugins/db/src/commands/mod.rs +++ b/plugins/db/src/commands/mod.rs @@ -1,5 +1,6 @@ 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 86a1c8b012..c05f7eb5a6 100644 --- a/plugins/db/src/lib.rs +++ b/plugins/db/src/lib.rs @@ -70,6 +70,11 @@ 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 36321d1563..feb9ff1da0 100644 --- a/plugins/local-llm/js/bindings.gen.ts +++ b/plugins/local-llm/js/bindings.gen.ts @@ -57,6 +57,11 @@ async setCurrentModelSelection(model: ModelSelection) : Promise { /** user-defined events **/ +export const events = __makeEvents__<{ +llmEvent: LLMEvent +}>({ +llmEvent: "plugin:local-llm:llm-event" +}) /** user-defined constants **/ @@ -65,6 +70,7 @@ async setCurrentModelSelection(model: ModelSelection) : Promise { /** 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 e6e8f9a3b8..a28e7a4def 100644 --- a/plugins/local-llm/src/events.rs +++ b/plugins/local-llm/src/events.rs @@ -30,3 +30,9 @@ 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 4fae51d766..9e9862cef6 100644 --- a/plugins/local-llm/src/ext.rs +++ b/plugins/local-llm/src/ext.rs @@ -2,6 +2,7 @@ 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; @@ -194,7 +195,12 @@ impl> LocalLlmPluginExt for T { let model_manager = crate::ModelManager::new(model_path); let state = self.state::(); - let server_state = crate::ServerState::new(model_manager); + 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 = 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 f84dcdfb75..1665ad0c73 100644 --- a/plugins/local-llm/src/lib.rs +++ b/plugins/local-llm/src/lib.rs @@ -40,6 +40,7 @@ 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, @@ -65,7 +66,9 @@ pub fn init() -> tauri::plugin::TauriPlugin { tauri::plugin::Builder::new(PLUGIN_NAME) .invoke_handler(specta_builder.invoke_handler()) - .setup(|app, _api| { + .setup(move |app, _api| { + specta_builder.mount_events(app); + 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 33218a68e4..841c76baf4 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, ChatCompletionRequestMessage, + ChatChoice, ChatChoiceStream, ChatCompletionMessageToolCallChunk, 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::ModelManager; +use crate::{events::LLMEvent, ModelManager}; #[derive(Clone)] pub struct ServerHandle { @@ -38,13 +38,18 @@ impl ServerHandle { #[derive(Clone)] pub struct ServerState { + pub emitter: Arc, pub model_manager: ModelManager, pub cancellation_tokens: Arc>>, } impl ServerState { - pub fn new(model_manager: ModelManager) -> Self { + pub fn new( + emitter: impl Fn(LLMEvent) + 'static + Send + Sync, + model_manager: ModelManager, + ) -> Self { Self { + emitter: Arc::new(emitter), model_manager, cancellation_tokens: Arc::new(Mutex::new(Vec::new())), } @@ -122,51 +127,12 @@ 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.model_manager.clone()); + let provider = LocalProvider::new(state.emitter.clone(), state.model_manager.clone()); tracing::info!("using_local_provider"); provider.chat_completions(request, &state).await }; @@ -177,12 +143,16 @@ async fn chat_completions( } struct LocalProvider { + emitter: Arc, model_manager: ModelManager, } impl LocalProvider { - fn new(model_manager: ModelManager) -> Self { - Self { model_manager } + fn new(emitter: Arc, model_manager: ModelManager) -> Self { + Self { + emitter, + model_manager, + } } async fn chat_completions( @@ -193,11 +163,19 @@ impl LocalProvider { let model = self.model_manager.get_model().await?; tracing::info!("loaded_model: {:?}", model.name); - build_chat_completion_response(&request, || { - let (stream, token) = Self::build_stream(&model, &request)?; - state.register_token(token.clone()); - Ok(stream) - }) + 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)); + }, + ) .await } @@ -237,17 +215,7 @@ impl LocalProvider { } }; - 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 tools = request.tools.clone(); let request = hypr_llama::LlamaRequest { messages, @@ -299,11 +267,15 @@ 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) - }) + build_chat_completion_response( + &request, + || { + let (stream, token) = Self::build_stream(&content); + state.register_token(token.clone()); + Ok(stream) + }, + |_v| {}, + ) .await } @@ -348,6 +320,7 @@ 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() @@ -508,34 +481,9 @@ async fn build_chat_completion_response( })) } }, - 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 - })) + StreamEvent::Progress(v) => { + progress_fn(v); + None } } }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b267490e4f..1ba285c73f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,10 @@ 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 @@ -25,7 +29,7 @@ importers: version: 0.13.8(typescript@5.9.2)(zod@4.1.5) better-auth: specifier: ^1.3.8 - version: 1.3.8(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + version: 1.3.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) hono: specifier: ^4.9.6 version: 4.9.6 @@ -50,25 +54,25 @@ importers: dependencies: '@ai-sdk/openai': specifier: ^2.0.24 - version: 2.0.24(zod@4.1.5) + version: 2.0.27(zod@4.1.5) '@cerbos/grpc': specifier: ^0.22.1 version: 0.22.1 '@libsql/client': specifier: ^0.15.14 - version: 0.15.14 + version: 0.15.15 '@mantine/core': specifier: ^8.2.8 - 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) + 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) '@mantine/form': specifier: ^8.2.8 - version: 8.2.8(react@18.3.1) + version: 8.3.0(react@18.3.1) '@mantine/hooks': specifier: ^8.2.8 - version: 8.2.8(react@18.3.1) + version: 8.3.0(react@18.3.1) '@mantine/notifications': specifier: ^8.2.8 - 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) + 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) '@tabler/icons-react': specifier: ^3.34.1 version: 3.34.1(react@18.3.1) @@ -77,19 +81,19 @@ importers: version: 5.87.1(react@18.3.1) '@tanstack/react-router': specifier: ^1.131.35 - version: 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.131.36(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.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) + 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) '@tanstack/react-start': specifier: ^1.131.35 - 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)) + 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)) ai: specifier: ^5.0.34 - version: 5.0.34(zod@4.1.5) + version: 5.0.37(zod@4.1.5) better-auth: specifier: ^1.3.8 - version: 1.3.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.3.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -98,22 +102,22 @@ importers: version: 0.31.4 drizzle-orm: specifier: ^0.44.5 - version: 0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5) + version: 0.44.5(@libsql/client@0.15.15)(@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.14)(@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.15)(@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.2.8(react@18.3.1))(zod@4.1.5) + version: 1.3.0(@mantine/form@8.3.0(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.7(@rrweb/types@2.0.0-alpha.17) + version: 1.261.8 react: specifier: ^18.3.1 version: 18.3.1 @@ -122,7 +126,7 @@ importers: version: 18.3.1(react@18.3.1) tailwind-preset-mantine: specifier: ^2.1.0 - 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) + 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) zod: specifier: ^4.1.5 version: 4.1.5 @@ -141,7 +145,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.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)) + 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)) autoprefixer: specifier: ^10.4.21 version: 10.4.21(postcss@8.5.6) @@ -165,10 +169,10 @@ importers: version: 5.9.2 vite: specifier: ^6.3.5 - 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) + 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) vite-tsconfig-paths: specifier: ^5.1.4 - 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)) + 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)) apps/desktop: dependencies: @@ -252,7 +256,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.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) + 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) '@modelcontextprotocol/sdk': specifier: ^1.17.5 version: 1.17.5 @@ -294,16 +298,16 @@ importers: version: 5.87.1(react@18.3.1) '@tanstack/react-query-devtools': specifier: ^5.87.1 - version: 5.87.1(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1) + version: 5.87.3(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1) '@tanstack/react-router': specifier: ^1.131.35 - version: 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-router-devtools': specifier: ^1.131.35 - 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) + 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) '@tanstack/zod-adapter': specifier: ^1.131.35 - 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) + 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) '@tauri-apps/api': specifier: ^2.8.0 version: 2.8.0 @@ -345,7 +349,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.4.1(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.8.2(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 @@ -378,7 +382,7 @@ importers: version: 0.525.0(react@18.3.1) motion: specifier: ^11.18.2 - version: 11.18.2(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) mutative: specifier: ^1.2.0 version: 1.2.0 @@ -405,7 +409,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.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) + 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) remixicon: specifier: ^4.6.0 version: 4.6.0 @@ -442,13 +446,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.19(@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.20(@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.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)) + 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)) '@tauri-apps/cli': specifier: ^2.8.4 version: 2.8.4 @@ -475,7 +479,7 @@ importers: version: 1.3.5 '@vitejs/plugin-react': specifier: ^4.7.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)) + 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)) '@wdio/cli': specifier: ^8.46.0 version: 8.46.0 @@ -514,22 +518,22 @@ importers: version: 8.5.6 tailwindcss: specifier: ^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)) + version: 3.4.17 typescript: specifier: ^5.9.2 version: 5.9.2 typescript-eslint: specifier: ^8.42.0 - version: 8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) vite: specifier: ^5.4.19 - 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) + 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) vite-multiple-assets: specifier: ^2.2.5 - 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)) + 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)) vitest: specifier: ^3.2.4 - 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) + 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) apps/pro: dependencies: @@ -581,7 +585,7 @@ importers: version: 0.8.4 '@tanstack/react-query': specifier: ^5.87.1 - version: 5.87.1(react@19.1.1) + version: 5.87.1(react@18.3.1) devDependencies: '@hey-api/openapi-ts': specifier: ^0.78.3 @@ -609,7 +613,7 @@ importers: version: 5.87.1(react@18.3.1) '@tanstack/react-router': specifier: ^1.131.35 - version: 1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 1.131.36(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) @@ -709,7 +713,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)(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) + 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) packages/ui: dependencies: @@ -784,7 +788,7 @@ importers: version: 0.525.0(react@18.3.1) motion: specifier: ^12.23.12 - version: 12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 12.23.12(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) @@ -836,7 +840,7 @@ importers: version: 2.6.0 tailwindcss: specifier: ^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)) + version: 3.4.17 typescript: specifier: ~5.6.3 version: 5.6.3 @@ -866,7 +870,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)(typescript@5.9.2))(babel-plugin-macros@3.1.0) + version: 5.4.1(@lingui/babel-plugin-lingui-macro@5.4.1(babel-plugin-macros@3.1.0))(babel-plugin-macros@3.1.0) '@tauri-apps/api': specifier: ^2.8.0 version: 2.8.0 @@ -875,7 +879,7 @@ importers: version: 2.5.2 ai: specifier: ^5.0.34 - version: 5.0.34(zod@4.1.5) + version: 5.0.37(zod@4.1.5) date-fns: specifier: ^4.1.0 version: 4.1.0 @@ -900,7 +904,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)(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) + 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) plugins/analytics: dependencies: @@ -1051,8 +1055,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4 - '@ai-sdk/openai@2.0.24': - resolution: {integrity: sha512-8fPFvlb6PpDjy6JtJBP3Hqs4THKFNYOw6+j7nG7iJivNp+uvHlrHwnU6wQgMAesxEDjZRmVB6ntXWxGPCbBeJw==} + '@ai-sdk/openai@2.0.27': + resolution: {integrity: sha512-5fUFBlE9qGFgezVIVkzQk87qZYkxsn5PsedtCFPoGxHK6c2QVYHuD1UcrVIKt0elr043Vx17Xo/gS5oJAR5YEQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4 @@ -1067,6 +1071,16 @@ 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'} @@ -1111,9 +1125,6 @@ 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'} @@ -1286,15 +1297,6 @@ 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==} @@ -1337,38 +1339,6 @@ 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==} @@ -1427,12 +1397,6 @@ 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==} @@ -1902,8 +1866,8 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.8.0': - resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -1940,9 +1904,6 @@ 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==} @@ -1967,12 +1928,6 @@ 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: @@ -2063,37 +2018,6 @@ 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==} @@ -2144,9 +2068,6 @@ 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==} @@ -2163,11 +2084,11 @@ packages: '@levischuck/tiny-cbor@0.2.11': resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==} - '@libsql/client@0.15.14': - resolution: {integrity: sha512-oXeFYcSyAsYWvpWVmynrwNwb+NHNHtMfSIVdfQTF1B9RsgDXQE5YCDP3SS0i1FA8nuLWy2trFDVwP1b2LNdNPQ==} + '@libsql/client@0.15.15': + resolution: {integrity: sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==} - '@libsql/core@0.15.14': - resolution: {integrity: sha512-b2eVQma78Ss+edIIFi7LnhhyUy5hAJjYvrSAD5RFdO/YKP2rEvNAT1pIn2Li7NrqcsMmoEQWlpUWH4fWMdXtpQ==} + '@libsql/core@0.15.15': + resolution: {integrity: sha512-C88Z6UKl+OyuKKPwz224riz02ih/zHYI3Ho/LAcVOgjsunIRZoBw7fjRfaH9oPMmSNeQfhGklSG2il1URoOIsA==} '@libsql/darwin-arm64@0.5.22': resolution: {integrity: sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==} @@ -2305,8 +2226,8 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 - '@lobehub/icons@2.31.0': - resolution: {integrity: sha512-P7cYBdi3vPAr7f/kk1xYRiobCMGQHhipslYbdEXOu/LbLRWChcuGpjPehci10pe58byD9Pxftq1f20/7c8tZYA==} + '@lobehub/icons@2.32.0': + resolution: {integrity: sha512-lVNs0g2Xa8sKYh4Bldf8to8sK47t5wN7Ijtqt619cCfkvRFZ8i1Y4QlrLRDKGIci03SU3Wtqka/By57esOsXkw==} peerDependencies: antd: ^5.23.0 react: ^19.0.0 @@ -2320,33 +2241,33 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 - '@mantine/core@8.2.8': - resolution: {integrity: sha512-dybAXrlQ+QiIhpnVCkdH6P4Sjm9I9RymYXfDp97oj9KfGRMEJGLDdPAwp/2GhXe7UdDkzqD48JCkbfRWF2Q+qA==} + '@mantine/core@8.3.0': + resolution: {integrity: sha512-WDKnEMkYYXrovqwKl3jHNqXWZkKS349/Btbvynldw0zierm0dJqYXNlLdPhjg9CkmTM3FFDg6MjYwlsHL8K8VQ==} peerDependencies: - '@mantine/hooks': 8.2.8 + '@mantine/hooks': 8.3.0 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/form@8.2.8': - resolution: {integrity: sha512-edigaUCmyxoPcqhMgkgJHXRgbzR1tym88xQNNgfGA1KYc9gr0BTk/3dOa5B93HIVdO9/DEXZwYKN4cjrKPDY+g==} + '@mantine/form@8.3.0': + resolution: {integrity: sha512-x6NeoUk+Umd56CwXB28cyZxTztMkNMKvlLnRoTkguf6/ak3xRvGDJ4wcVHfYxls8jDSEvCT94voa/cirXObkyg==} peerDependencies: react: ^18.x || ^19.x - '@mantine/hooks@8.2.8': - resolution: {integrity: sha512-KK1krCcXizWT6JF8gWexv58imQBbviylAJqSqdZ4zUPgrpe81ehMyfxo5Z9EZsnSwMxkB4RLMhCCJhC5g8GvLA==} + '@mantine/hooks@8.3.0': + resolution: {integrity: sha512-y/D8Hi4C1iEjTpjeMWKmz9QHMdPm5qQsBsRz6rpdRlVurtBhNf3DCJEtvwtmmKN1F9vBK8DDGy/OjQPUHLDqcA==} peerDependencies: react: ^18.x || ^19.x - '@mantine/notifications@8.2.8': - resolution: {integrity: sha512-luNksAUkROoMzKCB/30nQ8o38wt54ktylbpBcTrAcjE1q00nH/IEYLS58iUYGf8l/xGBV1KH8jgSik58iqk++A==} + '@mantine/notifications@8.3.0': + resolution: {integrity: sha512-x8L+1ij1UZxcMECODK6tnwxgfUl5dyjujv0VBg4GLvcn6L3nUP8YaOhSp8ZJJqfE9m/+LJ/brCx5vik6X3WjKA==} peerDependencies: - '@mantine/core': 8.2.8 - '@mantine/hooks': 8.2.8 + '@mantine/core': 8.3.0 + '@mantine/hooks': 8.3.0 react: ^18.x || ^19.x react-dom: ^18.x || ^19.x - '@mantine/store@8.2.8': - resolution: {integrity: sha512-xma5vcJlcR2UN6NZj0Rhskfppmz6wUTY/52EBU9sKZw60e1iiuTX2Bk/sfUa34VKZF4cRS46VLz2qstyCJne4Q==} + '@mantine/store@8.3.0': + resolution: {integrity: sha512-rgF4ZCXeU2C5qvGPjUfslspho9UQL2xPDtG8VWY+q60ZyEeUykdVfegny8GnuHlysjpg4nFaaWr3jcJvUlvcdA==} peerDependencies: react: ^18.x || ^19.x @@ -2377,10 +2298,6 @@ 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==} @@ -2409,28 +2326,13 @@ packages: '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - '@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/ciphers@2.0.0': + resolution: {integrity: sha512-j/l6jpnpaIBM87cAYPJzi/6TgqmBv9spkqPyCXvRYsu5uxqh6tPJZDnD85yo8VWqzTuTQPgfv7NgT63u7kbwAQ==} + 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} + '@noble/hashes@2.0.0': + resolution: {integrity: sha512-h8VUBlE8R42+XIDO229cgisD287im3kdY6nbNZJFjc6ZvKIXPYXe6Vc/t+kyjFdMFyt5JpapzTsEg8n63w5/lw==} + engines: {node: '>= 20.19.0'} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -2460,15 +2362,6 @@ 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'} @@ -2561,20 +2454,20 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@peculiar/asn1-android@2.4.0': - resolution: {integrity: sha512-YFueREq97CLslZZBI8dKzis7jMfEHSLxM+nr0Zdx1POiXFLjqqwoY5s0F1UimdBiEw/iKlHey2m56MRDv7Jtyg==} + '@peculiar/asn1-android@2.5.0': + resolution: {integrity: sha512-t8A83hgghWQkcneRsgGs2ebAlRe54ns88p7ouv8PW2tzF1nAW4yHcL4uZKrFpIU+uszIRzTkcCuie37gpkId0A==} - '@peculiar/asn1-ecc@2.4.0': - resolution: {integrity: sha512-fJiYUBCJBDkjh347zZe5H81BdJ0+OGIg0X9z06v8xXUoql3MFeENUX0JsjCaVaU9A0L85PefLPGYkIoGpTnXLQ==} + '@peculiar/asn1-ecc@2.5.0': + resolution: {integrity: sha512-t4eYGNhXtLRxaP50h3sfO6aJebUCDGQACoeexcelL4roMFRRVgB20yBIu2LxsPh/tdW9I282gNgMOyg3ywg/mg==} - '@peculiar/asn1-rsa@2.4.0': - resolution: {integrity: sha512-6PP75voaEnOSlWR9sD25iCQyLgFZHXbmxvUfnnDcfL6Zh5h2iHW38+bve4LfH7a60x7fkhZZNmiYqAlAff9Img==} + '@peculiar/asn1-rsa@2.5.0': + resolution: {integrity: sha512-qMZ/vweiTHy9syrkkqWFvbT3eLoedvamcUdnnvwyyUNv5FgFXA3KP8td+ATibnlZ0EANW5PYRm8E6MJzEB/72Q==} - '@peculiar/asn1-schema@2.4.0': - resolution: {integrity: sha512-umbembjIWOrPSOzEGG5vxFLkeM8kzIhLkgigtsOrfLKnuzxWxejAcUX+q/SoZCdemlODOcr5WiYa7+dIEzBXZQ==} + '@peculiar/asn1-schema@2.5.0': + resolution: {integrity: sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ==} - '@peculiar/asn1-x509@2.4.0': - resolution: {integrity: sha512-F7mIZY2Eao2TaoVqigGMLv+NDdpwuBKU1fucHPONfzaBS4JXXCNCmfO0Z3dsy7JzKGqtDcYC1mr9JjaZQZNiuw==} + '@peculiar/asn1-x509@2.5.0': + resolution: {integrity: sha512-CpwtMCTJvfvYTFMuiME5IH+8qmDe3yEWzKHe7OOADbGfq7ohxeLaXwQo0q4du3qs0AII3UbLCvb9NF/6q0oTKQ==} '@pivanov/utils@0.0.2': resolution: {integrity: sha512-q9CN0bFWxWgMY5hVVYyBgez1jGiLBa6I+LkG37ycylPhFvEGOOeaADGtUSu46CaZasPnlY8fCdVJZmrgKb1EPA==} @@ -3469,114 +3362,111 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.50.0': - resolution: {integrity: sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==} + '@rollup/rollup-android-arm-eabi@4.50.1': + resolution: {integrity: sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.50.0': - resolution: {integrity: sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==} + '@rollup/rollup-android-arm64@4.50.1': + resolution: {integrity: sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.50.0': - resolution: {integrity: sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==} + '@rollup/rollup-darwin-arm64@4.50.1': + resolution: {integrity: sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.50.0': - resolution: {integrity: sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==} + '@rollup/rollup-darwin-x64@4.50.1': + resolution: {integrity: sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.50.0': - resolution: {integrity: sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==} + '@rollup/rollup-freebsd-arm64@4.50.1': + resolution: {integrity: sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.50.0': - resolution: {integrity: sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==} + '@rollup/rollup-freebsd-x64@4.50.1': + resolution: {integrity: sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.50.0': - resolution: {integrity: sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==} + '@rollup/rollup-linux-arm-gnueabihf@4.50.1': + resolution: {integrity: sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.50.0': - resolution: {integrity: sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==} + '@rollup/rollup-linux-arm-musleabihf@4.50.1': + resolution: {integrity: sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.50.0': - resolution: {integrity: sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==} + '@rollup/rollup-linux-arm64-gnu@4.50.1': + resolution: {integrity: sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.50.0': - resolution: {integrity: sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==} + '@rollup/rollup-linux-arm64-musl@4.50.1': + resolution: {integrity: sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.50.0': - resolution: {integrity: sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.50.1': + resolution: {integrity: sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.50.0': - resolution: {integrity: sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==} + '@rollup/rollup-linux-ppc64-gnu@4.50.1': + resolution: {integrity: sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.50.0': - resolution: {integrity: sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==} + '@rollup/rollup-linux-riscv64-gnu@4.50.1': + resolution: {integrity: sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.50.0': - resolution: {integrity: sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==} + '@rollup/rollup-linux-riscv64-musl@4.50.1': + resolution: {integrity: sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.50.0': - resolution: {integrity: sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==} + '@rollup/rollup-linux-s390x-gnu@4.50.1': + resolution: {integrity: sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.50.0': - resolution: {integrity: sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==} + '@rollup/rollup-linux-x64-gnu@4.50.1': + resolution: {integrity: sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.50.0': - resolution: {integrity: sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==} + '@rollup/rollup-linux-x64-musl@4.50.1': + resolution: {integrity: sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.50.0': - resolution: {integrity: sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==} + '@rollup/rollup-openharmony-arm64@4.50.1': + resolution: {integrity: sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.50.0': - resolution: {integrity: sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==} + '@rollup/rollup-win32-arm64-msvc@4.50.1': + resolution: {integrity: sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.50.0': - resolution: {integrity: sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==} + '@rollup/rollup-win32-ia32-msvc@4.50.1': + resolution: {integrity: sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.50.0': - resolution: {integrity: sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==} + '@rollup/rollup-win32-x64-msvc@4.50.1': + resolution: {integrity: sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==} 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'} @@ -3670,84 +3560,9 @@ 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'} @@ -3878,11 +3693,11 @@ packages: '@tanstack/query-core@5.87.1': resolution: {integrity: sha512-HOFHVvhOCprrWvtccSzc7+RNqpnLlZ5R6lTmngb8aq7b4rc2/jDT0w+vLdQ4lD9bNtQ+/A4GsFXy030Gk4ollA==} - '@tanstack/query-devtools@5.86.0': - resolution: {integrity: sha512-/JDw9BP80eambEK/EsDMGAcsL2VFT+8F5KCOwierjPU7QP8Wt1GT32yJpn3qOinBM8/zS3Jy36+F0GiyJp411A==} + '@tanstack/query-devtools@5.87.3': + resolution: {integrity: sha512-LkzxzSr2HS1ALHTgDmJH5eGAVsSQiuwz//VhFW5OqNk0OQ+Fsqba0Tsf+NzWRtXYvpgUqwQr4b2zdFZwxHcGvg==} - '@tanstack/react-query-devtools@5.87.1': - resolution: {integrity: sha512-YPuEub8RQrrsXOxoiMJn33VcGPIeuVINWBgLu9RLSQB8ueXaKlGLZ3NJkahGpbt2AbWf749FQ6R+1jBFk3kdCA==} + '@tanstack/react-query-devtools@5.87.3': + resolution: {integrity: sha512-uV7m4/m58jU4OaLEyiPLRoXnL5H5E598lhFLSXIcK83on+ZXW7aIfiu5kwRwe1qFa4X4thH8wKaxz1lt6jNmAA==} peerDependencies: '@tanstack/react-query': ^5.87.1 react: ^18 || ^19 @@ -3892,11 +3707,11 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.131.35': - resolution: {integrity: sha512-F93UQDpOJPXvyu4PUiRyr7al6B4sJIgwIkyr7O8QQNY2r2NLqyEWeJMWfOJD/FtrF6r+4G8UR/PE3sXF+kNO5Q==} + '@tanstack/react-router-devtools@1.131.36': + resolution: {integrity: sha512-2huBmW+mqPoJs6ZHfjuunEkVRfgWZh67IUjgdSyqdaYGLa3qsG3zcG4bpTIq6HwJuzcK00JRM3AQ4NLPdttaJQ==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.131.35 + '@tanstack/react-router': ^1.131.36 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -3910,36 +3725,36 @@ packages: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.131.35': - resolution: {integrity: sha512-2mwHgwoSs4wih67jfl2TjcF4enYpLpY0TljE+Sl1njZ01CWLrrQgjQ6tEuVA24Pm5re4V01A3abKvDtN1miQ9Q==} + '@tanstack/react-router@1.131.36': + resolution: {integrity: sha512-9tglm3Rf9qkANBIyYLbGlOjNj7GDBr0jOEOaADfwiGV3Ua3P562MGn7nHUOrfRfA6u2MCg0EKJ+LH7AeWxAqkg==} 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.35': - resolution: {integrity: sha512-5PzUgI46O0/76Sh3Z8iRq88YfKFxWfvrGE3hVRUsZFz7tOX18cQ4uS8VxZrID32Z5hEIeyzP+pOZ8320PKIttw==} + '@tanstack/react-start-client@1.131.36': + resolution: {integrity: sha512-yo0zPsoHMjcti68X32mWA8KYZv0mIflYp6yKesTfMmztySB3IFKxS3yng8RUWlJoEaUC5hmoM7axphcCT4hAwQ==} 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.35': - resolution: {integrity: sha512-rJN248N6H1iq1PCTSKqkPC6Eo2DFIljVP7jNCU1dcWtYKcqj/4HiE5umhECIQJBwB/fooZJKE9i/l5R0b/slOw==} + '@tanstack/react-start-plugin@1.131.36': + resolution: {integrity: sha512-H6Oi5Y1qvunXQ5WqJwPs5gqJ4NdsGmyrZq17C99UA4Jc0U3d4qembbRhIjgwy4MSKwgvYA1M6SaB0yzUm4ZDCg==} engines: {node: '>=12'} peerDependencies: '@vitejs/plugin-react': '>=4.3.4' vite: '>=6.0.0' - '@tanstack/react-start-server@1.131.35': - resolution: {integrity: sha512-5Q+H6LuaSxGtD5SB2NzzQ6uNL3qvljN/st0IfTzihMtRvIJsY3g+7VmuD/gjb6welqULzLmitFWRr3dUlf1/oA==} + '@tanstack/react-start-server@1.131.36': + resolution: {integrity: sha512-GnJ7KN0jHBTgb2CU5mZPWH3dX09FSqX8r47bV/cn7TZ3gS/Lc9C0A103fCnMmL9pDcbl8ZN3vixFuEGAKW5JsA==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-start@1.131.35': - resolution: {integrity: sha512-LkSK6X9/ksdlRgCJChvBHLALFP4xvkoeCpm+VzzPn2xUg+RQHsA/GerBxmGWHxc4GMXxr7SSXZC/J49VZ8vsjA==} + '@tanstack/react-start@1.131.36': + resolution: {integrity: sha512-nOef3/rqOSeIrorqn3/niFqkAzj9aYPm7y6n/jU/l8Dxt8idFMc7k4Y9Nw2/ddmdgKfe0KECetc23K3RZ/VG7g==} engines: {node: '>=12'} peerDependencies: '@vitejs/plugin-react': '>=4.3.4' @@ -3947,21 +3762,21 @@ packages: react-dom: '>=18.0.0 || >=19.0.0' vite: '>=6.0.0' - '@tanstack/react-store@0.7.4': - resolution: {integrity: sha512-DyG1e5Qz/c1cNLt/NdFbCA7K1QGuFXQYT6EfUltYMJoQ4LzBOGnOl5IjuxepNcRtmIKkGpmdMzdFZEkevgU9bQ==} + '@tanstack/react-store@0.7.5': + resolution: {integrity: sha512-A+WZtEnHZpvbKXm8qR+xndNKywBLez2KKKKEQc7w0Qs45GvY1LpRI3BTZNmELwEVim8+Apf99iEDH2J+MUIzlQ==} 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.35': - resolution: {integrity: sha512-wS+Tcczo3+63LbrRKQGrpUSa9yws0V/fg32KK/tOi0BDlloVM3KTED3UP2hMVyqaMgts6jK7n1b/cEGWOlLdAA==} + '@tanstack/router-core@1.131.36': + resolution: {integrity: sha512-faGrKwrJBjJDxbcyeaOXgQcyccmzIGkwk+tnFeJuMTnH5OMfArykYnTZ9BxIrlOY2Mori9DXmYKMlig6mVqmGA==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.131.35': - resolution: {integrity: sha512-a3FgyedrjreUK3bypxvtUgumjsGsOQn6V/ksNVyC3yTIdpmRL1b7zrzkM0vT18H0x5iaX33Ix3Xt/renqh3qwg==} + '@tanstack/router-devtools-core@1.131.36': + resolution: {integrity: sha512-ToZVh1kBAcOt4lp7p/v9g4cjbSBlodxngIFx+lvmhCZ7Y+SG7Y6uP7ivw8WsUAdXAWLzIhIW6Jg57TT7sz8tkg==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.131.35 + '@tanstack/router-core': ^1.131.36 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -3969,16 +3784,16 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.131.35': - resolution: {integrity: sha512-fOxjiactUQXGfOAv4dC/hFjFUSUV0XmwnQwhNHswWNol6Te/gIBBj14umAaG/PqTaQZoN/b6v+wvkVvpQt3Dbw==} + '@tanstack/router-generator@1.131.36': + resolution: {integrity: sha512-Rl1Q2DFcAFXaYSvHQwO+HKmp5zSBz8D3qZl+fJ0a0w4/2I+Km1xwjzDwBUkFVNJtTUor40uU76SYJzV0/9s1tw==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.131.35': - resolution: {integrity: sha512-/J7ipJsNK1oSJv6M8gsS/0eCo34eg5DTwwX5Cv+JFoZ+svcuaJrqN2QxyMt88Kq10IKRUo8xzaLbRxwyjY8hbA==} + '@tanstack/router-plugin@1.131.36': + resolution: {integrity: sha512-EU/NopEkQw3AyjZvB33r4uIfUtbU64rbdJDCgGfumv1wpi/B4lJTO9W6iiUsoIsi1mtlNQKbFKNIbx+VyGh19Q==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.131.35 + '@tanstack/react-router': ^1.131.36 vite: '>=5.0.0 || >=6.0.0' vite-plugin-solid: ^2.11.2 webpack: '>=5.92.0' @@ -4002,45 +3817,45 @@ packages: resolution: {integrity: sha512-hWsaSgEZAVyzHg8+IcJWCEtfI9ZSlNELErfLiGHG9XCHEXMegFWsrESsKHlASzJqef9RsuOLDl+1IMPIskwdDw==} engines: {node: '>=12'} - '@tanstack/start-client-core@1.131.35': - resolution: {integrity: sha512-4PMk+peOJogVB7IUbvEZ+O8Z75iCvSC8VNuGHsBzAiEuLGd5RecBMMPBZCh64k78U2g85if5pMnD/iw31EowHw==} + '@tanstack/start-client-core@1.131.36': + resolution: {integrity: sha512-9n12FHyxn+1YtDqSLmQxq+adUkjKrlHBg9vbLFVerH1+XpXXXsbGvLIOMPhH9muf7YxCmuA6CRLfcXqUCdjzeg==} engines: {node: '>=12'} - '@tanstack/start-plugin-core@1.131.35': - resolution: {integrity: sha512-Kkf/NA57p+SaAkDOBrrQ6DnhssBecAioHLQwoEYxZK2LiAmiGRAAw9F+yycsMZ1AM3sD9dbkjniRIzluNB9Otw==} + '@tanstack/start-plugin-core@1.131.36': + resolution: {integrity: sha512-ftOt3VJNieagrtsZ6fjsPitUHpxmALupZuMCtLA1EKsa9eSunS466U3ylXtypvbuQMv0mhICUkCpWJ+n+NoTTA==} engines: {node: '>=12'} peerDependencies: vite: '>=6.0.0' - '@tanstack/start-server-core@1.131.35': - resolution: {integrity: sha512-ciwJwK3RZ+eGIZioDZncg9LbhnGRhi/fukykjX6AgPOHTsShhvOkp5Yx0OhBhxqeK6r/KQhkh+nx5RTWOZtP/g==} + '@tanstack/start-server-core@1.131.36': + resolution: {integrity: sha512-qHejodoiPWZ4Jt3USIC/UwKLj5YKWaZGPAAr8xpgega80gO+AdokNmQOf6cXvbNVYcqaB2e1lBhlgX5UPoh+5g==} engines: {node: '>=12'} - '@tanstack/start-server-functions-client@1.131.35': - resolution: {integrity: sha512-ZWqtpLVmAYwvwhk0zB2wo+UWV7TNLfcSd+w0EYxT9QFHWoJ8bMUHkj43HUQAEPNRBZBbes8+gUdt1Zi6f+Z0Zg==} + '@tanstack/start-server-functions-client@1.131.36': + resolution: {integrity: sha512-w+5tvzuYv4NucGNTuGMQrJwu1TLsrqtYIK1IZMbFdqRye8fQ4/jA4GRt9aI0q7I3MOQ9ctljoWxMmAzopbG9kw==} engines: {node: '>=12'} - '@tanstack/start-server-functions-fetcher@1.131.35': - resolution: {integrity: sha512-KTeWoYcZsVqMTUVoiNVZs+oN55IUsmH8jutd2P/S7VS/SyJ38cZDnCO4BHqEw84AmfLWDTnucA61IkD574jstA==} + '@tanstack/start-server-functions-fetcher@1.131.36': + resolution: {integrity: sha512-9C2HSen3lKvDs5oQHoVpvin5x4U9NZq1uxA8HaHoDOfJNuQYF87SNczqbI/y4GVT5XS4E7B08ktlgrAfTFgDTA==} 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.35': - resolution: {integrity: sha512-FHihO1s8I1WDnEaZSFFZh7GClVVsl5MAukjAMREll7E0tUu8n0fwOb9fnKDgHfzLzH0xhQhJhCagc5QIn2cZdQ==} + '@tanstack/start-storage-context@1.131.36': + resolution: {integrity: sha512-ZzZQ9hZ1AUZhMSKgK3AWdrF44knvOmhBlZclL0xe8gM6kkLUHpp8/LWngAuPVBmdU9BQ528z3g4vLX8Wvea0KA==} engines: {node: '>=12'} - '@tanstack/store@0.7.4': - resolution: {integrity: sha512-F1XqZQici1Aq6WigEfcxJSml92nW+85Om8ElBMokPNg5glCYVOmPkZGIQeieYFxcPiKTfwo0MTOQpUyJtwncrg==} + '@tanstack/store@0.7.5': + resolution: {integrity: sha512-qd/OjkjaFRKqKU4Yjipaen/EOB9MyEg6Wr9fW103RBPACf1ZcKhbhcu2S5mj5IgdPib6xFIgCUti/mKVkl+fRw==} '@tanstack/virtual-file-routes@1.131.2': resolution: {integrity: sha512-VEEOxc4mvyu67O+Bl0APtYjwcNRcL9it9B4HKbNgcBTIOEalhk+ufBl4kiqc8WP1sx1+NAaiS+3CcJBhrqaSRg==} engines: {node: '>=12'} - '@tanstack/zod-adapter@1.131.35': - resolution: {integrity: sha512-i9NHehlZ/KDIPn7qzCHwa5+leAbrOtwJc4NepMmzd0Izl7LFaa3DB9n9C0k26O4ixZneesFtp/Frp861birL7Q==} + '@tanstack/zod-adapter@1.131.36': + resolution: {integrity: sha512-2AwzoQOsNET1QePMmObelh46nKTzsBcrhh92VY0Fr2HP+x06lkWOFPScqOWHzOsvMJEC4/WfwZK5Hnc/FvpSUA==} engines: {node: '>=12'} peerDependencies: '@tanstack/react-router': '>=1.43.2' @@ -4360,18 +4175,6 @@ 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==} @@ -4390,9 +4193,6 @@ 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==} @@ -4606,12 +4406,6 @@ 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==} @@ -4642,63 +4436,63 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.42.0': - resolution: {integrity: sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ==} + '@typescript-eslint/eslint-plugin@8.43.0': + resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.42.0 + '@typescript-eslint/parser': ^8.43.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.42.0': - resolution: {integrity: sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg==} + '@typescript-eslint/parser@8.43.0': + resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==} 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.42.0': - resolution: {integrity: sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==} + '@typescript-eslint/project-service@8.43.0': + resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.42.0': - resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} + '@typescript-eslint/scope-manager@8.43.0': + resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.42.0': - resolution: {integrity: sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==} + '@typescript-eslint/tsconfig-utils@8.43.0': + resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.42.0': - resolution: {integrity: sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ==} + '@typescript-eslint/type-utils@8.43.0': + resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==} 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.42.0': - resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} + '@typescript-eslint/types@8.43.0': + resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.42.0': - resolution: {integrity: sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==} + '@typescript-eslint/typescript-estree@8.43.0': + resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.42.0': - resolution: {integrity: sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g==} + '@typescript-eslint/utils@8.43.0': + resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==} 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.42.0': - resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} + '@typescript-eslint/visitor-keys@8.43.0': + resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -4813,28 +4607,8 @@ packages: resolution: {integrity: sha512-C94kJjZhEfPUNbOA69BQr1SgziQYgjNXK8S1GJXQKuwxN/24PQkYCzeBqXstfxyTXyOwoQCcEZAQ/qJccboufQ==} engines: {node: ^16.13 || >=18} - '@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==} + '@zip.js/zip.js@2.8.1': + resolution: {integrity: sha512-U20br2zjlo2+Ikw1S2jIWtxirUTj4kQwY3qZYa+LZi7F7hSbJVHoSNxgIO2UEN1VWYWuHJtx1UYkmERpA3TqIg==} engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'} abbrev@3.0.1: @@ -4862,10 +4636,6 @@ 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'} @@ -4882,8 +4652,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.34: - resolution: {integrity: sha512-ouReddlmQ8ihFwY+g8fJP7u64l7uCPnJSK9R6kTiyTJ3VvztcH1HrYXqG8+XEzBVLJKJmUoYxY1gkFdwMdF8wQ==} + ai@5.0.37: + resolution: {integrity: sha512-6QJEoLvynMBdk+vC/HT3Ry4w9DjhTKlC2PU+XZU/5z5QPGkGVloby7LJtzNYDOA41OltH+JOohSYqg/9phFwqg==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4 @@ -4903,8 +4673,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.0: - resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -4915,8 +4685,8 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} ansis@4.1.0: @@ -4950,9 +4720,6 @@ 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==} @@ -5154,19 +4921,22 @@ packages: react-router-dom: '>=5.0.0' rxjs: '>=7.0.0' - better-auth@1.3.8: - resolution: {integrity: sha512-uRFzHbWkhr8eWNy+BJwyMnrZPOvQjwrcLND3nc6jusRteYA9cjeRGElgCPTWTIyWUfzaQ708Lb5Mdq9Gv41Qpw==} + better-auth@1.3.9: + resolution: {integrity: sha512-Ty6BHzuShlqSs7I4RMlBRQ3duOWNB7WWriIu2FJVGjQAOtTVvamzFCR4/j5ROFLoNkpvNTRF7BJozsrMICL1gw==} 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.16: - resolution: {integrity: sha512-42dgJ1rOtc0anOoxjXPOWuel/Z/4aeO7EJ2SiXNwvlkySSgjXhNjAjTMWa8DL1nt6EXS3jl3VKC3mPsU/lUgVA==} + better-call@1.0.18: + resolution: {integrity: sha512-Ojyck3P3fs/egBmCW50tvfbCJorNV5KphfPOKrkCxPfOr8Brth1ruDtAJuhHVHEUiWrXv+vpEgWQk7m7FzhbbQ==} bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} @@ -5185,8 +4955,8 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - bippy@0.3.26: - resolution: {integrity: sha512-UfzW0Kn+G3PZvmeBaN81h26YAMdObnw1zojWhn83jr5hnIGhBYPoALH4zIK2XQDN7Njj3tOxmXD3P0zh+/XsFw==} + bippy@0.3.27: + resolution: {integrity: sha512-0k9M+yXcgUDpMgSl+7QjYRqUk8Ud4Z18uL7m34AKkkXy7Fi79Yl8q2pdyDGOyb0uhmRzHgJUOsAIYW1qvlnGaA==} peerDependencies: react: '>=17.0.1' @@ -5299,9 +5069,6 @@ 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'} @@ -5346,8 +5113,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.6.0: - resolution: {integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} character-entities-html4@2.1.0: @@ -5645,9 +5412,6 @@ 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==} @@ -5692,10 +5456,6 @@ 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==} @@ -5870,10 +5630,6 @@ 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'} @@ -5944,9 +5700,6 @@ 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'} @@ -5955,9 +5708,6 @@ 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==} @@ -6079,10 +5829,6 @@ 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'} @@ -6274,8 +6020,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.214: - resolution: {integrity: sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q==} + electron-to-chromium@1.5.215: + resolution: {integrity: sha512-TIvGp57UpeNetj/wV/xpFNpWGb0b/ROw372lHPx5Aafx02gjTBtWnEEcaSX3W2dLM3OSdGGyHX/cHl01JQsLaQ==} embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} @@ -6324,10 +6070,6 @@ 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==} @@ -6680,10 +6422,6 @@ 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'} @@ -6954,10 +6692,6 @@ 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} @@ -7062,9 +6796,6 @@ 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==} @@ -7096,10 +6827,6 @@ 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'} @@ -7357,9 +7084,6 @@ 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'} @@ -7380,9 +7104,6 @@ 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==} @@ -7538,9 +7259,6 @@ 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==} @@ -7571,15 +7289,6 @@ 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'} @@ -7922,19 +7631,12 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - luxon@3.7.1: - resolution: {integrity: sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==} - engines: {node: '>=12'} - - magic-string@0.30.18: - resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} 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'} @@ -8055,9 +7757,6 @@ 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==} @@ -8341,16 +8040,6 @@ 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'} @@ -8359,10 +8048,6 @@ 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==} @@ -8396,10 +8081,6 @@ 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'} @@ -8492,9 +8173,6 @@ 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} @@ -8585,8 +8263,8 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openai@5.19.1: - resolution: {integrity: sha512-zSqnUF7oR9ksmpusKkpUgkNrj8Sl57U+OyzO8jzc7LUjTMg4DRfR3uCm+EIMA6iw06sRPNp4t7ojp3sCpEUZRQ==} + openai@5.20.0: + resolution: {integrity: sha512-Bmc2zLM/YWgFrDpXr9hwXqGGDdMmMpE9+qoZPsaHpn0Y/Qk1Vu26hNqXo7+nHdli+sLsXINvS1f8kR3NKhGKmA==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -8615,9 +8293,6 @@ 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'} @@ -8646,14 +8321,6 @@ 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'} @@ -8684,10 +8351,6 @@ 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'} @@ -8750,9 +8413,6 @@ 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==} @@ -8926,8 +8586,8 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - posthog-js@1.261.7: - resolution: {integrity: sha512-Fjpbz6VfIMsEbKIN/UyTWhU1DGgVIngqoRjPGRolemIMOVzTfI77OZq8WwiBhMug+rU+wNhGCQhC41qRlR5CxA==} + posthog-js@1.261.8: + resolution: {integrity: sha512-HohKQ5Fuvei/3ZLIdayq6lDpeXsG891t2y2izpHu6q/1SoCS+HlYjViz3WCu9KlE7AfjfpwvN1kjnFNNPWeOig==} peerDependencies: '@rrweb/types': 2.0.0-alpha.17 rrweb-snapshot: 2.0.0-alpha.17 @@ -9109,9 +8769,6 @@ 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==} @@ -9532,15 +9189,15 @@ packages: react: '>=16.3.0' react-dom: '>=16.3.0' - react-router-dom@7.4.1: - resolution: {integrity: sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA==} + react-router-dom@7.8.2: + resolution: {integrity: sha512-Z4VM5mKDipal2jQ385H6UBhiiEDlnJPx6jyWsTYoZQdl5TrjxEV2a9yl3Fi60NBJxYzOTGTTHXPi0pdizvTwow==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' react-dom: '>=18' - react-router@7.4.1: - resolution: {integrity: sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg==} + react-router@7.8.2: + resolution: {integrity: sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -9602,10 +9259,6 @@ 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==} @@ -9748,9 +9401,6 @@ 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==} @@ -9823,8 +9473,8 @@ packages: rollup: optional: true - rollup@4.50.0: - resolution: {integrity: sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==} + rollup@4.50.1: + resolution: {integrity: sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -9841,12 +9491,6 @@ 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'} @@ -9888,10 +9532,6 @@ 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==} @@ -10039,8 +9679,8 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - solid-js@1.9.7: - resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} + solid-js@1.9.9: + resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} sonner@1.7.4: resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} @@ -10146,9 +9786,6 @@ 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==} @@ -10192,8 +9829,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-final-newline@3.0.0: @@ -10233,8 +9870,8 @@ packages: peerDependencies: postcss: ^8.3.3 - supports-color@10.2.0: - resolution: {integrity: sha512-5eG9FQjEjDbAlI5+kdpdyPIBMRH4GfTVDGREVupaZHmVoppknhM29b/S9BkQz7cathp85BVgRi/As3Siln7e0Q==} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} supports-color@7.2.0: @@ -10261,9 +9898,6 @@ 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'} @@ -10342,6 +9976,10 @@ 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==} @@ -10386,13 +10024,6 @@ 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'} @@ -10415,24 +10046,12 @@ 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==} @@ -10459,20 +10078,6 @@ 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} @@ -10517,9 +10122,6 @@ 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] @@ -10587,8 +10189,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.42.0: - resolution: {integrity: sha512-ozR/rQn+aQXQxh1YgbCzQWDFrsi9mcg+1PM3l/z5o1+20P7suOIaNg515bpr/OYt6FObz/NHcBstydDLHWeEKg==} + typescript-eslint@8.43.0: + resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10650,10 +10252,6 @@ 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'} @@ -10689,10 +10287,6 @@ 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'} @@ -10805,15 +10399,9 @@ 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'} @@ -10890,9 +10478,6 @@ 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==} @@ -10939,8 +10524,8 @@ packages: vite: optional: true - vite@5.4.19: - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} + vite@5.4.20: + resolution: {integrity: sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -10970,8 +10555,8 @@ packages: terser: optional: true - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} + vite@6.3.6: + resolution: {integrity: sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -11069,10 +10654,6 @@ 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'} @@ -11114,10 +10695,6 @@ 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==} @@ -11129,10 +10706,6 @@ 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==} @@ -11199,10 +10772,6 @@ 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'} @@ -11227,17 +10796,10 @@ 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'} @@ -11284,10 +10846,6 @@ 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'} @@ -11296,10 +10854,6 @@ 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==} @@ -11369,7 +10923,7 @@ snapshots: '@ai-sdk/provider-utils': 3.0.8(zod@4.1.5) zod: 4.1.5 - '@ai-sdk/openai@2.0.24(zod@4.1.5)': + '@ai-sdk/openai@2.0.27(zod@4.1.5)': dependencies: '@ai-sdk/provider': 2.0.0 '@ai-sdk/provider-utils': 3.0.8(zod@4.1.5) @@ -11386,6 +10940,16 @@ 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': @@ -11444,15 +11008,6 @@ 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 @@ -11690,27 +11245,11 @@ snapshots: '@bufbuild/protobuf@2.7.0': {} - '@bundled-es-modules/cookie@2.0.1': - dependencies: - cookie: 0.7.2 - optional: true - - '@bundled-es-modules/statuses@1.0.1': + '@cacheable/memoize@1.1.1': dependencies: - statuses: 2.0.2 - optional: true + '@cacheable/utils': 1.1.1 - '@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': + '@cacheable/memory@1.0.1': dependencies: '@cacheable/memoize': 1.1.1 '@cacheable/utils': 1.1.1 @@ -11762,36 +11301,6 @@ 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)': @@ -11873,14 +11382,6 @@ 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)': @@ -12144,7 +11645,7 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true - '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@2.5.1))': dependencies: eslint: 9.35.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 @@ -12188,9 +11689,6 @@ 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': @@ -12221,14 +11719,6 @@ 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) @@ -12328,36 +11818,6 @@ 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': {} @@ -12370,7 +11830,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -12420,12 +11880,6 @@ 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': {} @@ -12438,9 +11892,9 @@ snapshots: '@levischuck/tiny-cbor@0.2.11': {} - '@libsql/client@0.15.14': + '@libsql/client@0.15.15': dependencies: - '@libsql/core': 0.15.14 + '@libsql/core': 0.15.15 '@libsql/hrana-client': 0.7.0 js-base64: 3.7.8 libsql: 0.5.22 @@ -12449,7 +11903,7 @@ snapshots: - bufferutil - utf-8-validate - '@libsql/core@0.15.14': + '@libsql/core@0.15.15': dependencies: js-base64: 3.7.8 @@ -12502,6 +11956,21 @@ 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 @@ -12566,6 +12035,14 @@ 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) @@ -12589,11 +12066,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.19(@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.20(@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.19(@types/node@22.18.1)(lightningcss@1.30.1)(sugarss@5.0.1(postcss@8.5.6))(terser@5.44.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) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -12611,12 +12088,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)(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/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)': 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)(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) + '@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) emoji-regex: 10.5.0 lodash-es: 4.17.21 lucide-react: 0.469.0(react@18.3.1) @@ -12630,11 +12107,11 @@ snapshots: - framer-motion - supports-color - '@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)': + '@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)': 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)(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) + '@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) lucide-react: 0.469.0(react@18.3.1) polished: 4.3.1 react: 18.3.1 @@ -12646,7 +12123,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)(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/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)': 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) @@ -12657,22 +12134,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)(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) + '@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) '@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)(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) + 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) 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(@emotion/is-prop-valid@0.8.8)(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) 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) @@ -12717,10 +12194,10 @@ snapshots: - '@types/react' - supports-color - '@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/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)': dependencies: - '@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) + '@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) clsx: 2.1.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -12731,26 +12208,26 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@mantine/form@8.2.8(react@18.3.1)': + '@mantine/form@8.3.0(react@18.3.1)': dependencies: fast-deep-equal: 3.1.3 klona: 2.0.6 react: 18.3.1 - '@mantine/hooks@8.2.8(react@18.3.1)': + '@mantine/hooks@8.3.0(react@18.3.1)': dependencies: 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)': + '@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)': dependencies: - '@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) + '@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) 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.2.8(react@18.3.1)': + '@mantine/store@8.3.0(react@18.3.1)': dependencies: react: 18.3.1 @@ -12830,16 +12307,6 @@ 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 @@ -12879,36 +12346,9 @@ snapshots: '@neon-rs/load@0.0.4': {} - '@netlify/blobs@9.1.2': - dependencies: - '@netlify/dev-utils': 2.2.0 - '@netlify/runtime-utils': 1.3.1 - optional: true + '@noble/ciphers@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': {} + '@noble/hashes@2.0.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -12939,18 +12379,6 @@ 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': @@ -13018,35 +12446,35 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.1 '@parcel/watcher-win32-x64': 2.5.1 - '@peculiar/asn1-android@2.4.0': + '@peculiar/asn1-android@2.5.0': dependencies: - '@peculiar/asn1-schema': 2.4.0 + '@peculiar/asn1-schema': 2.5.0 asn1js: 3.0.6 tslib: 2.8.1 - '@peculiar/asn1-ecc@2.4.0': + '@peculiar/asn1-ecc@2.5.0': dependencies: - '@peculiar/asn1-schema': 2.4.0 - '@peculiar/asn1-x509': 2.4.0 + '@peculiar/asn1-schema': 2.5.0 + '@peculiar/asn1-x509': 2.5.0 asn1js: 3.0.6 tslib: 2.8.1 - '@peculiar/asn1-rsa@2.4.0': + '@peculiar/asn1-rsa@2.5.0': dependencies: - '@peculiar/asn1-schema': 2.4.0 - '@peculiar/asn1-x509': 2.4.0 + '@peculiar/asn1-schema': 2.5.0 + '@peculiar/asn1-x509': 2.5.0 asn1js: 3.0.6 tslib: 2.8.1 - '@peculiar/asn1-schema@2.4.0': + '@peculiar/asn1-schema@2.5.0': dependencies: asn1js: 3.0.6 pvtsutils: 1.3.6 tslib: 2.8.1 - '@peculiar/asn1-x509@2.4.0': + '@peculiar/asn1-x509@2.5.0': dependencies: - '@peculiar/asn1-schema': 2.4.0 + '@peculiar/asn1-schema': 2.5.0 asn1js: 3.0.6 pvtsutils: 1.3.6 tslib: 2.8.1 @@ -13069,7 +12497,7 @@ snapshots: dependencies: '@poppinss/colors': 4.1.5 '@sindresorhus/is': 7.0.2 - supports-color: 10.2.0 + supports-color: 10.2.2 '@poppinss/exception@1.2.2': {} @@ -14013,135 +13441,130 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.27': {} - '@rollup/plugin-alias@5.1.1(rollup@4.50.0)': + '@rollup/plugin-alias@5.1.1(rollup@4.50.1)': optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - '@rollup/plugin-commonjs@28.0.6(rollup@4.50.0)': + '@rollup/plugin-commonjs@28.0.6(rollup@4.50.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.0) + '@rollup/pluginutils': 5.3.0(rollup@4.50.1) 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.18 + magic-string: 0.30.19 picomatch: 4.0.3 optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - '@rollup/plugin-inject@5.0.5(rollup@4.50.0)': + '@rollup/plugin-inject@5.0.5(rollup@4.50.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.0) + '@rollup/pluginutils': 5.3.0(rollup@4.50.1) estree-walker: 2.0.2 - magic-string: 0.30.18 + magic-string: 0.30.19 optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - '@rollup/plugin-json@6.1.0(rollup@4.50.0)': + '@rollup/plugin-json@6.1.0(rollup@4.50.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.0) + '@rollup/pluginutils': 5.3.0(rollup@4.50.1) optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - '@rollup/plugin-node-resolve@16.0.1(rollup@4.50.0)': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.50.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.0) + '@rollup/pluginutils': 5.3.0(rollup@4.50.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - '@rollup/plugin-replace@6.0.2(rollup@4.50.0)': + '@rollup/plugin-replace@6.0.2(rollup@4.50.1)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.0) - magic-string: 0.30.18 + '@rollup/pluginutils': 5.3.0(rollup@4.50.1) + magic-string: 0.30.19 optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - '@rollup/plugin-terser@0.4.4(rollup@4.50.0)': + '@rollup/plugin-terser@0.4.4(rollup@4.50.1)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.44.0 optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - '@rollup/pluginutils@5.3.0(rollup@4.50.0)': + '@rollup/pluginutils@5.3.0(rollup@4.50.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - '@rollup/rollup-android-arm-eabi@4.50.0': + '@rollup/rollup-android-arm-eabi@4.50.1': optional: true - '@rollup/rollup-android-arm64@4.50.0': + '@rollup/rollup-android-arm64@4.50.1': optional: true - '@rollup/rollup-darwin-arm64@4.50.0': + '@rollup/rollup-darwin-arm64@4.50.1': optional: true - '@rollup/rollup-darwin-x64@4.50.0': + '@rollup/rollup-darwin-x64@4.50.1': optional: true - '@rollup/rollup-freebsd-arm64@4.50.0': + '@rollup/rollup-freebsd-arm64@4.50.1': optional: true - '@rollup/rollup-freebsd-x64@4.50.0': + '@rollup/rollup-freebsd-x64@4.50.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.50.0': + '@rollup/rollup-linux-arm-gnueabihf@4.50.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.50.0': + '@rollup/rollup-linux-arm-musleabihf@4.50.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.50.0': + '@rollup/rollup-linux-arm64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.50.0': + '@rollup/rollup-linux-arm64-musl@4.50.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.50.0': + '@rollup/rollup-linux-loongarch64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.50.0': + '@rollup/rollup-linux-ppc64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.50.0': + '@rollup/rollup-linux-riscv64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-riscv64-musl@4.50.0': + '@rollup/rollup-linux-riscv64-musl@4.50.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.50.0': + '@rollup/rollup-linux-s390x-gnu@4.50.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.50.0': + '@rollup/rollup-linux-x64-gnu@4.50.1': optional: true - '@rollup/rollup-linux-x64-musl@4.50.0': + '@rollup/rollup-linux-x64-musl@4.50.1': optional: true - '@rollup/rollup-openharmony-arm64@4.50.0': + '@rollup/rollup-openharmony-arm64@4.50.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.50.0': + '@rollup/rollup-win32-arm64-msvc@4.50.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.50.0': + '@rollup/rollup-win32-ia32-msvc@4.50.1': optional: true - '@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 + '@rollup/rollup-win32-x64-msvc@4.50.1': optional: true '@sentry-internal/browser-utils@8.55.0': @@ -14223,11 +13646,11 @@ snapshots: dependencies: '@hexagon/base64': 1.1.28 '@levischuck/tiny-cbor': 0.2.11 - '@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 + '@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 '@sinclair/typebox@0.27.8': {} @@ -14252,66 +13675,10 @@ 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 @@ -14339,7 +13706,7 @@ snapshots: enhanced-resolve: 5.18.3 jiti: 2.5.1 lightningcss: 1.30.1 - magic-string: 0.30.18 + magic-string: 0.30.19 source-map-js: 1.2.1 tailwindcss: 4.1.13 @@ -14405,7 +13772,7 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.13 - '@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))': + '@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))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -14414,7 +13781,7 @@ snapshots: '@tanstack/router-utils': 1.131.2 babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 - 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) + 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) transitivePeerDependencies: - supports-color @@ -14422,11 +13789,11 @@ snapshots: '@tanstack/query-core@5.87.1': {} - '@tanstack/query-devtools@5.86.0': {} + '@tanstack/query-devtools@5.87.3': {} - '@tanstack/react-query-devtools@5.87.1(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-query-devtools@5.87.3(@tanstack/react-query@5.87.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/query-devtools': 5.86.0 + '@tanstack/query-devtools': 5.87.3 '@tanstack/react-query': 5.87.1(react@18.3.1) react: 18.3.1 @@ -14435,15 +13802,10 @@ snapshots: '@tanstack/query-core': 5.87.1 react: 18.3.1 - '@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)': + '@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)': dependencies: - '@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) + '@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) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -14452,42 +13814,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.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-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)': dependencies: '@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 + '@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: 18.3.1 react-dom: 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)': + '@tanstack/react-router@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/history': 1.131.2 - '@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 + '@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 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.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-start-client@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@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/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 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.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-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))': dependencies: - '@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)) + '@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)) pathe: 2.0.3 - 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) + 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) zod: 3.25.76 transitivePeerDependencies: - '@azure/app-configuration' @@ -14522,29 +13884,29 @@ snapshots: - webpack - xml2js - '@tanstack/react-start-server@1.131.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-start-server@1.131.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/history': 1.131.2 - '@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 + '@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 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.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))': + '@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))': dependencies: - '@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)) + '@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)) react: 18.3.1 react-dom: 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) + 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) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -14578,36 +13940,36 @@ snapshots: - webpack - xml2js - '@tanstack/react-store@0.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-store@0.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/store': 0.7.4 + '@tanstack/store': 0.7.5 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.35': + '@tanstack/router-core@1.131.36': dependencies: '@tanstack/history': 1.131.2 - '@tanstack/store': 0.7.4 + '@tanstack/store': 0.7.5 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.35(@tanstack/router-core@1.131.35)(csstype@3.1.3)(solid-js@1.9.7)(tiny-invariant@1.3.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)': dependencies: - '@tanstack/router-core': 1.131.35 + '@tanstack/router-core': 1.131.36 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) - solid-js: 1.9.7 + solid-js: 1.9.9 tiny-invariant: 1.3.3 optionalDependencies: csstype: 3.1.3 - '@tanstack/router-generator@1.131.35': + '@tanstack/router-generator@1.131.36': dependencies: - '@tanstack/router-core': 1.131.35 + '@tanstack/router-core': 1.131.36 '@tanstack/router-utils': 1.131.2 '@tanstack/virtual-file-routes': 1.131.2 prettier: 3.6.2 @@ -14618,7 +13980,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@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))': + '@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))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -14626,8 +13988,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/router-core': 1.131.35 - '@tanstack/router-generator': 1.131.35 + '@tanstack/router-core': 1.131.36 + '@tanstack/router-generator': 1.131.36 '@tanstack/router-utils': 1.131.2 '@tanstack/virtual-file-routes': 1.131.2 babel-dead-code-elimination: 1.0.10 @@ -14635,12 +13997,12 @@ snapshots: unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@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) + '@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) transitivePeerDependencies: - supports-color - '@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-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))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -14648,8 +14010,8 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/router-core': 1.131.35 - '@tanstack/router-generator': 1.131.35 + '@tanstack/router-core': 1.131.36 + '@tanstack/router-generator': 1.131.36 '@tanstack/router-utils': 1.131.2 '@tanstack/virtual-file-routes': 1.131.2 babel-dead-code-elimination: 1.0.10 @@ -14657,8 +14019,8 @@ snapshots: unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@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/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) transitivePeerDependencies: - supports-color @@ -14673,7 +14035,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@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/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))': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -14682,42 +14044,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.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/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)) babel-dead-code-elimination: 1.0.10 tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color - vite - '@tanstack/start-client-core@1.131.35': + '@tanstack/start-client-core@1.131.36': dependencies: - '@tanstack/router-core': 1.131.35 - '@tanstack/start-storage-context': 1.131.35 + '@tanstack/router-core': 1.131.36 + '@tanstack/start-storage-context': 1.131.36 cookie-es: 1.2.2 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@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))': + '@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))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.4 '@babel/types': 7.28.4 - '@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-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-utils': 1.131.2 - '@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 + '@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 '@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.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)) + 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)) pathe: 2.0.3 ufo: 1.6.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)) + 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)) xmlbuilder2: 3.1.1 zod: 3.25.76 transitivePeerDependencies: @@ -14753,50 +14115,50 @@ snapshots: - webpack - xml2js - '@tanstack/start-server-core@1.131.35': + '@tanstack/start-server-core@1.131.36': dependencies: '@tanstack/history': 1.131.2 - '@tanstack/router-core': 1.131.35 - '@tanstack/start-client-core': 1.131.35 - '@tanstack/start-storage-context': 1.131.35 + '@tanstack/router-core': 1.131.36 + '@tanstack/start-client-core': 1.131.36 + '@tanstack/start-storage-context': 1.131.36 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.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-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))': dependencies: - '@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 + '@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 transitivePeerDependencies: - supports-color - vite - '@tanstack/start-server-functions-fetcher@1.131.35': + '@tanstack/start-server-functions-fetcher@1.131.36': dependencies: - '@tanstack/router-core': 1.131.35 - '@tanstack/start-client-core': 1.131.35 + '@tanstack/router-core': 1.131.36 + '@tanstack/start-client-core': 1.131.36 - '@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))': + '@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))': dependencies: - '@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/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)) tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color - vite - '@tanstack/start-storage-context@1.131.35': + '@tanstack/start-storage-context@1.131.36': dependencies: - '@tanstack/router-core': 1.131.35 + '@tanstack/router-core': 1.131.36 - '@tanstack/store@0.7.4': {} + '@tanstack/store@0.7.5': {} '@tanstack/virtual-file-routes@1.131.2': {} - '@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)': + '@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)': dependencies: - '@tanstack/react-router': 1.131.35(react-dom@18.3.1(react@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) zod: 4.1.5 '@tauri-apps/api@2.0.0-beta.8': {} @@ -15113,18 +14475,6 @@ 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': @@ -15152,8 +14502,6 @@ 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': @@ -15384,12 +14732,6 @@ 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': {} @@ -15417,14 +14759,14 @@ snapshots: '@types/node': 22.18.1 optional: true - '@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/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)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@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 + '@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 eslint: 9.35.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -15434,41 +14776,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.42.0(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)': dependencies: - '@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 + '@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 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.42.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2) + '@typescript-eslint/types': 8.43.0 debug: 4.4.1(supports-color@8.1.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.42.0': + '@typescript-eslint/scope-manager@8.43.0': dependencies: - '@typescript-eslint/types': 8.42.0 - '@typescript-eslint/visitor-keys': 8.42.0 + '@typescript-eslint/types': 8.43.0 + '@typescript-eslint/visitor-keys': 8.43.0 - '@typescript-eslint/tsconfig-utils@8.42.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@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) + '@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) 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) @@ -15476,14 +14818,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.42.0': {} + '@typescript-eslint/types@8.43.0': {} - '@typescript-eslint/typescript-estree@8.42.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)': dependencies: - '@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 + '@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 debug: 4.4.1(supports-color@8.1.1) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -15494,20 +14836,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.42.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)': dependencies: - '@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-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: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.42.0': + '@typescript-eslint/visitor-keys@8.43.0': dependencies: - '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/types': 8.43.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -15521,10 +14863,10 @@ snapshots: '@vercel/edge@1.2.2': {} - '@vercel/nft@0.30.1(rollup@4.50.0)': + '@vercel/nft@0.30.1(rollup@4.50.1)': dependencies: '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.3.0(rollup@4.50.0) + '@rollup/pluginutils': 5.3.0(rollup@4.50.1) acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) async-sema: 3.1.1 @@ -15540,7 +14882,7 @@ snapshots: - rollup - supports-color - '@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))': + '@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))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -15548,11 +14890,11 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.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: 5.4.20(@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.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.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))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) @@ -15560,7 +14902,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.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) + 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) transitivePeerDependencies: - supports-color @@ -15572,14 +14914,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.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/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))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.18 + magic-string: 0.30.19 optionalDependencies: - 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) + 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/pretty-format@2.1.9': dependencies: @@ -15598,13 +14939,13 @@ snapshots: '@vitest/snapshot@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 - magic-string: 0.30.18 + magic-string: 0.30.19 pathe: 1.1.2 '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.18 + magic-string: 0.30.19 pathe: 2.0.3 '@vitest/spy@3.2.4': @@ -15628,7 +14969,7 @@ snapshots: '@wdio/types': 8.41.0 '@wdio/utils': 8.46.0 async-exit-hook: 2.0.1 - chalk: 5.6.0 + chalk: 5.6.2 chokidar: 4.0.3 cli-spinners: 2.9.2 dotenv: 16.6.1 @@ -15696,10 +15037,10 @@ snapshots: '@wdio/logger@8.38.0': dependencies: - chalk: 5.6.0 + chalk: 5.6.2 loglevel: 1.9.2 loglevel-plugin-prefix: 0.8.4 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 '@wdio/mocha-framework@8.46.0': dependencies: @@ -15752,7 +15093,7 @@ snapshots: dependencies: '@wdio/reporter': 8.43.0 '@wdio/types': 8.41.0 - chalk: 5.6.0 + chalk: 5.6.2 easy-table: 1.2.0 pretty-ms: 7.0.1 @@ -15779,40 +15120,7 @@ snapshots: - bare-buffer - supports-color - '@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': {} + '@zip.js/zip.js@2.8.1': {} abbrev@3.0.1: {} @@ -15835,11 +15143,6 @@ 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: {} @@ -15859,7 +15162,7 @@ snapshots: screenfull: 5.2.0 tslib: 2.8.1 - ai@5.0.34(zod@4.1.5): + ai@5.0.37(zod@4.1.5): dependencies: '@ai-sdk/gateway': 1.0.19(zod@4.1.5) '@ai-sdk/provider': 2.0.0 @@ -15882,7 +15185,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.2.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: @@ -15890,11 +15193,11 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} ansis@4.1.0: {} - 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): + 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): 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 @@ -15903,7 +15206,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)(luxon@3.7.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) react: 18.3.1 use-merge-value: 1.2.0(react@18.3.1) transitivePeerDependencies: @@ -15911,7 +15214,7 @@ snapshots: - react-dom - supports-color - 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@5.27.3(date-fns@4.1.0)(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) @@ -15943,7 +15246,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)(luxon@3.7.1)(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-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) @@ -15996,9 +15299,6 @@ 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: @@ -16214,26 +15514,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.4.1(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.8.2(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.4.1(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) rxjs: 7.8.2 - better-auth@1.3.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + better-auth@1.3.9(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': 0.6.0 - '@noble/hashes': 1.8.0 + '@noble/ciphers': 2.0.0 + '@noble/hashes': 2.0.0 '@simplewebauthn/browser': 13.1.2 '@simplewebauthn/server': 13.1.2 - better-call: 1.0.16 + better-call: 1.0.18 defu: 6.1.4 - jose: 5.10.0 + jose: 6.1.0 kysely: 0.28.5 nanostores: 0.11.4 zod: 4.1.5 @@ -16241,25 +15541,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - 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: + better-call@1.0.18: dependencies: '@better-fetch/fetch': 1.1.18 rou3: 0.5.1 @@ -16283,7 +15565,7 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 - bippy@0.3.26(@types/react@18.3.24)(react@18.3.1): + bippy@0.3.27(@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 @@ -16340,7 +15622,7 @@ snapshots: browserslist@4.25.4: dependencies: caniuse-lite: 1.0.30001741 - electron-to-chromium: 1.5.214 + electron-to-chromium: 1.5.215 node-releases: 2.0.20 update-browserslist-db: 1.1.3(browserslist@4.25.4) @@ -16435,9 +15717,6 @@ 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: {} @@ -16488,7 +15767,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.6.0: {} + chalk@5.6.2: {} character-entities-html4@2.1.0: {} @@ -16785,9 +16064,6 @@ 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: {} @@ -16836,12 +16112,6 @@ 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: {} @@ -17039,12 +16309,6 @@ 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 @@ -17069,10 +16333,10 @@ snapshots: dayjs@1.11.18: {} - 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)): + 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)): optionalDependencies: - '@libsql/client': 0.15.14 - drizzle-orm: 0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.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) debug@2.6.9: dependencies: @@ -17089,18 +16353,10 @@ 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 @@ -17193,9 +16449,6 @@ snapshots: diff-sequences@29.6.3: {} - diff@4.0.2: - optional: true - diff@5.2.0: {} diff@7.0.0: {} @@ -17254,15 +16507,15 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5): + drizzle-orm@0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5): optionalDependencies: - '@libsql/client': 0.15.14 + '@libsql/client': 0.15.15 '@opentelemetry/api': 1.9.0 kysely: 0.28.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): + 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): dependencies: - drizzle-orm: 0.44.5(@libsql/client@0.15.14)(@opentelemetry/api@1.9.0)(kysely@0.28.5) + drizzle-orm: 0.44.5(@libsql/client@0.15.15)(@opentelemetry/api@1.9.0)(kysely@0.28.5) zod: 4.1.5 dunder-proto@1.0.1: @@ -17299,7 +16552,7 @@ snapshots: edgedriver@5.6.1: dependencies: '@wdio/logger': 8.38.0 - '@zip.js/zip.js': 2.7.73 + '@zip.js/zip.js': 2.8.1 decamelize: 6.0.1 edge-paths: 3.0.5 fast-xml-parser: 4.5.3 @@ -17312,7 +16565,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.214: {} + electron-to-chromium@1.5.215: {} embla-carousel-react@8.6.0(react@18.3.1): dependencies: @@ -17354,9 +16607,6 @@ snapshots: entities@6.0.1: {} - env-paths@3.0.0: - optional: true - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -17589,7 +16839,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.42.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) eslint: 9.35.0(jiti@2.5.1) micromatch: 4.0.8 transitivePeerDependencies: @@ -17629,7 +16879,7 @@ snapshots: eslint@9.35.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.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 @@ -17740,7 +16990,7 @@ snapshots: dependencies: cross-fetch: 4.1.0 dotenv: 16.4.7 - openai: 5.19.1(ws@8.18.3)(zod@3.25.76) + openai: 5.20.0(ws@8.18.3)(zod@3.25.76) zod: 3.25.76 zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: @@ -17964,13 +17214,6 @@ 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 @@ -18023,23 +17266,21 @@ snapshots: fraction.js@4.3.7: {} - 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): + framer-motion@11.18.2(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(@emotion/is-prop-valid@0.8.8)(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): 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) @@ -18292,9 +17533,6 @@ snapshots: graphemer@1.4.0: {} - graphql@16.11.0: - optional: true - gzip-size@7.0.0: dependencies: duplexer: 0.1.2 @@ -18515,9 +17753,6 @@ snapshots: he@1.2.0: {} - headers-polyfill@4.0.3: - optional: true - hls.js@1.6.11: {} hoist-non-react-statics@3.3.2: @@ -18544,11 +17779,6 @@ 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 @@ -18665,7 +17895,7 @@ snapshots: dependencies: '@ljharb/through': 2.3.14 ansi-escapes: 4.3.2 - chalk: 5.6.0 + chalk: 5.6.2 cli-cursor: 3.1.0 cli-width: 4.1.0 external-editor: 3.1.0 @@ -18813,9 +18043,6 @@ 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 @@ -18831,9 +18058,6 @@ 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: @@ -19001,8 +18225,6 @@ snapshots: jiti@2.5.1: {} - jose@5.10.0: {} - jose@6.1.0: {} js-base64@3.7.8: {} @@ -19027,34 +18249,6 @@ 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: {} @@ -19400,10 +18594,7 @@ snapshots: dependencies: react: 18.3.1 - luxon@3.7.1: - optional: true - - magic-string@0.30.18: + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -19413,12 +18604,9 @@ snapshots: '@babel/types': 7.28.4 source-map-js: 1.2.1 - 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): + mantine-form-zod-resolver@1.3.0(@mantine/form@8.3.0(react@18.3.1))(zod@4.1.5): dependencies: - '@mantine/form': 8.2.8(react@18.3.1) + '@mantine/form': 8.3.0(react@18.3.1) zod: 4.1.5 markdown-extensions@2.0.0: {} @@ -19673,9 +18861,6 @@ 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 @@ -20081,21 +19266,19 @@ snapshots: motion-utils@12.23.6: {} - motion@11.18.2(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + motion@11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - 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) + framer-motion: 11.18.2(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(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + motion@12.23.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - 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) + framer-motion: 12.23.12(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) @@ -20108,39 +19291,10 @@ 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: {} @@ -20163,16 +19317,6 @@ 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): @@ -20180,17 +19324,17 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - 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)): + 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)): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 - '@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) + '@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) archiver: 7.0.1 c12: 3.2.0(magicast@0.3.5) chokidar: 4.0.3 @@ -20201,7 +19345,7 @@ snapshots: cookie-es: 2.0.0 croner: 9.1.0 crossws: 0.3.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)) + 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)) defu: 6.1.4 destr: 2.0.5 dot-prop: 9.0.0 @@ -20219,7 +19363,7 @@ snapshots: klona: 2.0.6 knitwork: 1.2.0 listhen: 1.9.0 - magic-string: 0.30.18 + magic-string: 0.30.19 magicast: 0.3.5 mime: 4.0.7 mlly: 1.8.0 @@ -20232,8 +19376,8 @@ snapshots: pkg-types: 2.3.0 pretty-bytes: 7.0.1 radix3: 1.1.2 - rollup: 4.50.0 - rollup-plugin-visualizer: 6.0.3(rollup@4.50.0) + rollup: 4.50.1 + rollup-plugin-visualizer: 6.0.3(rollup@4.50.1) scule: 1.3.0 semver: 7.7.2 serve-placeholder: 2.0.2 @@ -20247,7 +19391,7 @@ snapshots: unenv: 2.0.0-rc.20 unimport: 5.2.0 unplugin-utils: 0.3.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) + 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) untyped: 2.0.0 unwasm: 0.3.11 youch: 4.1.0-beta.8 @@ -20334,9 +19478,6 @@ snapshots: numeral@2.0.6: {} - nwsapi@2.2.22: - optional: true - nypm@0.5.4: dependencies: citty: 0.1.6 @@ -20446,7 +19587,7 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@5.19.1(ws@8.18.3)(zod@3.25.76): + openai@5.20.0(ws@8.18.3)(zod@3.25.76): optionalDependencies: ws: 8.18.3 zod: 3.25.76 @@ -20481,9 +19622,6 @@ snapshots: os-tmpdir@1.0.2: {} - outvariant@1.4.3: - optional: true - own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -20510,14 +19648,6 @@ 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 @@ -20560,9 +19690,6 @@ 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 @@ -20621,9 +19748,6 @@ 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: {} @@ -20733,21 +19857,12 @@ snapshots: camelcase-css: 2.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.6.3)): + postcss-load-config@4.0.2(postcss@8.5.6): 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: @@ -20795,15 +19910,13 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - posthog-js@1.261.7(@rrweb/types@2.0.0-alpha.17): + posthog-js@1.261.8: 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: {} @@ -21037,9 +20150,6 @@ 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: @@ -21234,7 +20344,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)(luxon@3.7.1)(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): 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) @@ -21247,7 +20357,6 @@ 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: @@ -21437,13 +20546,6 @@ 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 @@ -21586,23 +20688,21 @@ 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.4.1(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): dependencies: react: 18.3.1 react-dom: 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): + react-router@7.8.2(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.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): + 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): dependencies: '@babel/core': 7.28.4 '@babel/generator': 7.28.3 @@ -21611,9 +20711,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.0) + '@rollup/pluginutils': 5.3.0(rollup@4.50.1) '@types/node': 20.19.13 - bippy: 0.3.26(@types/react@18.3.24)(react@18.3.1) + bippy: 0.3.27(@types/react@18.3.24)(react@18.3.1) esbuild: 0.25.9 estree-walker: 3.0.3 kleur: 4.1.5 @@ -21624,8 +20724,8 @@ snapshots: react-dom: 18.3.1(react@18.3.1) tsx: 4.20.5 optionalDependencies: - 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) + 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) unplugin: 2.1.0 transitivePeerDependencies: - '@types/react' @@ -21667,8 +20767,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - react@19.1.1: {} - read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -21935,9 +21033,6 @@ 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: {} @@ -21988,40 +21083,40 @@ snapshots: robust-predicates@3.0.2: {} - rollup-plugin-visualizer@6.0.3(rollup@4.50.0): + rollup-plugin-visualizer@6.0.3(rollup@4.50.1): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.50.0 + rollup: 4.50.1 - rollup@4.50.0: + rollup@4.50.1: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@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 + '@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 fsevents: 2.3.3 rope-sequence@1.3.4: {} @@ -22045,14 +21140,6 @@ 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: {} @@ -22094,11 +21181,6 @@ 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 @@ -22275,7 +21357,7 @@ snapshots: ip-address: 10.0.1 smart-buffer: 4.2.0 - solid-js@1.9.7: + solid-js@1.9.9: dependencies: csstype: 3.1.3 seroval: 1.3.2 @@ -22375,9 +21457,6 @@ 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: @@ -22390,7 +21469,7 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string.prototype.matchall@4.0.12: dependencies: @@ -22453,9 +21532,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.2.0 + ansi-regex: 6.2.2 strip-final-newline@3.0.0: {} @@ -22493,7 +21572,7 @@ snapshots: dependencies: postcss: 8.5.6 - supports-color@10.2.0: {} + supports-color@10.2.2: {} supports-color@7.2.0: dependencies: @@ -22516,49 +21595,19 @@ 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.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): + 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): dependencies: - '@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/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 tsx: 4.20.5 - 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 - 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.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)): + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -22577,7 +21626,7 @@ 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)(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-load-config: 4.0.2(postcss@8.5.6) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.10 @@ -22667,6 +21716,8 @@ snapshots: throttleit@1.0.1: optional: true + throttleit@2.1.0: {} + through@2.3.8: {} tiny-inflate@1.0.3: {} @@ -22698,14 +21749,6 @@ 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 @@ -22728,30 +21771,12 @@ 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: {} @@ -22768,48 +21793,6 @@ 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 @@ -22842,8 +21825,6 @@ snapshots: turbo-linux-arm64@2.5.6: optional: true - turbo-stream@2.4.0: {} - turbo-windows-64@2.5.6: optional: true @@ -22922,12 +21903,12 @@ snapshots: typedarray@0.0.6: optional: true - typescript-eslint@8.42.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@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) + '@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) eslint: 9.35.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -22964,7 +21945,7 @@ snapshots: dependencies: acorn: 8.15.0 estree-walker: 3.0.3 - magic-string: 0.30.18 + magic-string: 0.30.19 unplugin: 2.3.10 undici-types@6.21.0: {} @@ -22997,9 +21978,6 @@ 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: @@ -23018,7 +21996,7 @@ snapshots: escape-string-regexp: 5.0.0 estree-walker: 3.0.3 local-pkg: 1.1.2 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 pathe: 2.0.3 picomatch: 4.0.3 @@ -23066,9 +22044,6 @@ 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: @@ -23094,7 +22069,7 @@ snapshots: picomatch: 4.0.3 webpack-virtual-modules: 0.6.2 - 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): + 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): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -23105,8 +22080,7 @@ snapshots: ofetch: 1.4.1 ufo: 1.6.1 optionalDependencies: - '@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)) + 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 untun@0.1.3: @@ -23126,7 +22100,7 @@ snapshots: unwasm@0.3.11: dependencies: knitwork: 1.2.0 - magic-string: 0.30.18 + magic-string: 0.30.19 mlly: 1.8.0 pathe: 2.0.3 pkg-types: 2.3.0 @@ -23159,17 +22133,8 @@ 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 @@ -23225,9 +22190,6 @@ 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: @@ -23265,13 +22227,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.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@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)): dependencies: fast-glob: 3.3.3 micromatch: 4.0.8 mime-types: 3.0.1 - 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) + 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) 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): @@ -23280,7 +22242,7 @@ snapshots: debug: 4.4.1(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - 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: 5.4.20(@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 @@ -23292,22 +22254,22 @@ snapshots: - supports-color - terser - 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)): + 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)): 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.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: 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) transitivePeerDependencies: - supports-color - typescript - 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@5.4.20(@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.0 + rollup: 4.50.1 optionalDependencies: '@types/node': 22.18.1 fsevents: 2.3.3 @@ -23315,13 +22277,13 @@ snapshots: sugarss: 5.0.1(postcss@8.5.6) terser: 5.44.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): + 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): dependencies: esbuild: 0.25.9 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.50.0 + rollup: 4.50.1 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.18.1 @@ -23333,15 +22295,15 @@ snapshots: 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)): + 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)): optionalDependencies: - 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) + 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) - 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): + 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): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@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/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/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -23350,7 +22312,7 @@ snapshots: chai: 5.3.3 debug: 4.4.1(supports-color@8.1.1) expect-type: 1.2.2 - magic-string: 0.30.18 + magic-string: 0.30.19 pathe: 2.0.3 picomatch: 4.0.3 std-env: 3.9.0 @@ -23359,13 +22321,12 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.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: 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-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 @@ -23396,11 +22357,6 @@ 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 @@ -23481,9 +22437,6 @@ snapshots: webidl-conversions@4.0.2: {} - webidl-conversions@7.0.0: - optional: true - webpack-virtual-modules@0.6.2: {} whatwg-encoding@3.1.1: @@ -23492,12 +22445,6 @@ 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 @@ -23588,25 +22535,16 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 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 @@ -23614,9 +22552,6 @@ 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: {} @@ -23665,16 +22600,10 @@ 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: