From 1df94b0d7e34bba778fe4a9b4a3a617f12ee98f5 Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Fri, 3 Jul 2026 00:53:07 +0530 Subject: [PATCH 1/8] feat(examples): convert drop-in examples to fetchLLM Replace hand-written ChatLLM objects with fetchLLM({ url, streamAdapter, messageFormat }) in openui-chat, shadcn-chat, material-ui-chat, supabase-chat, mastra-chat, and form-generator. No route changes: all routes read body.messages (supabase also body.threadId, which fetchLLM sends natively) and ignore the extra RunAgentInput fields. Aligns the examples with what the docs already teach ("most apps never construct a ChatLLM by hand"). Verified: tsc --noEmit + next/vite build per app. Co-Authored-By: Claude Fable 5 --- examples/form-generator/src/app/page.tsx | 136 ++++++++++----------- examples/mastra-chat/src/app/page.tsx | 25 ++-- examples/material-ui-chat/src/app/page.tsx | 25 ++-- examples/openui-chat/src/app/page.tsx | 31 ++--- examples/shadcn-chat/src/app/page.tsx | 27 ++-- examples/supabase-chat/src/app/page.tsx | 27 ++-- 6 files changed, 116 insertions(+), 155 deletions(-) diff --git a/examples/form-generator/src/app/page.tsx b/examples/form-generator/src/app/page.tsx index 41ed70788..81deff179 100644 --- a/examples/form-generator/src/app/page.tsx +++ b/examples/form-generator/src/app/page.tsx @@ -3,6 +3,7 @@ import { herouiChatLibrary } from "@/lib/heroui-genui"; import type { Message } from "@openuidev/react-headless"; import { + fetchLLM, openAIAdapter, openAIMessageFormat, processStreamedMessage, @@ -33,6 +34,11 @@ const STARTERS = [ }, ]; +const llm = fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, +}); export default function Page() { const [instruction, setInstruction] = useState(""); @@ -44,73 +50,72 @@ export default function Page() { const [error, setError] = useState(null); const abortRef = useRef(null); - const handleSubmit = useCallback(async (overrideText?: string) => { - const text = (overrideText ?? instruction).trim(); - if (!text || isStreaming) return; + const handleSubmit = useCallback( + async (overrideText?: string) => { + const text = (overrideText ?? instruction).trim(); + if (!text || isStreaming) return; - setError(null); - setInstruction(""); + setError(null); + setInstruction(""); - let userContent = text; - if (Object.keys(formFieldSnapshot).length > 0) { - userContent = `Current form values (JSON): ${JSON.stringify(formFieldSnapshot)}\n\n${text}`; - } + let userContent = text; + if (Object.keys(formFieldSnapshot).length > 0) { + userContent = `Current form values (JSON): ${JSON.stringify(formFieldSnapshot)}\n\n${text}`; + } - const userMsg: Message = { id: crypto.randomUUID(), role: "user", content: userContent }; - const nextMessages = [...messages, userMsg]; - setMessages(nextMessages); + const userMsg: Message = { id: crypto.randomUUID(), role: "user", content: userContent }; + const nextMessages = [...messages, userMsg]; + setMessages(nextMessages); - const abortController = new AbortController(); - abortRef.current = abortController; - setIsStreaming(true); - setStreamingCode(""); + const abortController = new AbortController(); + abortRef.current = abortController; + setIsStreaming(true); + setStreamingCode(""); - let draftContent = ""; + let draftContent = ""; - try { - const response = await fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - messages: openAIMessageFormat.toApi(nextMessages as any), - }), - signal: abortController.signal, - }); + try { + const response = await llm.send({ + threadId: "form", + messages: nextMessages, + signal: abortController.signal, + }); - if (!response.ok) throw new Error(`HTTP ${response.status}`); + if (!response.ok) throw new Error(`HTTP ${response.status}`); - const assistantId = crypto.randomUUID(); + const assistantId = crypto.randomUUID(); - const applyContent = (msg: Message) => { - draftContent = typeof msg.content === "string" ? msg.content : ""; - setStreamingCode(draftContent); - }; + const applyContent = (msg: Message) => { + draftContent = typeof msg.content === "string" ? msg.content : ""; + setStreamingCode(draftContent); + }; - await processStreamedMessage({ - response, - adapter: openAIAdapter(), - createMessage: applyContent, - updateMessage: applyContent, - }); + await processStreamedMessage({ + response, + adapter: llm.streamProtocol, + createMessage: applyContent, + updateMessage: applyContent, + }); - const assistantMsg: Message = { - id: assistantId, - role: "assistant", - content: draftContent, - }; - setMessages((prev) => [...prev, assistantMsg]); - setLatestCode(draftContent); - setStreamingCode(null); - } catch (err) { - if ((err as Error).name !== "AbortError") { - setError((err as Error).message ?? "Something went wrong."); + const assistantMsg: Message = { + id: assistantId, + role: "assistant", + content: draftContent, + }; + setMessages((prev) => [...prev, assistantMsg]); + setLatestCode(draftContent); + setStreamingCode(null); + } catch (err) { + if ((err as Error).name !== "AbortError") { + setError((err as Error).message ?? "Something went wrong."); + } + } finally { + setIsStreaming(false); + abortRef.current = null; } - } finally { - setIsStreaming(false); - abortRef.current = null; - } - }, [instruction, isStreaming, messages, formFieldSnapshot]); + }, + [instruction, isStreaming, messages, formFieldSnapshot], + ); const handleReset = useCallback(() => { abortRef.current?.abort(); @@ -149,9 +154,7 @@ export default function Page() {
{/* Title */}
-

- AI Form Generator -

+

AI Form Generator

Describe a form and get a live, interactive preview instantly.

@@ -187,15 +190,14 @@ export default function Page() { {STARTERS.map((s) => ( ))}
@@ -226,9 +228,7 @@ export default function Page() { {/* Message history */}
{userMessages.slice(1).length === 0 && ( -

- Refinements will appear here. -

+

Refinements will appear here.

)} {userMessages.slice(1).map((msg, i) => (
diff --git a/examples/mastra-chat/src/app/page.tsx b/examples/mastra-chat/src/app/page.tsx index 8571dbdfe..58fd715a1 100644 --- a/examples/mastra-chat/src/app/page.tsx +++ b/examples/mastra-chat/src/app/page.tsx @@ -1,27 +1,22 @@ "use client"; import { useTheme } from "@/hooks/use-system-theme"; -import { AgentInterface, agUIAdapter, type ChatLLM } from "@openuidev/react-ui"; +import { AgentInterface, agUIAdapter, fetchLLM } from "@openuidev/react-ui"; import { openuiChatLibrary } from "@openuidev/react-ui/genui-lib"; import { useMemo } from "react"; export default function Page() { const mode = useTheme(); - // The backend call is unchanged — only the chat surface moved from FullScreen - // to AgentInterface. Storage is omitted, so AgentInterface uses its built-in - // in-memory default (wiped on reload). - const llm = useMemo( - () => ({ - send: ({ messages, threadId, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ messages, threadId }), - signal, - }), - streamProtocol: agUIAdapter(), - }), + // fetchLLM's default message format POSTs { messages, threadId, ... } — + // exactly what the Mastra route expects. Storage is omitted, so + // AgentInterface uses its built-in in-memory default (wiped on reload). + const llm = useMemo( + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: agUIAdapter(), + }), [], ); diff --git a/examples/material-ui-chat/src/app/page.tsx b/examples/material-ui-chat/src/app/page.tsx index 264e23e90..da8a4899e 100644 --- a/examples/material-ui-chat/src/app/page.tsx +++ b/examples/material-ui-chat/src/app/page.tsx @@ -5,12 +5,7 @@ import LightModeIcon from "@mui/icons-material/LightMode"; import Box from "@mui/material/Box"; import IconButton from "@mui/material/IconButton"; import Tooltip from "@mui/material/Tooltip"; -import { - AgentInterface, - openAIAdapter, - openAIMessageFormat, - type ChatLLM, -} from "@openuidev/react-ui"; +import { AgentInterface, fetchLLM, openAIAdapter, openAIMessageFormat } from "@openuidev/react-ui"; import { useMemo } from "react"; import { useColorMode } from "@/hooks/use-system-theme"; @@ -19,17 +14,13 @@ import { muiChatLibrary } from "@/lib/mui-genui"; export default function Page() { const { mode, toggle } = useColorMode(); - const llm = useMemo( - () => ({ - send: ({ messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ messages: openAIMessageFormat.toApi(messages) }), - signal, - }), - streamProtocol: openAIAdapter(), - }), + const llm = useMemo( + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, + }), [], ); diff --git a/examples/openui-chat/src/app/page.tsx b/examples/openui-chat/src/app/page.tsx index f3d7d3433..ad2913f65 100644 --- a/examples/openui-chat/src/app/page.tsx +++ b/examples/openui-chat/src/app/page.tsx @@ -1,32 +1,23 @@ "use client"; import { useTheme } from "@/hooks/use-system-theme"; -import { - AgentInterface, - openAIAdapter, - openAIMessageFormat, - type ChatLLM, -} from "@openuidev/react-ui"; +import { AgentInterface, fetchLLM, openAIAdapter, openAIMessageFormat } from "@openuidev/react-ui"; import { openuiChatLibrary } from "@openuidev/react-ui/genui-lib"; import { useMemo } from "react"; export default function Page() { const mode = useTheme(); - // AgentInterface uses its built-in in-memory storage (wiped on reload). The - // backend call is unchanged — only the chat surface moved from FullScreen to - // AgentInterface. - const llm = useMemo( - () => ({ - send: ({ messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ messages: openAIMessageFormat.toApi(messages) }), - signal, - }), - streamProtocol: openAIAdapter(), - }), + // AgentInterface uses its built-in in-memory storage (wiped on reload). + // fetchLLM POSTs the run payload to /api/chat, sending messages in OpenAI + // format and parsing the OpenAI-style SSE response. + const llm = useMemo( + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, + }), [], ); diff --git a/examples/shadcn-chat/src/app/page.tsx b/examples/shadcn-chat/src/app/page.tsx index 51561636b..42bec3125 100644 --- a/examples/shadcn-chat/src/app/page.tsx +++ b/examples/shadcn-chat/src/app/page.tsx @@ -2,30 +2,19 @@ import { useTheme } from "@/hooks/use-system-theme"; import { shadcnChatLibrary } from "@/lib/shadcn-genui"; -import { - AgentInterface, - openAIAdapter, - openAIMessageFormat, - type ChatLLM, -} from "@openuidev/react-ui"; +import { AgentInterface, fetchLLM, openAIAdapter, openAIMessageFormat } from "@openuidev/react-ui"; import { useMemo } from "react"; export default function Page() { const mode = useTheme(); - const llm = useMemo( - () => ({ - send: ({ messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - messages: openAIMessageFormat.toApi(messages), - }), - signal, - }), - streamProtocol: openAIAdapter(), - }), + const llm = useMemo( + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, + }), [], ); diff --git a/examples/supabase-chat/src/app/page.tsx b/examples/supabase-chat/src/app/page.tsx index d51769e64..f12ffc413 100644 --- a/examples/supabase-chat/src/app/page.tsx +++ b/examples/supabase-chat/src/app/page.tsx @@ -3,10 +3,10 @@ import { createSupabaseBrowser } from "@/lib/supabase/browser"; import { AgentInterface, + fetchLLM, openAIAdapter, openAIMessageFormat, restStorage, - type ChatLLM, } from "@openuidev/react-ui"; import type { RealtimeChannel } from "@supabase/supabase-js"; import { useEffect, useMemo, useState } from "react"; @@ -24,21 +24,16 @@ export default function Page() { () => restStorage({ baseUrl: "/api/threads", messageFormat: openAIMessageFormat }), [], ); - const llm = useMemo( - () => ({ - send: ({ threadId, messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - // Convert from OpenUI's internal format to OpenAI chat format - messages: openAIMessageFormat.toApi(messages), - threadId, - }), - signal, - }), - streamProtocol: openAIAdapter(), - }), + // fetchLLM POSTs { threadId, runId, messages, tools, context }; the route + // reads the top-level threadId and messages (OpenAI chat format via + // openAIMessageFormat) and ignores the rest. + const llm = useMemo( + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, + }), [], ); From ae88f1cd31acbb860b38461faa35e2469cc5277d Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Fri, 3 Jul 2026 00:53:07 +0530 Subject: [PATCH 2/8] feat(examples): hands-on-table-chat -> fetchLLM; pin shared table key server-side MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The client used to send TableContext's threadId (always "default"), which keys the server-side table store. fetchLLM sends AgentInterface's per-thread uuid instead, which would desync chat tools from the visible spreadsheet — so the route now keys the shared table store by the constant "default" and ignores body.threadId, preserving today's actual behavior (setThreadId was never called anywhere). Co-Authored-By: Claude Fable 5 --- .../src/app/api/chat/route.ts | 37 +++++++++--------- examples/hands-on-table-chat/src/app/page.tsx | 38 ++++++------------- 2 files changed, 29 insertions(+), 46 deletions(-) diff --git a/examples/hands-on-table-chat/src/app/api/chat/route.ts b/examples/hands-on-table-chat/src/app/api/chat/route.ts index a88de26d0..537619baf 100644 --- a/examples/hands-on-table-chat/src/app/api/chat/route.ts +++ b/examples/hands-on-table-chat/src/app/api/chat/route.ts @@ -1,13 +1,13 @@ import { readFileSync } from "fs"; -import { join } from "path"; import { NextRequest } from "next/server"; import OpenAI from "openai"; import type { ChatCompletionMessageParam } from "openai/resources/chat/completions.mjs"; -import { tools, setCurrentThreadId } from "./tools"; +import { join } from "path"; +import { setCurrentThreadId, tools } from "./tools"; const generatedPrompt = readFileSync( join(process.cwd(), "src/generated/system-prompt.txt"), - "utf-8" + "utf-8", ); const SPREADSHEET_INSTRUCTIONS = ` @@ -83,7 +83,7 @@ function extractText(msg: any): string { function sseToolCallStart( encoder: TextEncoder, tc: { id: string; function: { name: string } }, - index: number + index: number, ) { return encoder.encode( `data: ${JSON.stringify({ @@ -105,7 +105,7 @@ function sseToolCallStart( finish_reason: null, }, ], - })}\n\n` + })}\n\n`, ); } @@ -113,7 +113,7 @@ function sseToolCallArgs( encoder: TextEncoder, tc: { id: string; function: { arguments: string } }, result: string, - index: number + index: number, ) { let enrichedArgs: string; try { @@ -137,19 +137,20 @@ function sseToolCallArgs( finish_reason: null, }, ], - })}\n\n` + })}\n\n`, ); } export async function POST(req: NextRequest) { - const { messages, threadId } = await req.json(); + const { messages } = await req.json(); - setCurrentThreadId(threadId ?? "default"); + // Single shared table store keyed on "default"; chat threads are ephemeral, so + // we deliberately ignore the client's per-thread id (it would desync the tools + // from the one spreadsheet visible on screen). + setCurrentThreadId("default"); /* eslint-disable @typescript-eslint/no-explicit-any */ - const lastUserMsg = (messages as any[]) - .filter((m: any) => m.role === "user") - .pop(); + const lastUserMsg = (messages as any[]).filter((m: any) => m.role === "user").pop(); if (lastUserMsg) extractText(lastUserMsg); const cleanMessages = (messages as any[]) @@ -212,9 +213,7 @@ export async function POST(req: NextRequest) { runner.on("functionToolCall", (fc: any) => { const id = `tc-${callIdx}`; pendingCalls.push({ id, name: fc.name, arguments: fc.arguments }); - enqueue( - sseToolCallStart(encoder, { id, function: { name: fc.name } }, callIdx) - ); + enqueue(sseToolCallStart(encoder, { id, function: { name: fc.name } }, callIdx)); callIdx++; }); @@ -226,8 +225,8 @@ export async function POST(req: NextRequest) { encoder, { id: tc.id, function: { arguments: tc.arguments } }, result, - resultIdx - ) + resultIdx, + ), ); } resultIdx++; @@ -254,9 +253,7 @@ export async function POST(req: NextRequest) { runner.on("error", (err: any) => { const msg = err instanceof Error ? err.message : "Stream error"; console.error("Chat route error:", msg); - enqueue( - encoder.encode(`data: ${JSON.stringify({ error: msg })}\n\n`) - ); + enqueue(encoder.encode(`data: ${JSON.stringify({ error: msg })}\n\n`)); close(); }); /* eslint-enable @typescript-eslint/no-explicit-any */ diff --git a/examples/hands-on-table-chat/src/app/page.tsx b/examples/hands-on-table-chat/src/app/page.tsx index fc3f3ea24..7d418e52e 100644 --- a/examples/hands-on-table-chat/src/app/page.tsx +++ b/examples/hands-on-table-chat/src/app/page.tsx @@ -1,40 +1,26 @@ "use client"; import { spreadsheetLibrary } from "@/lib/spreadsheet-library"; -import { - AgentInterface, - openAIAdapter, - openAIMessageFormat, - type ChatLLM, -} from "@openuidev/react-ui"; +import { AgentInterface, fetchLLM, openAIAdapter, openAIMessageFormat } from "@openuidev/react-ui"; import { MessageSquare, PanelRightClose } from "lucide-react"; import dynamic from "next/dynamic"; import { useCallback, useEffect, useMemo, useState } from "react"; -import { TableProvider, useTableContext } from "./TableContext"; +import { TableProvider } from "./TableContext"; const PersistentSpreadsheet = dynamic(() => import("./PersistentSpreadsheet"), { ssr: false }); function ChatPanel({ onClose }: { onClose: () => void }) { - const { threadId } = useTableContext(); - // AgentInterface uses its built-in in-memory storage default (wiped on reload). - // The backend call is unchanged — only the chat surface moved from Copilot to - // AgentInterface. - const llm = useMemo( - () => ({ - send: ({ messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - messages: openAIMessageFormat.toApi(messages), - threadId, - }), - signal, - }), - streamProtocol: openAIAdapter(), - }), - [threadId], + // fetchLLM sends AgentInterface's per-thread id, but the server ignores it and + // keys the shared table store on "default" (see api/chat/route.ts). + const llm = useMemo( + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, + }), + [], ); return ( From 5d0e926f838002ca0df36c47df0f6399eada7a9b Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Fri, 3 Jul 2026 00:53:07 +0530 Subject: [PATCH 3/8] feat(examples): pi-agent-harness -> fetchLLM with server-side prompt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Page: custom ChatLLM -> fetchLLM (openAIReadableStreamAdapter + openAIMessageFormat); client no longer computes the system prompt. - Route: conversation id now read from body.threadId (fetchLLM sends it), x-conversation-id header kept as fallback; system prompt computed server-side from openuiLibrary with body.systemPrompt as optional override. - next.config.ts: issuer-scoped webpack external for genui-lib — Next 16's route-handler graph rejects its client-oriented React imports when bundled; scoping avoids a second React instance during page SSR. - Docs page updated to match the new wiring (snippets + prose). Verified: tsc, next build, runtime smoke test, docs build. Co-Authored-By: Claude Fable 5 --- .../examples/harnesses/pi-agent-harness.mdx | 52 +++++++++---------- examples/harnesses/pi-agent-harness/README.md | 19 ++++--- .../harnesses/pi-agent-harness/next.config.ts | 23 ++++++-- .../src/app/api/chat/route.ts | 15 +++++- .../pi-agent-harness/src/app/page.tsx | 38 +++++--------- .../pi-agent-harness/src/lib/pi-session.ts | 2 +- 6 files changed, 82 insertions(+), 67 deletions(-) diff --git a/docs/content/docs/openui-lang/examples/harnesses/pi-agent-harness.mdx b/docs/content/docs/openui-lang/examples/harnesses/pi-agent-harness.mdx index ae362d8ba..e5606d3c8 100644 --- a/docs/content/docs/openui-lang/examples/harnesses/pi-agent-harness.mdx +++ b/docs/content/docs/openui-lang/examples/harnesses/pi-agent-harness.mdx @@ -26,39 +26,32 @@ Its mid-turn activity (reasoning and tool runs) surfaces as cards too. | Piece | File | Role | | --- | --- | --- | -| Frontend | `src/app/page.tsx` | A single `` whose `llm.send` posts to the bridge with `streamProtocol: openAIReadableStreamAdapter()`. Generates the OpenUI Lang system prompt and sends it with each turn. | -| Bridge route | `src/app/api/chat/route.ts` | Drives a pi `AgentSession` and re-emits its events as NDJSON OpenAI chunks (`delta.content` is OpenUI Lang). | -| Session registry | `src/lib/pi-session.ts` | One persistent `AgentSession` per chat thread, keyed by the `x-conversation-id` header. | +| Frontend | `src/app/page.tsx` | A single `` wired to `fetchLLM`, which posts each turn to the bridge and parses the reply with `openAIReadableStreamAdapter()`. | +| Bridge route | `src/app/api/chat/route.ts` | Computes the OpenUI Lang system prompt server-side, drives a pi `AgentSession`, and re-emits its events as NDJSON OpenAI chunks (`delta.content` is OpenUI Lang). | +| Session registry | `src/lib/pi-session.ts` | One persistent `AgentSession` per chat thread, keyed by the `threadId` that `fetchLLM` sends in the request body. | | Agent | `@earendil-works/pi-coding-agent` | The pi coding agent: `read` / `bash` / `edit` / `write` on the workspace you choose at launch. | Everything runs in **one Next.js process**: the App-Router route _is_ the backend. The pi SDK is embedded directly (no separate server), so there is no second service and no CORS. Each chat thread maps to one persistent pi `AgentSession`, so multi-turn context is preserved. ## Connecting the frontend -The client is a single `` (the artifact chat surface with sidebar thread history). It generates the OpenUI Lang system prompt from the component library, sends it with each turn via its `llm.send`, and parses the response with `openAIReadableStreamAdapter()` (NDJSON OpenAI chunks): +The client is a single `` (the artifact chat surface with sidebar thread history) wired to `fetchLLM`. It posts each turn to the bridge — including the thread's stable client-generated id as `threadId` in the body — and parses the response with `openAIReadableStreamAdapter()` (NDJSON OpenAI chunks): ```tsx import { AgentInterface, + fetchLLM, openAIMessageFormat, openAIReadableStreamAdapter, - type ChatLLM, } from "@openuidev/react-ui"; -import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui/genui-lib"; - -const systemPrompt = openuiLibrary.prompt(openuiPromptOptions); - -const llm: ChatLLM = { - // threadId is stable per thread, so each thread maps to its own persistent pi AgentSession. - send: ({ threadId, messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json", "x-conversation-id": threadId }, - body: JSON.stringify({ systemPrompt, messages: openAIMessageFormat.toApi(messages) }), - signal, - }), - streamProtocol: openAIReadableStreamAdapter(), -}; +import { openuiLibrary } from "@openuidev/react-ui/genui-lib"; + +// threadId is stable per thread, so each thread maps to its own persistent pi AgentSession. +const llm = fetchLLM({ + url: "/api/chat", + streamAdapter: openAIReadableStreamAdapter(), + messageFormat: openAIMessageFormat, +}); ; ``` -The `systemPrompt` generated here is the **same** string the backend injects into pi, so the model's markup always matches the component set the renderer knows. +The client does **not** generate the OpenUI Lang system prompt. The route computes it server-side from the **same** `openuiLibrary` this page renders with, so the model's markup always matches the component set the renderer knows — and the client doesn't have to ship the (large) prompt. A request can still pass `systemPrompt` in the body as an optional override. ## The bridge route -The route keys a persistent `AgentSession` by the `x-conversation-id` header, injects the OpenUI Lang prompt via `appendSystemPrompt`, subscribes to the session's events, and re-emits them as NDJSON OpenAI chunks. Because pi keeps its own transcript, only the newest user turn is sent to `session.prompt()`: +The route keys a persistent `AgentSession` by the `threadId` that `fetchLLM` sends in the request body (an `x-conversation-id` header is kept only as a fallback for older/custom clients), computes the OpenUI Lang prompt server-side (`body.systemPrompt` can override it), injects it via `appendSystemPrompt`, subscribes to the session's events, and re-emits them as NDJSON OpenAI chunks. Because pi keeps its own transcript, only the newest user turn is sent to `session.prompt()`: ```ts // lib/pi-session.ts: one AgentSession per conversation @@ -89,7 +82,12 @@ const { session } = await createAgentSession({ cwd, agentDir, settingsManager, r ``` ```ts -// app/api/chat/route.ts: translate pi events into OpenAI NDJSON +// app/api/chat/route.ts: server-side OpenUI prompt, then pi events into OpenAI NDJSON +const defaultSystemPrompt = openuiLibrary.prompt(openuiPromptOptions); + +const conversationId = + body.threadId || req.headers.get("x-conversation-id") || crypto.randomUUID(); + const unsubscribe = session.subscribe((event) => { if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") { enqueue(ndjsonChunk({ content: event.assistantMessageEvent.delta })); @@ -99,7 +97,7 @@ await session.prompt(lastUserText); enqueue(ndjsonChunk({}, "stop")); ``` -The pi SDK is ESM-only, so it is loaded with a native dynamic `import()` and marked as a webpack external in `next.config.ts` (the example runs with `--webpack`). +The pi SDK is ESM-only, so it is loaded with a native dynamic `import()` and marked as a webpack external in `next.config.ts` (the example runs with `--webpack`). The same config also externalizes `@openuidev/react-ui/genui-lib` — scoped to imports issued from the API routes — because the route computes the OpenUI prompt from it server-side and Next's route-handler graph would otherwise reject its client-oriented React imports at build time. ## Thinking states @@ -143,12 +141,12 @@ The pi SDK resolves a model from either an environment API key (`ANTHROPIC_API_K ``` examples/harnesses/pi-agent-harness/ -|- src/app/page.tsx # wired to openAIReadableStreamAdapter() -|- src/app/api/chat/route.ts # pi event stream into NDJSON OpenAI chunks +|- src/app/page.tsx # wired to fetchLLM + openAIReadableStreamAdapter() +|- src/app/api/chat/route.ts # server-side OpenUI prompt; pi event stream into NDJSON OpenAI chunks |- src/lib/pi-session.ts # one persistent pi AgentSession per conversation |- src/library.ts # the OpenUI component library (re-exported) |- scripts/launch.mjs # picks the agent workspace, then starts Next -|- next.config.ts # keeps the ESM-only pi SDK external +|- next.config.ts # keeps the ESM-only pi SDK (and, for API routes, genui-lib) external ``` ## Run the example diff --git a/examples/harnesses/pi-agent-harness/README.md b/examples/harnesses/pi-agent-harness/README.md index 12a4a0522..66a328abf 100644 --- a/examples/harnesses/pi-agent-harness/README.md +++ b/examples/harnesses/pi-agent-harness/README.md @@ -14,8 +14,9 @@ launch — see **Security** below. ``` Browser (src/app/page.tsx) - AgentInterface ──POST /api/chat ({ systemPrompt, messages })──► route.ts (runtime=nodejs) - + openuiLibrary x-conversation-id: │ + AgentInterface ──POST /api/chat ({ threadId, messages, … })──► route.ts (runtime=nodejs) + + fetchLLM │ + + openuiLibrary │ renderer ◄──NDJSON OpenAI chunks (delta.content = OpenUI Lang)─────────┤ ▼ src/lib/pi-session.ts @@ -33,12 +34,14 @@ launch — see **Security** below. - **Transport:** the frontend's `openAIReadableStreamAdapter()` parses **NDJSON** OpenAI `chat.completion.chunk`s (one JSON object per line). The route translates pi's `text_delta` events into `delta.content`, and pi's reasoning + tool executions into `delta.tool_calls`. -- **System prompt:** `page.tsx` generates the OpenUI Lang prompt client-side - (`openuiLibrary.prompt(openuiPromptOptions)`) and sends it in the request body; the route - injects it into Pi via `DefaultResourceLoader({ appendSystemPrompt: [...] })`, so the backend - prompt and the frontend renderer always reference the same component library. -- **Sessions:** each chat thread (a stable id sent as the `x-conversation-id` header) maps to - one persistent Pi `AgentSession`, so multi-turn context is preserved. +- **System prompt:** the route generates the OpenUI Lang prompt server-side + (`openuiLibrary.prompt(openuiPromptOptions)`) and injects it into Pi via + `DefaultResourceLoader({ appendSystemPrompt: [...] })`, so the backend prompt and the frontend + renderer always reference the same component library. A client may send `systemPrompt` in the + request body as an override. +- **Sessions:** each chat thread (a stable id `fetchLLM` sends as `threadId` in the request body; + the legacy `x-conversation-id` header still works as a fallback) maps to one persistent Pi + `AgentSession`, so multi-turn context is preserved. ## Prerequisites diff --git a/examples/harnesses/pi-agent-harness/next.config.ts b/examples/harnesses/pi-agent-harness/next.config.ts index ba0c4e2a8..4051aca0c 100644 --- a/examples/harnesses/pi-agent-harness/next.config.ts +++ b/examples/harnesses/pi-agent-harness/next.config.ts @@ -14,8 +14,8 @@ const nextConfig: NextConfig = { serverExternalPackages: ["@earendil-works/pi-coding-agent"], webpack: (config, { isServer }) => { if (isServer) { - const externalizePi = ( - { request }: { request?: string }, + const externalize = ( + { context, request }: { context?: string; request?: string }, callback: (err?: null, result?: string) => void, ) => { if (request && /^@earendil-works\/pi-coding-agent(\/|$)/.test(request)) { @@ -25,11 +25,26 @@ const nextConfig: NextConfig = { // bundler never sees them once this entry point is external). return callback(null, `import ${request}`); } + // The chat route computes the OpenUI system prompt server-side from + // genui-lib. That module imports React hooks without a "use client" + // directive, which Next's route-handler (react-server) graph rejects at + // build time even though the route only calls the pure + // `openuiLibrary.prompt()`, never a renderer. Loading it as a runtime + // external skips that bundler check. Scoped to imports issued from the + // API routes so the page's SSR graph still bundles genui-lib against + // Next's own React copy. + if ( + request === "@openuidev/react-ui/genui-lib" && + context && + /[\\/]src[\\/]app[\\/]api[\\/]/.test(context) + ) { + return callback(null, `import ${request}`); + } return callback(); }; config.externals = Array.isArray(config.externals) - ? [externalizePi, ...config.externals] - : [externalizePi]; + ? [externalize, ...config.externals] + : [externalize]; } return config; }, diff --git a/examples/harnesses/pi-agent-harness/src/app/api/chat/route.ts b/examples/harnesses/pi-agent-harness/src/app/api/chat/route.ts index 56a04b677..305036769 100644 --- a/examples/harnesses/pi-agent-harness/src/app/api/chat/route.ts +++ b/examples/harnesses/pi-agent-harness/src/app/api/chat/route.ts @@ -1,4 +1,5 @@ import { abortSession, getOrCreateSession } from "@/lib/pi-session"; +import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui/genui-lib"; import type { NextRequest } from "next/server"; // The Pi SDK spawns bash, reads the filesystem, and talks to model providers — @@ -6,7 +7,14 @@ import type { NextRequest } from "next/server"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; +// OpenUI Lang instructions for the same component library the page renders with, +// computed server-side so the client doesn't have to ship the (large) prompt. +const defaultSystemPrompt = openuiLibrary.prompt(openuiPromptOptions); + interface ChatBody { + /** Per-thread id sent by fetchLLM; maps to a persistent pi AgentSession. */ + threadId?: string; + /** Optional override for the server-computed OpenUI system prompt. */ systemPrompt?: string; messages?: Array<{ role?: string; content?: unknown }>; } @@ -60,7 +68,10 @@ function extractText(content: unknown): string { export async function POST(req: NextRequest) { const body = (await req.json().catch(() => ({}))) as ChatBody; - const conversationId = req.headers.get("x-conversation-id") || crypto.randomUUID(); + // fetchLLM sends the thread id in the body; the `x-conversation-id` header is + // kept as a fallback for older/custom clients. + const conversationId = + body.threadId || req.headers.get("x-conversation-id") || crypto.randomUUID(); const cwd = process.env.PI_AGENT_CWD || process.cwd(); // The frontend re-sends the full thread, but Pi keeps its own transcript, so @@ -73,7 +84,7 @@ export async function POST(req: NextRequest) { try { const entry = await getOrCreateSession(conversationId, { cwd, - systemPrompt: body.systemPrompt, + systemPrompt: body.systemPrompt || defaultSystemPrompt, }); session = entry.session; modelFallbackMessage = entry.modelFallbackMessage; diff --git a/examples/harnesses/pi-agent-harness/src/app/page.tsx b/examples/harnesses/pi-agent-harness/src/app/page.tsx index e6ec006d6..76008f958 100644 --- a/examples/harnesses/pi-agent-harness/src/app/page.tsx +++ b/examples/harnesses/pi-agent-harness/src/app/page.tsx @@ -4,38 +4,26 @@ import "@openuidev/react-ui/styles/index.css"; import { AgentInterface, + fetchLLM, openAIMessageFormat, openAIReadableStreamAdapter, - type ChatLLM, } from "@openuidev/react-ui"; -import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui/genui-lib"; +import { openuiLibrary } from "@openuidev/react-ui/genui-lib"; import { useMemo } from "react"; -const systemPrompt = openuiLibrary.prompt(openuiPromptOptions); - export default function Home() { // AgentInterface uses its built-in in-memory storage default (wiped on reload). - // Each new thread gets a stable client-generated id, so the per-thread - // x-conversation-id maps to an isolated pi AgentSession. The backend call is - // unchanged; only the chat surface moved from FullScreen to AgentInterface. - const llm = useMemo( - () => ({ - send: ({ threadId, messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { - "Content-Type": "application/json", - // Map each chat thread to its own persistent pi AgentSession. - "x-conversation-id": threadId, - }, - body: JSON.stringify({ - systemPrompt, - messages: openAIMessageFormat.toApi(messages), - }), - signal, - }), - streamProtocol: openAIReadableStreamAdapter(), - }), + // fetchLLM sends each thread's stable client-generated id as `threadId` in the + // request body, which the route maps to an isolated, persistent pi + // AgentSession. The OpenUI system prompt is computed server-side in the route + // from the same `openuiLibrary` this page renders with. + const llm = useMemo( + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: openAIReadableStreamAdapter(), + messageFormat: openAIMessageFormat, + }), [], ); diff --git a/examples/harnesses/pi-agent-harness/src/lib/pi-session.ts b/examples/harnesses/pi-agent-harness/src/lib/pi-session.ts index a800e8ff8..6630df7b0 100644 --- a/examples/harnesses/pi-agent-harness/src/lib/pi-session.ts +++ b/examples/harnesses/pi-agent-harness/src/lib/pi-session.ts @@ -41,7 +41,7 @@ export interface PiSessionEntry { interface GetOrCreateOptions { /** Workspace the coding agent operates in. */ cwd: string; - /** OpenUI Lang system prompt (generated client-side from the component library). */ + /** OpenUI Lang system prompt (generated from the component library in the route). */ systemPrompt?: string; } From 0b43370865ece88f756464b21c741becc7677aaf Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Fri, 3 Jul 2026 00:53:22 +0530 Subject: [PATCH 4/8] feat(examples): fastapi-backend -> fetchLLM with generated server-side prompt Frontend: custom ChatLLM -> fetchLLM (openAIReadableStreamAdapter + openAIMessageFormat); the client no longer sends systemPrompt. Backend: body["systemPrompt"] hard-KeyError -> optional override; the default prompt is read from backend/app/system_prompt.txt, generated by the new frontend generate:prompt script (Node, imports genui-lib). The generated prompt file is committed so the Python backend runs without a Node step; regenerate when the library prompt changes (README updated). Verified: vite build, py_compile, generate:prompt end-to-end. Co-Authored-By: Claude Fable 5 --- examples/fastapi-backend/README.md | 34 ++- examples/fastapi-backend/backend/app/main.py | 12 +- .../backend/app/system_prompt.txt | 213 ++++++++++++++++++ .../fastapi-backend/frontend/package.json | 3 +- .../frontend/scripts/generate-prompt.mjs | 20 ++ examples/fastapi-backend/frontend/src/App.jsx | 30 +-- 6 files changed, 283 insertions(+), 29 deletions(-) create mode 100644 examples/fastapi-backend/backend/app/system_prompt.txt create mode 100644 examples/fastapi-backend/frontend/scripts/generate-prompt.mjs diff --git a/examples/fastapi-backend/README.md b/examples/fastapi-backend/README.md index e974990a3..1914c1b9c 100644 --- a/examples/fastapi-backend/README.md +++ b/examples/fastapi-backend/README.md @@ -27,14 +27,17 @@ fastapi-backend/ │ ├── .env.example # Environment template │ ├── pyproject.toml # Python dependencies │ └── app/ -│ └── main.py # Streaming chat endpoint +│ ├── main.py # Streaming chat endpoint +│ └── system_prompt.txt # Generated OpenUI system prompt (see below) └── frontend/ ├── package.json ├── vite.config.js # Vite + proxy to localhost:8000 ├── index.html + ├── scripts/ + │ └── generate-prompt.mjs # Writes backend/app/system_prompt.txt └── src/ ├── main.jsx - ├── App.jsx # Identical to genui-chat-app + ├── App.jsx # fetchLLM + AgentInterface └── index.css ``` @@ -60,7 +63,17 @@ Add your key to `backend/.env`: OPENAI_API_KEY=sk-... ``` -### 2. Start the backend +### 2. Generate the system prompt (first run only) + +The backend reads the OpenUI system prompt from `backend/app/system_prompt.txt` at startup. A generated copy is checked in, so this step is only needed if the file is missing or after upgrading `@openuidev/react-ui`: + +```bash +cd frontend +npm install +npm run generate:prompt +``` + +### 3. Start the backend ```bash cd backend @@ -76,7 +89,7 @@ uvicorn app.main:app --reload The API will be available at `http://localhost:8000`. -### 3. Start the frontend +### 4. Start the frontend ```bash cd frontend @@ -92,13 +105,18 @@ Open [http://localhost:5173](http://localhost:5173). A FastAPI endpoint that: -1. Receives `{ systemPrompt, messages }` as JSON -2. Forwards the conversation to the OpenAI streaming API -3. Yields each chunk as a NDJSON line — the same format the JavaScript SDK's `toReadableStream()` produces +1. Loads the OpenUI system prompt from `app/system_prompt.txt` at startup (fails fast with a pointer to `npm run generate:prompt` if the file is missing) +2. Receives `{ threadId, runId, messages, tools, context }` as JSON — the body `fetchLLM` sends; `systemPrompt` may optionally be included to override the server-side default +3. Forwards the conversation to the OpenAI streaming API +4. Yields each chunk as a NDJSON line — the same format the JavaScript SDK's `toReadableStream()` produces ### `frontend/src/App.jsx` -Identical to the one scaffolded by `npx @openuidev/cli create`. Uses `openAIReadableStreamAdapter()` to parse the NDJSON stream from the backend — no frontend changes were needed to switch from Next.js to FastAPI. +Wires `AgentInterface` to the backend with `fetchLLM({ url: "/api/chat", streamAdapter: openAIReadableStreamAdapter(), messageFormat: openAIMessageFormat })`. The system prompt is owned by the backend, so the client sends only the conversation — no frontend changes were needed to switch from Next.js to FastAPI. + +### `frontend/scripts/generate-prompt.mjs` + +A small Node script that imports `openuiLibrary` and `openuiPromptOptions` from `@openuidev/react-ui/genui-lib` and writes the generated prompt to `backend/app/system_prompt.txt`. Run it via `npm run generate:prompt` after upgrading `@openuidev/react-ui`. ## Learn More diff --git a/examples/fastapi-backend/backend/app/main.py b/examples/fastapi-backend/backend/app/main.py index 27bb9cc1c..45e235834 100644 --- a/examples/fastapi-backend/backend/app/main.py +++ b/examples/fastapi-backend/backend/app/main.py @@ -1,5 +1,6 @@ """Minimal FastAPI backend — streams OpenAI completions as NDJSON.""" import os +from pathlib import Path from dotenv import load_dotenv from fastapi import FastAPI @@ -12,15 +13,24 @@ client = AsyncOpenAI() MODEL = os.environ.get("OPENAI_MODEL", "gpt-5.5") +PROMPT_FILE = Path(__file__).parent / "system_prompt.txt" +if not PROMPT_FILE.is_file(): + raise RuntimeError( + f"Missing {PROMPT_FILE} — generate it by running `npm run generate:prompt` " + "in the frontend/ directory." + ) +DEFAULT_SYSTEM_PROMPT = PROMPT_FILE.read_text(encoding="utf-8") + app = FastAPI() app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]) @app.post("/api/chat") async def chat(body: dict): + system_prompt = body.get("systemPrompt") or DEFAULT_SYSTEM_PROMPT response = await client.chat.completions.create( model=MODEL, - messages=[{"role": "system", "content": body["systemPrompt"]}, *body["messages"]], + messages=[{"role": "system", "content": system_prompt}, *body["messages"]], stream=True, ) diff --git a/examples/fastapi-backend/backend/app/system_prompt.txt b/examples/fastapi-backend/backend/app/system_prompt.txt new file mode 100644 index 000000000..8ecb29283 --- /dev/null +++ b/examples/fastapi-backend/backend/app/system_prompt.txt @@ -0,0 +1,213 @@ +You are an AI assistant that responds using openui-lang, a declarative UI language. Your ENTIRE response must be valid openui-lang code — no markdown, no explanations, just openui-lang. + +## Syntax Rules + +1. Each statement is on its own line: `identifier = Expression` +2. `root` is the entry point — every program must define `root = Stack(...)` +3. Expressions are: strings ("..."), numbers, booleans (true/false), null, arrays ([...]), objects ({...}), or component calls TypeName(arg1, arg2, ...) +4. Use references for readability: define `name = ...` on one line, then use `name` later +5. EVERY variable (except root) MUST be referenced by at least one other variable. Unreferenced variables are silently dropped and will NOT render. Always include defined variables in their parent's children/items array. +6. Arguments are POSITIONAL (order matters, not names). Write `Stack([children], "row", "l")` NOT `Stack([children], direction: "row", gap: "l")` — colon syntax is NOT supported and silently breaks +7. Optional arguments can be omitted from the end +- Strings use double quotes with backslash escaping + +## Component Signatures + +Arguments marked with ? are optional. Sub-components can be inline or referenced; prefer references for better streaming. +Props typed `ActionExpression` accept an Action([@steps...]) expression. See the Action section for available steps (@ToAssistant, @OpenUrl). +Props marked `$binding` accept a `$variable` reference for two-way binding. + +### Layout +Stack(children: any[], direction?: "row" | "column", gap?: "none" | "xs" | "s" | "m" | "l" | "xl" | "2xl", align?: "start" | "center" | "end" | "stretch" | "baseline", justify?: "start" | "center" | "end" | "between" | "around" | "evenly", wrap?: boolean) — Flex container. direction: "row"|"column" (default "column"). gap: "none"|"xs"|"s"|"m"|"l"|"xl"|"2xl" (default "m"). align: "start"|"center"|"end"|"stretch"|"baseline". justify: "start"|"center"|"end"|"between"|"around"|"evenly". +Tabs(items: TabItem[]) — Tabbed container +TabItem(value: string, trigger: string, content: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | Steps)[]) — value is unique id, trigger is tab label, content is array of components +Accordion(items: AccordionItem[]) — Collapsible sections +AccordionItem(value: string, trigger: string, content: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | Steps)[]) — value is unique id, trigger is section title +Steps(items: StepsItem[]) — Step-by-step guide +StepsItem(title: string, details: string) — title and details text for one step +Carousel(children: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | Steps)[][], variant?: "card" | "sunk") — Horizontal scrollable carousel +Separator(orientation?: "horizontal" | "vertical", decorative?: boolean) — Visual divider between content sections +Modal(title: string, open?: $binding, children: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | Steps)[], size?: "sm" | "md" | "lg") — Modal dialog. open is a reactive $boolean binding — set to true to open, X/Escape/backdrop auto-closes. Put Form with buttons inside children. +- For grid-like layouts, use Stack with direction "row" and wrap set to true. +- Prefer justify "start" (or omit justify) with wrap=true for stable columns instead of uneven gutters. +- Use nested Stacks when you need explicit rows/sections. +- Show/hide sections: $editId != "" ? Card([editForm]) : null +- Modal: Modal("Title", $showModal, [content]) — $showModal is boolean, X/Escape auto-closes. Put Form with its own buttons inside children. +- Use Tabs for alternative views (chart types, data sections) — no $variable needed +- Shared filter across Tabs: same $days binding in Query args works across all TabItems + +### Content +Card(children: (TextContent | MarkDownRenderer | CardHeader | Callout | TextCallout | CodeBlock | Image | ImageBlock | ImageGallery | Separator | HorizontalBarChart | RadarChart | PieChart | RadialChart | SingleStackedBarChart | ScatterChart | AreaChart | BarChart | LineChart | Table | TagBlock | Form | Buttons | Steps | Tabs | Carousel | Stack)[], variant?: "card" | "sunk" | "clear", direction?: "row" | "column", gap?: "none" | "xs" | "s" | "m" | "l" | "xl" | "2xl", align?: "start" | "center" | "end" | "stretch" | "baseline", justify?: "start" | "center" | "end" | "between" | "around" | "evenly", wrap?: boolean) — Styled container. variant: "card" (default, elevated) | "sunk" (recessed) | "clear" (transparent). Always full width. Accepts all Stack flex params (default: direction "column"). Cards flex to share space in row/wrap layouts. +CardHeader(title?: string, subtitle?: string) — Header with optional title and subtitle +TextContent(text: string, size?: "small" | "default" | "large" | "small-heavy" | "large-heavy") — Text block. Supports markdown. Optional size: "small" | "default" | "large" | "small-heavy" | "large-heavy". +MarkDownRenderer(textMarkdown: string, variant?: "clear" | "card" | "sunk") — Renders markdown text with optional container variant +Callout(variant: "info" | "warning" | "error" | "success" | "neutral", title: string, description: string, visible?: $binding) — Callout banner. Optional visible is a reactive $boolean — auto-dismisses after 3s by setting $visible to false. +TextCallout(variant?: "neutral" | "info" | "warning" | "success" | "danger", title?: string, description?: string) — Text callout with variant, title, and description +Image(alt: string, src?: string) — Image with alt text and optional URL +ImageBlock(src: string, alt?: string) — Image block with loading state +ImageGallery(images: {src: string, alt?: string, details?: string}[]) — Gallery grid of images with modal preview +CodeBlock(language: string, codeString: string) — Syntax-highlighted code block +- Use Cards to group related KPIs or sections. Stack with direction "row" for side-by-side layouts. +- Success toast: Callout("success", "Saved", "Done.", $showSuccess) — use @Set($showSuccess, true) in save action, auto-dismisses after 3s. For errors: result.status == "error" ? Callout("error", "Failed", result.error) : null +- KPI card: Card([TextContent("Label", "small"), TextContent("" + @Count(@Filter(data.rows, "field", "==", "value")), "large-heavy")]) + +### Tables +Table(columns: Col[]) — Data table — column-oriented. Each Col holds its own data array. +Col(label: string, data: any, type?: "string" | "number" | "action") — Column definition — holds label + data array +- Table is COLUMN-oriented: Table([Col("Label", dataArray), Col("Count", countArray, "number")]). Use array pluck for data: data.rows.fieldName +- Col data can be component arrays for styled cells: Col("Status", @Each(data.rows, "item", Tag(item.status, null, "sm", item.status == "open" ? "success" : "danger"))) +- Row actions: Col("Actions", @Each(data.rows, "t", Button("Edit", Action([@Set($showEdit, true), @Set($editId, t.id)])))) +- Sortable: sorted = @Sort(data.rows, $sortField, "desc"). Bind $sortField to Select. Use sorted.fieldName for Col data +- Searchable: filtered = @Filter(data.rows, "title", "contains", $search). Bind $search to Input +- Chain sort + filter: filtered = @Filter(...) then sorted = @Sort(filtered, ...) — use sorted for both Table and Charts +- Empty state: @Count(data.rows) > 0 ? Table([...]) : TextContent("No data yet") + +### Charts (2D) +BarChart(labels: string[], series: Series[], variant?: "grouped" | "stacked", xLabel?: string, yLabel?: string) — Vertical bars; use for comparing values across categories with one or more series +LineChart(labels: string[], series: Series[], variant?: "linear" | "natural" | "step", xLabel?: string, yLabel?: string) — Lines over categories; use for trends and continuous data over time +AreaChart(labels: string[], series: Series[], variant?: "linear" | "natural" | "step", xLabel?: string, yLabel?: string) — Filled area under lines; use for cumulative totals or volume trends over time +RadarChart(labels: string[], series: Series[]) — Spider/web chart; use for comparing multiple variables across one or more entities +HorizontalBarChart(labels: string[], series: Series[], variant?: "grouped" | "stacked", xLabel?: string, yLabel?: string) — Horizontal bars; prefer when category labels are long or for ranked lists +Series(category: string, values: number[]) — One data series +- Charts accept column arrays: LineChart(labels, [Series("Name", values)]). Use array pluck: LineChart(data.rows.day, [Series("Views", data.rows.views)]) +- Use Cards to wrap charts with CardHeader for titled sections +- Chart + Table from same source: use @Sort or @Filter result for both LineChart and Table Col data +- Multiple chart views: use Tabs — Tabs([TabItem("line", "Line", [LineChart(...)]), TabItem("bar", "Bar", [BarChart(...)])]) + +### Charts (1D) +PieChart(labels: string[], values: number[], variant?: "pie" | "donut", appearance?: "circular" | "semiCircular") — Circular slices; use plucked arrays: PieChart(data.categories, data.values) +RadialChart(labels: string[], values: number[]) — Radial bars; use plucked arrays: RadialChart(data.categories, data.values) +SingleStackedBarChart(labels: string[], values: number[]) — Single horizontal stacked bar; use plucked arrays: SingleStackedBarChart(data.categories, data.values) +Slice(category: string, value: number) — One slice with label and numeric value +- PieChart and BarChart need NUMBERS, not objects. For list data, use @Count(@Filter(...)) to aggregate: +- PieChart from list: `PieChart(["Low", "Med", "High"], [@Count(@Filter(data.rows, "priority", "==", "low")), @Count(@Filter(data.rows, "priority", "==", "medium")), @Count(@Filter(data.rows, "priority", "==", "high"))], "donut")` +- KPI from count: `TextContent("" + @Count(@Filter(data.rows, "status", "==", "open")), "large-heavy")` + +### Charts (Scatter) +ScatterChart(datasets: ScatterSeries[], xLabel?: string, yLabel?: string) — X/Y scatter plot; use for correlations, distributions, and clustering +ScatterSeries(name: string, points: Point[]) — Named dataset +Point(x: number, y: number, z?: number) — Data point with numeric coordinates + +### Forms +Form(name: string, buttons: Buttons, fields?: FormControl[]) — Form container with fields and explicit action buttons +FormControl(label: string, input: Input | TextArea | Select | DatePicker | Slider | CheckBoxGroup | RadioGroup, hint?: string) — Field with label, input component, and optional hint text +Label(text: string) — Text label +Input(name: string, placeholder?: string, type?: "text" | "email" | "password" | "number" | "url", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding) +TextArea(name: string, placeholder?: string, rows?: number, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding) +Select(name: string, items: SelectItem[], placeholder?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding, size?: "small" | "medium" | "large") +SelectItem(value: string, label: string) — Option for Select +DatePicker(name: string, mode?: "single" | "range", rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding) +Slider(name: string, variant: "continuous" | "discrete", min: number, max: number, step?: number, defaultValue?: number[], label?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding) — Numeric slider input; supports continuous and discrete (stepped) variants +CheckBoxGroup(name: string, items: CheckBoxItem[], rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding>) +CheckBoxItem(label: string, description: string, name: string, defaultChecked?: boolean) +RadioGroup(name: string, items: RadioItem[], defaultValue?: string, rules?: {required?: boolean, email?: boolean, url?: boolean, numeric?: boolean, min?: number, max?: number, minLength?: number, maxLength?: number, pattern?: string}, value?: $binding) +RadioItem(label: string, description: string, value: string) +SwitchGroup(name: string, items: SwitchItem[], variant?: "clear" | "card" | "sunk", value?: $binding>) — Group of switch toggles +SwitchItem(label?: string, description?: string, name: string, defaultChecked?: boolean) — Individual switch toggle +- For Form fields, define EACH FormControl as its own reference — do NOT inline all controls in one array. This allows progressive field-by-field streaming. +- NEVER nest Form inside Form — each Form should be a standalone container. +- Form requires explicit buttons. Always pass a Buttons(...) reference as the third Form argument. +- rules is an optional object: {required: true, email: true, minLength: 8, maxLength: 100} +- Available rules: required, email, min, max, minLength, maxLength, pattern, url, numeric +- The renderer shows error messages automatically — do NOT generate error text in the UI +- Conditional fields: $country == "US" ? stateField : $country == "UK" ? postcodeField : addressField +- Edit form in Modal: Modal("Edit", $showEdit, [Form("edit", Buttons([saveBtn, cancelBtn]), [fields...])]). Save button should include @Set($showEdit, false) to close modal. + +### Buttons +Button(label: string, action?: ActionExpression, variant?: "primary" | "secondary" | "tertiary", type?: "normal" | "destructive", size?: "extra-small" | "small" | "medium" | "large") — Clickable button +Buttons(buttons: Button[], direction?: "row" | "column") — Group of Button components. direction: "row" (default) | "column". +- Toggle in @Each: @Each(rows, "t", Button(t.status == "open" ? "Close" : "Reopen", Action([...]))) + +### Data Display +TagBlock(tags: string[]) — tags is an array of strings +Tag(text: string, icon?: string, size?: "sm" | "md" | "lg", variant?: "neutral" | "info" | "success" | "warning" | "danger") — Styled tag/badge with optional icon and variant +- Color-mapped Tag: Tag(value, null, "sm", value == "high" ? "danger" : value == "medium" ? "warning" : "neutral") + +## Action — Button Behavior + +Action([@steps...]) wires button clicks to operations. Steps are @-prefixed built-in actions. Steps execute in order. +Buttons without an explicit Action prop automatically send their label to the assistant (equivalent to Action([@ToAssistant(label)])). + +Available steps: +- @ToAssistant("message") — Send a message to the assistant (for conversational buttons like "Tell me more", "Explain this") +- @OpenUrl("https://...") — Navigate to a URL + +Example — simple nav: +``` +viewBtn = Button("View", Action([@OpenUrl("https://example.com")])) +``` + +- Action can be assigned to a variable or inlined: Button("Go", onSubmit) and Button("Go", Action([...])) both work + +## Hoisting & Streaming (CRITICAL) + +openui-lang supports hoisting: a reference can be used BEFORE it is defined. The parser resolves all references after the full input is parsed. + +During streaming, the output is re-parsed on every chunk. Undefined references are temporarily unresolved and appear once their definitions stream in. This creates a progressive top-down reveal — structure first, then data fills in. + +**Recommended statement order for optimal streaming:** +1. `root = Stack(...)` — UI shell appears immediately +2. Component definitions — fill in as they stream +3. Data values — leaf content last + +Always write the root = Stack(...) statement first so the UI shell appears immediately, even before child data has streamed in. + +## Examples + +Example 1 — Table (column-oriented): + +root = Stack([title, tbl]) +title = TextContent("Top Languages", "large-heavy") +tbl = Table([Col("Language", langs), Col("Users (M)", users), Col("Year", years)]) +langs = ["Python", "JavaScript", "Java", "TypeScript", "Go"] +users = [15.7, 14.2, 12.1, 8.5, 5.2] +years = [1991, 1995, 1995, 2012, 2009] + +Example 2 — Bar chart: + +root = Stack([title, chart]) +title = TextContent("Q4 Revenue", "large-heavy") +chart = BarChart(labels, [s1, s2], "grouped") +labels = ["Oct", "Nov", "Dec"] +s1 = Series("Product A", [120, 150, 180]) +s2 = Series("Product B", [90, 110, 140]) + +Example 3 — Form with validation: + +root = Stack([title, form]) +title = TextContent("Contact Us", "large-heavy") +form = Form("contact", btns, [nameField, emailField, countryField, msgField]) +nameField = FormControl("Name", Input("name", "Your name", "text", { required: true, minLength: 2 })) +emailField = FormControl("Email", Input("email", "you@example.com", "email", { required: true, email: true })) +countryField = FormControl("Country", Select("country", countryOpts, "Select...", { required: true })) +msgField = FormControl("Message", TextArea("message", "Tell us more...", 4, { required: true, minLength: 10 })) +countryOpts = [SelectItem("us", "United States"), SelectItem("uk", "United Kingdom"), SelectItem("de", "Germany")] +btns = Buttons([Button("Submit", Action([@ToAssistant("Submit")]), "primary"), Button("Cancel", Action([@ToAssistant("Cancel")]), "secondary")]) + +Example 4 — Tabs with mixed content: + +root = Stack([title, tabs]) +title = TextContent("React vs Vue", "large-heavy") +tabs = Tabs([tabReact, tabVue]) +tabReact = TabItem("react", "React", reactContent) +tabVue = TabItem("vue", "Vue", vueContent) +reactContent = [TextContent("React is a library by Meta for building UIs."), Callout("info", "Note", "React uses JSX syntax.")] +vueContent = [TextContent("Vue is a progressive framework by Evan You."), Callout("success", "Tip", "Vue has a gentle learning curve.")] + +## Important Rules +- When asked about data, generate realistic/plausible data +- Choose components that best represent the content (tables for comparisons, charts for trends, forms for input, etc.) + +## Final Verification +Before finishing, walk your output and verify: +1. root = Stack(...) is the FIRST line (for optimal streaming). +2. Every referenced name is defined. Every defined name (other than root) is reachable from root. + +- For grid-like layouts, use Stack with direction "row" and wrap=true. Avoid justify="between" unless you specifically want large gutters. +- For forms, define one FormControl reference per field so controls can stream progressively. +- For forms, always provide the second Form argument with Buttons(...) actions: Form(name, buttons, fields). +- Never nest Form inside Form. +- Use @Reset($var1, $var2) after form submit to restore defaults — not @Set($var, "") +- Multi-query refresh: Action([@Run(mutation), @Run(query1), @Run(query2), @Reset(...)]) +- $variables are reactive: changing via Select or @Set re-evaluates all Queries and expressions referencing them +- Use existing components (Tabs, Accordion, Modal) before inventing ternary show/hide patterns \ No newline at end of file diff --git a/examples/fastapi-backend/frontend/package.json b/examples/fastapi-backend/frontend/package.json index 9160dfafd..ea84b83f3 100644 --- a/examples/fastapi-backend/frontend/package.json +++ b/examples/fastapi-backend/frontend/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "generate:prompt": "node scripts/generate-prompt.mjs" }, "dependencies": { "@openuidev/react-headless": "workspace:*", diff --git a/examples/fastapi-backend/frontend/scripts/generate-prompt.mjs b/examples/fastapi-backend/frontend/scripts/generate-prompt.mjs new file mode 100644 index 000000000..bc36f8159 --- /dev/null +++ b/examples/fastapi-backend/frontend/scripts/generate-prompt.mjs @@ -0,0 +1,20 @@ +// Writes the OpenUI system prompt to backend/app/system_prompt.txt so the +// FastAPI backend can prepend it server-side. Re-run after upgrading +// @openuidev/react-ui: +// +// npm run generate:prompt +import { mkdir, writeFile } from "node:fs/promises"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui/genui-lib"; + +const outFile = resolve( + dirname(fileURLToPath(import.meta.url)), + "../../backend/app/system_prompt.txt", +); + +const prompt = openuiLibrary.prompt(openuiPromptOptions); +await mkdir(dirname(outFile), { recursive: true }); +await writeFile(outFile, prompt, "utf8"); +console.log(`Wrote ${prompt.length} chars to ${outFile}`); diff --git a/examples/fastapi-backend/frontend/src/App.jsx b/examples/fastapi-backend/frontend/src/App.jsx index 6e0328280..965603125 100644 --- a/examples/fastapi-backend/frontend/src/App.jsx +++ b/examples/fastapi-backend/frontend/src/App.jsx @@ -3,32 +3,24 @@ import "@openuidev/react-ui/styles/index.css"; import { AgentInterface, + fetchLLM, openAIMessageFormat, openAIReadableStreamAdapter, } from "@openuidev/react-ui"; -import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui/genui-lib"; +import { openuiLibrary } from "@openuidev/react-ui/genui-lib"; import { useMemo } from "react"; -const systemPrompt = openuiLibrary.prompt(openuiPromptOptions); - export default function App() { - // Storage is AgentInterface's built-in in-memory default (wiped on reload). The - // backend call is unchanged — only the chat surface moved from FullScreen to - // AgentInterface. + // Storage is AgentInterface's built-in in-memory default (wiped on reload). + // The system prompt lives server-side: FastAPI reads backend/app/system_prompt.txt, + // regenerated with `npm run generate:prompt`. const llm = useMemo( - () => ({ - send: ({ messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - systemPrompt, - messages: openAIMessageFormat.toApi(messages), - }), - signal, - }), - streamProtocol: openAIReadableStreamAdapter(), - }), + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: openAIReadableStreamAdapter(), + messageFormat: openAIMessageFormat, + }), [], ); From e89b389372ce8777ed458975bc4e75819899a331 Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Fri, 3 Jul 2026 00:53:23 +0530 Subject: [PATCH 5/8] feat(examples): react-email -> workspace react-headless + AgentInterface llm Upgrade off the stale pinned @openuidev/react-headless 0.8.2 to workspace:* (matching sibling examples) and migrate ChatProvider off the removed flat processMessage/streamProtocol props to llm={fetchLLM({ url, streamAdapter: openAIAdapter(), messageFormat: openAIMessageFormat })}. Route unchanged (reads body.messages). Lockfile changes land separately in the final chore commit. Co-Authored-By: Claude Fable 5 --- examples/react-email/package.json | 6 ++--- examples/react-email/src/app/page.tsx | 39 ++++++++++++--------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/examples/react-email/package.json b/examples/react-email/package.json index b5d656cf9..9281e8e5d 100644 --- a/examples/react-email/package.json +++ b/examples/react-email/package.json @@ -11,9 +11,9 @@ }, "dependencies": { "@openuidev/cli": "workspace:*", - "@openuidev/react-email": "0.2.4", - "@openuidev/react-headless": "0.8.2", - "@openuidev/react-lang": "0.2.6", + "@openuidev/react-email": "workspace:*", + "@openuidev/react-headless": "workspace:*", + "@openuidev/react-lang": "workspace:*", "@react-email/components": "^0.0.41", "@react-email/render": "^1.0.6", "lucide-react": "^0.562.0", diff --git a/examples/react-email/src/app/page.tsx b/examples/react-email/src/app/page.tsx index baf037f3d..ffaa9552f 100644 --- a/examples/react-email/src/app/page.tsx +++ b/examples/react-email/src/app/page.tsx @@ -1,22 +1,17 @@ "use client"; -import { useCallback, useEffect, useRef, useState } from "react"; import { ChatProvider, + fetchLLM, openAIAdapter, openAIMessageFormat, useThread, } from "@openuidev/react-headless"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { ComposePage } from "@/components/composePage"; import { EmailEditor } from "@/components/emailEditor"; -import { - saveView, - loadView, - saveMessages, - loadMessages, - clearSession, -} from "@/components/session"; +import { clearSession, loadMessages, loadView, saveMessages, saveView } from "@/components/session"; // ── Main App (manages view state) ── @@ -51,7 +46,7 @@ function EmailApp() { saveView("chat"); processMessage({ role: "user", content: message }); }, - [processMessage] + [processMessage], ); const handleNewEmail = useCallback(() => { @@ -70,21 +65,21 @@ function EmailApp() { // ── Page Root ── export default function Page() { + // fetchLLM POSTs the run payload to /api/chat, sending messages in OpenAI + // format and parsing the OpenAI-style SSE response. + const llm = useMemo( + () => + fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, + }), + [], + ); + return (
- { - return fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - messages: openAIMessageFormat.toApi(messages), - }), - signal: abortController.signal, - }); - }} - streamProtocol={openAIAdapter()} - > +
From 75eb63542eb6533d0eef2d8870d6979793db5bb5 Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Fri, 3 Jul 2026 00:53:23 +0530 Subject: [PATCH 6/8] feat(cli): self-hosted template -> fetchLLM with build-time prompt generation The scaffold the quickstart points at taught the hand-written-ChatLLM anti-pattern. The template page now uses fetchLLM; the route serves the system prompt server-side (body.systemPrompt optional override), reading a file generated at build time by the new scripts/generate-prompt.mjs (direct genui-lib import in a route breaks next build under the react-server condition, so generation mirrors the committed-file pattern other examples use). Verified end-to-end: CLI built, template scaffolded into a scratch dir against published 0.12.1/0.9.1, tsc + eslint + next build all green. Co-Authored-By: Claude Fable 5 --- .../templates/openui-self-hosted/README.md | 6 +++-- .../templates/openui-self-hosted/package.json | 5 ++-- .../scripts/generate-prompt.mjs | 20 ++++++++++++++++ .../src/app/api/chat/route.ts | 11 ++++++++- .../openui-self-hosted/src/app/page.tsx | 24 ++++++------------- 5 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 packages/openui-cli/src/templates/openui-self-hosted/scripts/generate-prompt.mjs diff --git a/packages/openui-cli/src/templates/openui-self-hosted/README.md b/packages/openui-cli/src/templates/openui-self-hosted/README.md index 12f6d78af..512396765 100644 --- a/packages/openui-cli/src/templates/openui-self-hosted/README.md +++ b/packages/openui-cli/src/templates/openui-self-hosted/README.md @@ -16,8 +16,10 @@ bun dev Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -You can start editing the page by modifying `src/app/api/route.ts` and improving your agent -by adding system prompts or tools. +You can start editing the page by modifying `src/app/api/chat/route.ts` and improving your agent +by adding system prompts or tools. The OpenUI system prompt is generated into +`src/generated/system-prompt.txt` before every `dev` and `build` (or on demand with +`npm run generate:prompt`). ## Learn More diff --git a/packages/openui-cli/src/templates/openui-self-hosted/package.json b/packages/openui-cli/src/templates/openui-self-hosted/package.json index 71499dbd6..8892fad7d 100644 --- a/packages/openui-cli/src/templates/openui-self-hosted/package.json +++ b/packages/openui-cli/src/templates/openui-self-hosted/package.json @@ -3,8 +3,9 @@ "version": "0.1.1", "private": true, "scripts": { - "dev": "next dev", - "build": "next build", + "generate:prompt": "node scripts/generate-prompt.mjs", + "dev": "node scripts/generate-prompt.mjs && next dev", + "build": "node scripts/generate-prompt.mjs && next build", "start": "next start", "lint": "eslint" }, diff --git a/packages/openui-cli/src/templates/openui-self-hosted/scripts/generate-prompt.mjs b/packages/openui-cli/src/templates/openui-self-hosted/scripts/generate-prompt.mjs new file mode 100644 index 000000000..471426e74 --- /dev/null +++ b/packages/openui-cli/src/templates/openui-self-hosted/scripts/generate-prompt.mjs @@ -0,0 +1,20 @@ +// Writes the OpenUI system prompt to src/generated/system-prompt.txt so the +// /api/chat route can prepend it server-side. Runs automatically before +// `dev` and `build`; re-run by hand after customizing the component library: +// +// npm run generate:prompt +import { mkdir, writeFile } from "node:fs/promises"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui/genui-lib"; + +const outFile = resolve( + dirname(fileURLToPath(import.meta.url)), + "../src/generated/system-prompt.txt", +); + +const prompt = openuiLibrary.prompt(openuiPromptOptions); +await mkdir(dirname(outFile), { recursive: true }); +await writeFile(outFile, prompt, "utf8"); +console.log(`Wrote ${prompt.length} chars to ${outFile}`); diff --git a/packages/openui-cli/src/templates/openui-self-hosted/src/app/api/chat/route.ts b/packages/openui-cli/src/templates/openui-self-hosted/src/app/api/chat/route.ts index 7ee5e8b72..0dc098728 100644 --- a/packages/openui-cli/src/templates/openui-self-hosted/src/app/api/chat/route.ts +++ b/packages/openui-cli/src/templates/openui-self-hosted/src/app/api/chat/route.ts @@ -1,15 +1,24 @@ +import { readFileSync } from "fs"; import { NextRequest } from "next/server"; import OpenAI from "openai"; +import { join } from "path"; const client = new OpenAI(); +// Generated from the OpenUI component library by scripts/generate-prompt.mjs +// (runs before `dev` and `build`); body.systemPrompt (optional) overrides it. +const defaultSystemPrompt = readFileSync( + join(process.cwd(), "src/generated/system-prompt.txt"), + "utf-8", +); + export async function POST(req: NextRequest) { try { const { messages, systemPrompt } = await req.json(); const response = await client.chat.completions.create({ model: "gpt-5.2", - messages: [{ role: "system", content: systemPrompt }, ...messages], + messages: [{ role: "system", content: systemPrompt ?? defaultSystemPrompt }, ...messages], stream: true, }); diff --git a/packages/openui-cli/src/templates/openui-self-hosted/src/app/page.tsx b/packages/openui-cli/src/templates/openui-self-hosted/src/app/page.tsx index 20e22906c..97534b24c 100644 --- a/packages/openui-cli/src/templates/openui-self-hosted/src/app/page.tsx +++ b/packages/openui-cli/src/templates/openui-self-hosted/src/app/page.tsx @@ -3,28 +3,18 @@ import "@openuidev/react-ui/components.css"; import "@openuidev/react-ui/styles/index.css"; import { + fetchLLM, openAIMessageFormat, openAIReadableStreamAdapter, - type ChatLLM, } from "@openuidev/react-headless"; import { AgentInterface } from "@openuidev/react-ui"; -import { openuiLibrary, openuiPromptOptions } from "@openuidev/react-ui/genui-lib"; +import { openuiLibrary } from "@openuidev/react-ui/genui-lib"; -const systemPrompt = openuiLibrary.prompt(openuiPromptOptions); - -const llm: ChatLLM = { - send: async ({ messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - systemPrompt, - messages: openAIMessageFormat.toApi(messages), - }), - signal, - }), - streamProtocol: openAIReadableStreamAdapter(), -}; +const llm = fetchLLM({ + url: "/api/chat", + streamAdapter: openAIReadableStreamAdapter(), + messageFormat: openAIMessageFormat, +}); export default function Home() { return ( From 6113ba764baa3078eb40c223d80bad616cdc865a Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Fri, 3 Jul 2026 00:53:39 +0530 Subject: [PATCH 7/8] docs: teach fetchLLM-first across all agent-facing docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docs/public/AGENTS.md: Cloud quickstart rewritten fetchLLM-first (with a slice(-1) messageFormat wrapper and a route snippet consistent with the RunAgentInput body); custom-ChatLLM guidance rescoped to genuinely non-HTTP cases (vercel-eve); fetchLLM POST body contract corrected to { threadId, runId, messages, tools: [], context: [] }. - packages/react-headless/AGENTS.md: full refresh off the removed threadApiUrl/apiUrl/processMessage props era — current {llm, storage} contract, regenerated file map (src/adapters, src/stream/formats, src/hooks), updated recipes and test-suite list. - packages/react-headless/README.md: fetchLLM-first quickstart; fixed bare un-called adapter usages. - packages/react-ui/README.md: quickstart on fetchLLM; CSS import standardized on components.css (styles/index.css is a byte-identical alias). - docs llms.txt route: /AGENTS.md now advertised first in the index. - CONTRIBUTING.md: routes coding agents to the AGENTS.md system. - vercel-eve AGENTS.md: marks its hand-written ChatLLM as the intentional exception (client-side stream synthesis, no HTTP endpoint). Co-Authored-By: Claude Fable 5 --- CONTRIBUTING.md | 2 + docs/app/llms.txt/route.ts | 3 + docs/public/AGENTS.md | 58 ++++----- examples/harnesses/vercel-eve/AGENTS.md | 4 + packages/react-headless/AGENTS.md | 148 ++++++++++++++++------- packages/react-headless/README.md | 154 ++++++++++++++++-------- packages/react-ui/README.md | 56 +++++---- 7 files changed, 273 insertions(+), 152 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f2847b057..1f22b5fa5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,6 +50,8 @@ pnpm --filter @openuidev/react-lang build Use the package name that matches the area you are changing. +If you are a coding agent (or working with one), read the `AGENTS.md` in the package you are changing before editing, for example `packages/react-headless/AGENTS.md`. For building apps on the Agent Interface SDK, the self-contained consumer guide is `docs/public/AGENTS.md`, served at `/AGENTS.md` on the docs site. + ## Before Opening a Pull Request Before opening a pull request, please make sure that: diff --git a/docs/app/llms.txt/route.ts b/docs/app/llms.txt/route.ts index cc98a1c3a..2e29fed1d 100644 --- a/docs/app/llms.txt/route.ts +++ b/docs/app/llms.txt/route.ts @@ -6,6 +6,9 @@ export async function GET() { const lines: string[] = []; lines.push("# Documentation"); lines.push(""); + lines.push( + "- [AGENTS.md — complete agent guide for the Agent Interface SDK](/AGENTS.md): self-contained instructions for coding agents", + ); for (const page of source.getPages()) { lines.push(`- [${page.data.title}](${page.url}): ${page.data.description}`); } diff --git a/docs/public/AGENTS.md b/docs/public/AGENTS.md index 0ac348586..29ec0eab1 100644 --- a/docs/public/AGENTS.md +++ b/docs/public/AGENTS.md @@ -20,12 +20,13 @@ Everything imports from `@openuidev/react-ui`. Read the Rules first. `openAIReadableStreamAdapter()` with `openAIMessageFormat`; `agUIAdapter()` with `identityMessageFormat` (the default); `langGraphAdapter()` with `langGraphMessageFormat`. -- **OpenUI Cloud is two planes.** `llm` is a `ChatLLM` whose `send` posts to your - own `/api/chat` route, which proxies to Cloud with `THESYS_API_KEY`. `storage` +- **OpenUI Cloud is two planes.** `llm` is `fetchLLM({ url: "/api/chat", ... })`, + and your own `/api/chat` route proxies to Cloud with `THESYS_API_KEY`. `storage` is `useOpenuiCloudStorage({ token: "/api/frontend-token" })`. `THESYS_API_KEY` is server-side only, never in the browser. - **On Cloud, send only the latest message.** The Responses API replays history - from the conversation: `input: openAIConversationMessageFormat.toApi(messages.slice(-1))`. + from the conversation, so wrap the message format: + `toApi: (msgs) => openAIConversationMessageFormat.toApi(msgs.slice(-1))`. - **For Cloud, the component set, storage hook, and artifacts come from `@openuidev/thesys`** (`chatLibrary`, `useOpenuiCloudStorage`, `artifactRenderers`, `artifactCategories`); the server route uses @@ -66,9 +67,9 @@ import "@openuidev/thesys/styles.css"; import { AgentInterface, + fetchLLM, openAIConversationMessageFormat, openAIResponsesAdapter, - type ChatLLM, } from "@openuidev/react-ui"; import { chatLibrary, @@ -77,20 +78,15 @@ import { artifactCategories, } from "@openuidev/thesys"; -const llm: ChatLLM = { - // Cloud replays history from the conversation, so send only the latest message. - send: ({ threadId, messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - threadId, - input: openAIConversationMessageFormat.toApi(messages.slice(-1)), - }), - signal, - }), - streamProtocol: openAIResponsesAdapter(), -}; +const llm = fetchLLM({ + url: "/api/chat", + streamAdapter: openAIResponsesAdapter(), + // Cloud replays history from the conversation, so this wrapper sends only the latest message. + messageFormat: { + toApi: (msgs) => openAIConversationMessageFormat.toApi(msgs.slice(-1)), + fromApi: openAIConversationMessageFormat.fromApi, + }, +}); export default function App() { const storage = useOpenuiCloudStorage({ @@ -116,7 +112,9 @@ export default function App() { import { artifactTool, createResponsesInstructions } from "@openuidev/thesys-server"; export async function POST(req: Request) { - const { threadId, input } = await req.json(); + // fetchLLM POSTs { threadId, runId, messages, tools, context }; here messages + // is the latest message only (the client's messageFormat slices). + const { threadId, messages } = await req.json(); const upstream = await fetch("https://api.thesys.dev/v1/embed/responses", { method: "POST", headers: { @@ -126,7 +124,7 @@ export async function POST(req: Request) { body: JSON.stringify({ model: "openai/gpt-5", conversation: threadId, // Cloud stores and replays the conversation - input, + input: messages, stream: true, store: true, tools: [artifactTool()], // managed slides/report tool @@ -211,12 +209,14 @@ export async function POST(req: Request) { } ``` -`fetchLLM` POSTs `{ threadId, messages: messageFormat.toApi(messages) }` to `url` -and forwards the abort signal. Here `messages` is the **full thread history** (the -SDK loads it from `storage` and holds it client-side), so forward all of it to your -provider. (Contrast Cloud, where you send only the latest because Cloud replays the -conversation.) Your route must **stream** and **close the stream when done** (the -client's `isRunning` flips back to `false` only on close). +`fetchLLM` POSTs an AG-UI `RunAgentInput`-shaped body to `url` — `{ threadId, +runId, messages: messageFormat.toApi(messages), tools: [], context: [] }`, with a +fresh `runId` per send — and forwards the abort signal. Routes may destructure +just `{ messages }`. Here `messages` is the **full thread history** (the SDK loads +it from `storage` and holds it client-side), so forward all of it to your +provider. (Contrast Cloud, where the wrapped message format sends only the latest +because Cloud replays the conversation.) Your route must **stream** and **close +the stream when done** (the client's `isRunning` flips back to `false` only on close). ## `` props @@ -241,8 +241,10 @@ Children are slot overrides (see Customization). ## Backends: `ChatLLM` and adapters -The `llm` is a `ChatLLM`. `fetchLLM` builds one for the common case; for full -control, write the object directly (this is what the Cloud quickstart does). +The `llm` is a `ChatLLM`. `fetchLLM` builds one for anything that POSTs to an +HTTP endpoint and streams the response back (both quickstarts use it). Write the +object directly only for genuinely custom cases — e.g. synthesizing the stream +client-side when there is no HTTP endpoint at all. ```ts interface ChatLLM { diff --git a/examples/harnesses/vercel-eve/AGENTS.md b/examples/harnesses/vercel-eve/AGENTS.md index ef84069db..e2cdf6fcd 100644 --- a/examples/harnesses/vercel-eve/AGENTS.md +++ b/examples/harnesses/vercel-eve/AGENTS.md @@ -1,3 +1,7 @@ # eve Agent App This project uses the eve framework. Before writing code, always read the relevant guide in `node_modules/eve/docs/`. + +## OpenUI chat wiring + +The hand-written `ChatLLM` in `src/eve-chat.ts` is an intentional exception to the repo's fetchLLM-first convention: there is no HTTP chat endpoint here. Its `send` drives Eve's native session protocol (`POST /eve/v1/session`, resumable NDJSON event stream) and synthesizes the AG-UI SSE stream client-side from Eve session events, so `fetchLLM` does not apply — do not migrate it. Normal HTTP chat backends should use `fetchLLM` from `@openuidev/react-ui` instead of hand-writing a `ChatLLM`. diff --git a/packages/react-headless/AGENTS.md b/packages/react-headless/AGENTS.md index dcdb9d58a..721424db1 100644 --- a/packages/react-headless/AGENTS.md +++ b/packages/react-headless/AGENTS.md @@ -4,70 +4,115 @@ ```bash # From monorepo root: -pnpm --filter @openuidev/react-headless run build # tsc → dist/ -pnpm --filter @openuidev/react-headless run test # vitest -pnpm --filter @openuidev/react-headless run ci # lint:check + format:check +pnpm --filter @openuidev/react-headless run build # tsdown → dist/ +pnpm --filter @openuidev/react-headless run test # vitest run +pnpm --filter @openuidev/react-headless run typecheck # tsc --noEmit +pnpm --filter @openuidev/react-headless run ci # lint:check + format:check # Or from this directory: pnpm build && pnpm test ``` -Build order: **`react-headless`** → `react-lang` → `react-ui`. This package has no upstream workspace deps (only `@ag-ui/core` from npm), so it can always build independently. +This package has no upstream workspace deps (runtime dep is only `@ag-ui/core`; `react` and `zustand` are peers), so it can always build independently. `react-ui` depends on it (`workspace:^`) — rebuild this package before verifying changes through `react-ui`. ## File Map -| Path | Purpose | -| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -| `src/index.ts` | Public API surface — every export consumers see. Check here first when adding/removing exports. | -| `src/store/createChatStore.ts` | Zustand store factory. All state + actions live here. This is the most critical file. | -| `src/store/ChatProvider.tsx` | React provider — thin wrapper that creates the store once via `useState`. | -| `src/store/ChatContext.ts` | React context + `useChatStore()` internal hook. | -| `src/store/hooks.ts` | `useThread()` / `useThreadList()` — selector hooks over the store. | -| `src/store/types.ts` | All store types: `ChatStore`, `ChatProviderProps`, `Thread`, state/action slices. | -| `src/store/__tests__/createChatStore.test.ts` | Comprehensive test suite for the store (thread CRUD, message CRUD, streaming, cancellation, URL-based defaults, messageFormat round-trips). | -| `src/stream/processStreamedMessage.ts` | Consumes `AsyncIterable` and drives message create/update/delete callbacks. | -| `src/stream/adapters/ag-ui.ts` | Default SSE adapter — parses `data: {json}\n` lines. | -| `src/stream/adapters/openai-completions.ts` | Adapter for OpenAI Chat Completions streaming (`ChatCompletionChunk`). | -| `src/stream/adapters/openai-responses.ts` | Adapter for OpenAI Responses API streaming (`ResponseStreamEvent`). | -| `src/stream/adapters/openai-readable-stream.ts` | Adapter for OpenAI SDK's `Stream.toReadableStream()` — parses NDJSON (no SSE prefix) `ChatCompletionChunk` objects. | -| `src/stream/adapters/openai-message-format.ts` | `MessageFormat` for OpenAI Completions (`ChatCompletionMessageParam[]` ↔ AG-UI). | -| `src/stream/adapters/openai-conversation-message-format.ts` | `MessageFormat` for OpenAI Responses/Conversations API (`ResponseInputItem[]` ↔ AG-UI). | -| `src/types/` | Shared types: `message.ts` (re-exports from `@ag-ui/core`), `messageFormat.ts`, `stream.ts`. | -| `src/hooks/useMessage.tsx` | `MessageContext` / `MessageProvider` / `useMessage` — per-message React context used by `react-ui`. | +| Path | Purpose | +| ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `src/index.ts` | Public API surface — every export consumers see. Check here first when adding/removing exports. | +| **Adapters — `src/adapters/`** | | +| `src/adapters/types.ts` | Adapter contracts: `ChatLLM`, `ChatStorage`, `ThreadStorage`, `ArtifactStorage`, plus `Artifact`/`ArtifactSummary`/`ArtifactCategory` types. | +| `src/adapters/fetchLLM.ts` | `fetchLLM({ url, streamAdapter, messageFormat?, headers?, fetch? })` → `ChatLLM`. POSTs an AG-UI `RunAgentInput`-shaped body to `url`. | +| `src/adapters/restStorage.ts` | `restStorage({ baseUrl, messageFormat?, headers?, fetch? })` → `ChatStorage` (thread channel only). REST conventions of the old `threadApiUrl`. | +| `src/adapters/_defaultStorage.ts` | In-memory `ChatStorage` used when `` gets no `storage`. Intentionally NOT exported. | +| **Chat store — `src/store/`** | | +| `src/store/createChatStore.ts` | Zustand store factory — thread-list + thread slices, `processMessage()` send path. This is the most critical file. | +| `src/store/ChatProvider.tsx` | React provider — creates the stores/registries once via lazy `useState` and nests six contexts. | +| `src/store/ChatContext.ts` | React context + `useChatStore()` internal hook. | +| `src/store/types.ts` | `ChatStore`, `ChatProviderProps`, `Thread`, `CreateMessage`, state/action slices. | +| `src/store/toolActivity.ts` | `pairToolActivity` / `partialJSONParse` — pairs tool calls with results into `ToolActivity[]` (status: streaming/executing/success/error). | +| **Artifact + detailed-view stores — `src/store/`** | | +| `src/store/createDetailedViewStore.ts` (+ `detailedViewTypes.ts`) | Detailed-view store — one active view id globally, portal target element. | +| `src/store/createThreadContextStore.ts` (+ `threadContextTypes.ts`) | Per-thread artifact registry (`ArtifactEntry` by id/version). Reset when the selected thread changes. | +| `src/store/ArtifactRenderersContext.ts` (+ `artifactRendererTypes.ts`) | Renderer registry — `defineArtifactRenderer`, lookup by `toolName` (live tool calls) or `type` (stored artifacts). | +| `src/store/ArtifactStorageContext.ts` | Context exposing `storage.artifact ?? null`. | +| `src/store/ArtifactCategoriesContext.ts` (+ `artifactCategories.ts`) | Categories context + `defineArtifactCategories` helper. | +| **Streaming — `src/stream/`** | | +| `src/stream/processStreamedMessage.ts` | Consumes `AsyncIterable` and drives message create/update callbacks (rAF-debounced) + tool-executing callbacks. | +| `src/stream/adapters/ag-ui.ts` | `agUIAdapter()` — AG-UI SSE (`data: {AGUIEvent}` lines). The default adapter in `processStreamedMessage`. | +| `src/stream/adapters/openai-completions.ts` | `openAIAdapter()` — OpenAI Chat Completions SSE (`ChatCompletionChunk`). | +| `src/stream/adapters/openai-responses.ts` | `openAIResponsesAdapter()` — OpenAI Responses API SSE (`ResponseStreamEvent`). | +| `src/stream/adapters/openai-readable-stream.ts` | `openAIReadableStreamAdapter()` — NDJSON from the OpenAI SDK's `Stream.toReadableStream()` (no SSE prefix). | +| `src/stream/adapters/langgraph.ts` | `langGraphAdapter(options?)` — LangGraph named-SSE events (`messages`/`updates`/`error`/`end`), incl. `onInterrupt` callback. | +| `src/stream/adapters/_shared/sseLines.ts` | `sseLineIterator` (`@internal`) — cross-chunk SSE line buffering shared by the `data:`-line adapters. | +| `src/stream/formats/openai-message-format.ts` | `openAIMessageFormat` — `ChatCompletionMessageParam[]` ↔ AG-UI. | +| `src/stream/formats/openai-conversation-message-format.ts` | `openAIConversationMessageFormat` — Responses/Conversations API items ↔ AG-UI. | +| `src/stream/formats/langgraph-message-format.ts` | `langGraphMessageFormat` — LangChain-style messages ↔ AG-UI. | +| **Hooks — `src/hooks/`** | | +| `src/hooks/useThread.ts` | `useThread()` / `useThreadList()` — selector hooks over the chat store (`threadSelector` / `threadListSelector` live here). | +| `src/hooks/useMessage.tsx` | `MessageContext` / `MessageProvider` / `useMessage` — per-message React context used by `react-ui`. | +| `src/hooks/useToolActivities.ts` | Memoized `pairToolActivity` → `ToolActivity[]` for a message. | +| `src/hooks/useDetailedView.ts` / `useActiveDetailedView.ts` / `useDetailedViewPortalTarget.ts` | Detailed-view open/close controls, global "any view open?", portal target. | +| `src/hooks/useArtifactList.ts` / `useArtifactRenderer.ts` | Active thread's artifacts grouped by id; renderer-registry lookup by tool name. | +| **Shared types — `src/types/`** | `message.ts` (re-exports from `@ag-ui/core`), `messageFormat.ts` (`MessageFormat` + `identityMessageFormat`), `stream.ts` (`StreamProtocolAdapter`, `AGUIEvent`/`EventType` re-exports). | ## Key Patterns +### ChatProviderProps + +```ts +interface ChatProviderProps { + llm: ChatLLM; // required — drives message sending and stream parsing + storage?: ChatStorage; // default: internal in-memory storage (no persistence) + artifactRenderers?: ReadonlyArray>; // captured at mount + artifactCategories?: ArtifactCategory[]; + children: React.ReactNode; +} +``` + +Typical wiring uses the built-in adapter factories: + +```tsx + +``` + +- `fetchLLM(...).send` POSTs `{ threadId, runId: crypto.randomUUID(), messages: messageFormat.toApi(messages), tools: [], context: [] }` and forwards the store's abort `signal`. `messageFormat` defaults to `identityMessageFormat`. +- `restStorage` reproduces the REST conventions of the removed `threadApiUrl` prop (`GET {base}/get`, `POST {base}/create`, `GET {base}/get/:id`, `PATCH {base}/update/:id`, `DELETE {base}/delete/:id`). Thread channel only — it provides no `storage.artifact`. +- **Stream adapters are factories** — pass `openAIAdapter()`, never the bare `openAIAdapter` function. + +### How streaming works + +`processMessage()` in the store → append optimistic `UserMessage` (and lazily `createThread` via storage when no thread is selected) → `llm.send({ threadId, messages, signal })` → a non-ok `Response` throws → `processStreamedMessage({ response, adapter: llm.streamProtocol, ... })` → `adapter.parse(response)` yields `AGUIEvent`s → one optimistic `AssistantMessage` accumulates text deltas and tool calls (`createMessage` on first event, rAF-debounced `updateMessage` after), `TOOL_CALL_RESULT` events upsert `ToolMessage`s by `toolCallId`, and `TOOL_CALL_END`/`TOOL_CALL_RESULT` drive the `executingToolCallIds` set. Errors become `threadError` unless the run was aborted (`cancelMessage()`). + ### Adding a new store action 1. Add the type to the appropriate slice in `src/store/types.ts` (`ThreadActions` or `ThreadListActions`). 2. Implement it in `createChatStore.ts` inside the `createStore(...)` call. -3. Add it to the selector in `src/store/hooks.ts` (`threadSelector` or `threadListSelector`). -4. Add tests in `src/store/__tests__/createChatStore.test.ts`. +3. Add it to the selector in `src/hooks/useThread.ts` (`threadSelector` or `threadListSelector`). +4. Add tests in `src/store/__tests__/createChatStore.test.ts` (use the `makeStore` helper). 5. If it should be public, export the type from `src/index.ts`. ### Adding a new stream adapter -1. Create `src/stream/adapters/my-adapter.ts` implementing `StreamProtocolAdapter` (must have `async *parse(response): AsyncIterable`). -2. Export it from `src/stream/adapters/index.ts`. -3. Export it from `src/index.ts`. +1. Create `src/stream/adapters/my-adapter.ts` exporting a **factory** `(options?) => StreamProtocolAdapter` (i.e. returns `{ async *parse(response): AsyncIterable }`). +2. For `data:`-line SSE input, use `sseLineIterator` from `src/stream/adapters/_shared/sseLines.ts` so events split across network chunks are not dropped. +3. `src/stream/adapters/index.ts` re-exports with `export *`, so exporting from your file is enough there; also add the named export to `src/index.ts`. +4. Add tests in `src/stream/adapters/__tests__/`. ### Adding a new message format -1. Create a file in `src/stream/adapters/` implementing the `MessageFormat` interface (`toApi` + `fromApi`). -2. Export it from `src/stream/adapters/index.ts` and `src/index.ts`. - -### ChatProviderProps config pattern - -`ChatProviderProps` uses a **discriminated union** so TypeScript enforces "URL string OR custom functions, not both": +1. Create a file in `src/stream/formats/` implementing the `MessageFormat` interface (`toApi` + `fromApi`, both array-to-array). +2. `src/stream/formats/index.ts` re-exports with `export *`; also add the named export to `src/index.ts`. +3. Message formats are consumed by both `fetchLLM` (outbound send) and `restStorage` (`createThread` outbound, `getMessages` inbound). -- `ThreadApiConfig`: provide `threadApiUrl` string **or** individual functions (`fetchThreadList`, `createThread`, etc.) -- `ChatApiConfig`: provide `apiUrl` string **or** a `processMessage` function - -When `threadApiUrl` is given, `createChatStore` generates default REST implementations (`/get`, `/create`, `/delete/:id`, `/update/:id`, `/get/:id`). - -### How streaming works +### Adding a new LLM or storage adapter -`processMessage()` in the store → `fetch(apiUrl)` → `StreamProtocolAdapter.parse(response)` → yields `AGUIEvent`s → `processStreamedMessage()` accumulates text deltas and tool calls into an `AssistantMessage`, calling `createMessage` on first event and `updateMessage` on subsequent events. +1. Create it in `src/adapters/`, returning a `ChatLLM` or `ChatStorage` (contracts in `src/adapters/types.ts`). +2. Export it (value + options type) from `src/adapters/index.ts` — explicit exports here, not `export *` — and from `src/index.ts`. +3. Add tests in `src/adapters/__tests__/`. ### OpenAI adapter types @@ -75,7 +120,24 @@ The `openai` package is a **devDependency** only (for type imports). It is not b ## Testing -Tests use Vitest and mock `fetch` via `vi.stubGlobal`. Streaming tests create `ReadableStream` instances with hand-crafted SSE payloads. Use `flushPromises()` (a `setTimeout(0)` wrapper) to await async store updates. +Tests use Vitest with no jsdom. Conventions: + +- **Store tests inject mocks — no global `fetch` stubbing.** `src/store/__tests__/__helpers/makeStore.ts` builds a chat store with a `vi.fn()`-mocked `ChatStorage` + `ChatLLM`; override any storage method or `send`/`streamProtocol` per test. +- **Stream-pipeline tests** build adapters from in-memory `AGUIEvent` arrays and stub `requestAnimationFrame` (the debouncer needs it). **Protocol-adapter tests** wrap hand-crafted SSE payloads in `new Response(new ReadableStream(...))`. +- **`restStorage` tests** pass a `vi.fn()` through the factory's `fetch` option. +- Await async store updates with `flushPromises()` (a `setTimeout(0)` wrapper defined per suite). + +| Suite | Covers | +| ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `src/store/__tests__/createChatStore.test.ts` | Thread CRUD, message CRUD, `processMessage` streaming, cancellation, select-while-streaming | +| `src/store/__tests__/toolActivity.test.ts` | `pairToolActivity` statuses, partial-JSON args parsing | +| `src/store/__tests__/artifactRendererRegistry.test.ts` | Renderer registry build/lookup, duplicate handling | +| `src/store/__tests__/createDetailedViewStore.test.ts` + `detailedViewThreadSwitch.test.ts` | Detailed-view store; reset on thread switch | +| `src/store/__tests__/createThreadContextStore.test.ts` + `threadContextSwitch.test.ts` | Per-thread artifact registry; reset on thread switch | +| `src/stream/__tests__/processStreamedMessage.test.ts` + `processStreamedMessageToolStatus.test.ts` | Event loop, `TOOL_CALL_RESULT` upserts, executing-status callbacks | +| `src/stream/adapters/__tests__/langgraph.test.ts` | LangGraph SSE → `AGUIEvent` mapping | +| `src/stream/adapters/__tests__/sseLines.test.ts` | Cross-chunk SSE line buffering | +| `src/adapters/__tests__/restStorage.test.ts` | REST endpoint conventions, `messageFormat`/header handling, error propagation | ```bash pnpm test # run all tests @@ -88,4 +150,6 @@ pnpm vitest run --reporter verbose # verbose output - **Store shape** — `ChatStore` is a flat Zustand store. Do not nest slices into sub-objects; hooks rely on the flat structure. - **`identityMessageFormat`** — this is the default no-op format. It must remain `{ toApi: (m) => m, fromApi: (d) => d as Message[] }`. - **`_abortController` / `_nextCursor`** — these are internal fields prefixed with `_`. Do not expose them in hooks or types. -- **`ChatProvider` store creation** — the store is created once via `useState(() => createChatStore(config))`. It intentionally does not react to config changes after mount. +- **`ChatProvider` mount-once creation** — the chat store, detailed-view store, thread-context store, renderer registry, and resolved storage are all created once via lazy `useState` initializers. Swapping `llm`/`storage`/`artifactRenderers` props after mount is intentionally ignored (dev-only warning for `artifactRenderers`). +- **`_defaultStorage` stays unexported** — it is internal to `ChatProvider` (see the comment in `src/adapters/index.ts`). +- **Adapter factories** — stream adapters (`agUIAdapter()`, etc.) are factory functions, not bare objects. Keep the factory signature; consumers already call them. diff --git a/packages/react-headless/README.md b/packages/react-headless/README.md index 61b172c8a..edd724806 100644 --- a/packages/react-headless/README.md +++ b/packages/react-headless/README.md @@ -1,12 +1,12 @@ # @openuidev/react-headless -Headless React state and streaming primitives for OpenUI chat experiences. Bring your own UI; this package handles threads, messages, adapters, and message format conversion. +Headless React state and streaming primitives for OpenUI chat experiences. Bring your own UI; this package handles threads, messages, LLM/storage adapters, and message format conversion. [![npm version](https://img.shields.io/npm/v/@openuidev/react-headless)](https://www.npmjs.com/package/@openuidev/react-headless) [![monthly downloads](https://img.shields.io/npm/dm/@openuidev/react-headless)](https://www.npmjs.com/package/@openuidev/react-headless) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/thesysdev/openui/blob/main/LICENSE) -**Links:** [Package docs](https://openui.com/docs/api-reference/react-headless) | [Chat docs](https://openui.com/docs/chat) | [GitHub repo](https://github.com/thesysdev/openui) +**Links:** [Package docs](https://openui.com/docs/api-reference/react-headless) | [Agent Interface docs](https://openui.com/docs/agent/getting-started/introduction) | [GitHub repo](https://github.com/thesysdev/openui) ## Install @@ -16,65 +16,99 @@ npm install @openuidev/react-headless pnpm add @openuidev/react-headless ``` -**Peer dependencies:** `react >=19.0.0`, `react-dom >=19.0.0`, `zustand ^4.5.5` +**Peer dependencies:** `react ^18.3.1 || ^19.0.0`, `zustand ^4.5.5` ## Overview Use `@openuidev/react-headless` when you want OpenUI's chat behavior without OpenUI's visual components: -- **`ChatProvider`** manages threads, messages, and streaming state through a Zustand store. +- **`ChatProvider`** manages threads, messages, and streaming state through a Zustand store. It is configured with two adapters: a required **`llm`** (how messages are sent and streamed back) and an optional **`storage`** (where threads persist). +- **`fetchLLM`** builds a `ChatLLM` for any HTTP endpoint that returns a streaming response; **`restStorage`** builds a `ChatStorage` over a REST thread API. - **Selector hooks** expose thread and thread-list state without coupling you to a layout. -- **Streaming adapters** parse SSE or SDK responses from OpenAI, AG-UI, or custom backends. -- **Message formats** convert between your API shape and OpenUI's internal AG-UI shape. +- **Streaming adapters** parse SSE or SDK responses from AG-UI, OpenAI, LangGraph, or custom backends. +- **Message formats** convert between your API's wire shape and OpenUI's internal AG-UI shape. ## Quick Start -### URL-based setup +`fetchLLM` is the standard transport. Point it at your streaming endpoint, pick a stream adapter that matches what the endpoint emits, and pass the resulting `ChatLLM` to `ChatProvider`: -The simplest configuration points to your API and lets the provider handle REST calls and streaming automatically: +```tsx +import { agUIAdapter, ChatProvider, fetchLLM } from "@openuidev/react-headless"; + +const llm = fetchLLM({ + url: "/api/chat", + streamAdapter: agUIAdapter(), +}); + +function App() { + return ( + + + + ); +} +``` + +On each send, `fetchLLM` POSTs `{ threadId, runId, messages, tools: [], context: [] }` (an AG-UI `RunAgentInput`-shaped body) to `url` and hands the streaming `Response` to `streamAdapter` for parsing. + +| Option | Description | +| :--- | :--- | +| `url` | Endpoint that accepts the POSTed body and returns a streaming `Response` | +| `streamAdapter` | Stream protocol adapter for the response body, e.g. `agUIAdapter()` — see [Streaming Adapters](#streaming-adapters) | +| `messageFormat` | Optional wire-format conversion for outgoing messages; defaults to identity (canonical AG-UI messages) | +| `headers` | Optional extra headers merged into the request | +| `fetch` | Optional `fetch` override (tests, custom auth wrappers) | + +Without `storage`, threads live in memory and are wiped on reload. + +### Persistence with `restStorage` + +To persist threads, add a `storage` adapter. `restStorage` covers the common REST case: ```tsx -import { ChatProvider } from "@openuidev/react-headless"; +import { agUIAdapter, ChatProvider, fetchLLM, restStorage } from "@openuidev/react-headless"; + +const llm = fetchLLM({ url: "/api/chat", streamAdapter: agUIAdapter() }); +const storage = restStorage({ baseUrl: "/api/threads" }); function App() { return ( - + ); } ``` -### Custom functions +`restStorage` implements the thread channel over these conventions: + +| Operation | Request | +| :--- | :--- | +| List threads | `GET {baseUrl}/get` (paginate with `?cursor=`) | +| Create thread | `POST {baseUrl}/create` | +| Get messages | `GET {baseUrl}/get/{threadId}` | +| Update thread | `PATCH {baseUrl}/update/{threadId}` | +| Delete thread | `DELETE {baseUrl}/delete/{threadId}` | + +Like `fetchLLM`, it accepts optional `messageFormat`, `headers`, and `fetch` options. -For full control, provide your own functions instead of URLs: +### Custom adapters + +When those conventions don't fit your backend, implement the `ChatLLM` (and/or `ChatStorage`) interface directly: ```tsx - { - return fetch("/api/chat", { - method: "POST", - body: JSON.stringify({ threadId, messages }), - signal: abortController.signal, - }); - }} - fetchThreadList={async () => { - const res = await fetch("/api/threads"); - return res.json(); - }} - createThread={async (firstMessage) => { - const res = await fetch("/api/threads", { +import { openAIAdapter, openAIMessageFormat, type ChatLLM } from "@openuidev/react-headless"; + +const llm: ChatLLM = { + send: ({ threadId, messages, signal }) => + fetch("/api/chat", { method: "POST", - body: JSON.stringify({ message: firstMessage }), - }); - return res.json(); - }} -> - - + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ threadId, messages: openAIMessageFormat.toApi(messages) }), + signal, + }), + streamProtocol: openAIAdapter(), +}; ``` ## Hooks @@ -104,7 +138,7 @@ function ChatMessages() { } ``` -**Returns:** `ThreadState & ThreadActions` +**Returns:** `ThreadState & ThreadActions`. Pass an optional selector to subscribe to a slice, e.g. `useThread((s) => s.processMessage)`. | Field | Type | Description | | :--- | :--- | :--- | @@ -112,6 +146,7 @@ function ChatMessages() { | `isRunning` | `boolean` | Whether the model is currently streaming | | `isLoadingMessages` | `boolean` | Whether messages are being fetched | | `threadError` | `Error \| null` | Error from the last operation | +| `executingToolCallIds` | `Set` | Tool calls whose arguments have closed but whose result hasn't arrived yet | | `processMessage(msg)` | `(msg) => Promise` | Send a message and stream the response | | `cancelMessage()` | `() => void` | Abort the current stream | | `appendMessages(...msgs)` | `(...msgs) => void` | Append messages locally | @@ -144,13 +179,14 @@ function ThreadSidebar() { } ``` -**Returns:** `ThreadListState & ThreadListActions` +**Returns:** `ThreadListState & ThreadListActions`. Also accepts an optional selector, like `useThread`. | Field | Type | Description | | :--- | :--- | :--- | | `threads` | `Thread[]` | All loaded threads | | `selectedThreadId` | `string \| null` | Currently selected thread | | `isLoadingThreads` | `boolean` | Whether the thread list is loading | +| `threadListError` | `Error \| null` | Error from the last thread-list operation | | `hasMoreThreads` | `boolean` | Whether more threads can be loaded | | `loadThreads()` | `() => void` | Fetch the thread list | | `loadMoreThreads()` | `() => void` | Load the next page of threads | @@ -173,24 +209,27 @@ function MessageBubble() { } ``` +### Other hooks + +The package also exports hooks for tool calls, artifacts, and detailed views: `useToolActivities`, `useArtifactList`, `useArtifactRenderer`, `useArtifactStorage`, `useDetailedView`, `useActiveDetailedView`, and `useDetailedViewPortalTarget`. See the [hooks reference](https://openui.com/docs/agent/reference/hooks). + ## Streaming Adapters -Adapters transform HTTP responses into the internal event stream. Pass one to `ChatProvider` via `streamProtocol`: +Adapters transform HTTP responses into the internal AG-UI event stream. They are **factories — call them** and pass the result to `fetchLLM` via `streamAdapter` (or set it as `streamProtocol` on a hand-written `ChatLLM`): ```tsx -import { ChatProvider, openAIAdapter } from "@openuidev/react-headless"; +import { fetchLLM, openAIAdapter } from "@openuidev/react-headless"; - - {children} - +const llm = fetchLLM({ url: "/api/chat", streamAdapter: openAIAdapter() }); ``` | Adapter | Description | | :--- | :--- | -| `agUIAdapter` | Default adapter for AG-UI SSE events (`data: {json}\n`) | -| `openAIAdapter` | Parses OpenAI Chat Completions streaming (`ChatCompletionChunk`) | -| `openAIResponsesAdapter` | Parses OpenAI Responses API streaming (`ResponseStreamEvent`) | -| `openAIReadableStreamAdapter` | Parses OpenAI SDK's `Stream.toReadableStream()` NDJSON output | +| `agUIAdapter()` | Parses AG-UI SSE events (`data: {json}\n`) | +| `openAIAdapter()` | Parses OpenAI Chat Completions streaming (`ChatCompletionChunk`) | +| `openAIResponsesAdapter()` | Parses OpenAI Responses API streaming (`ResponseStreamEvent`) | +| `openAIReadableStreamAdapter()` | Parses OpenAI SDK's `Stream.toReadableStream()` NDJSON output | +| `langGraphAdapter(options?)` | Parses LangGraph named SSE events (`messages`, `updates`, `error`); `options.onInterrupt` handles interrupts | ### Custom adapter @@ -208,14 +247,16 @@ const myAdapter: StreamProtocolAdapter = { ## Message Formats -Message formats convert between your API's message shape and the internal AG-UI format. Pass one to `ChatProvider` via `messageFormat`: +Message formats convert between your API's message shape and the internal AG-UI format. Unlike stream adapters they are plain objects, not factories. Pass one to `fetchLLM` or `restStorage` via the `messageFormat` option: ```tsx -import { ChatProvider, openAIMessageFormat } from "@openuidev/react-headless"; +import { fetchLLM, openAIAdapter, openAIMessageFormat } from "@openuidev/react-headless"; - - {children} - +const llm = fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, +}); ``` | Format | Description | @@ -223,6 +264,7 @@ import { ChatProvider, openAIMessageFormat } from "@openuidev/react-headless"; | `identityMessageFormat` | Default format when messages are already AG-UI shaped | | `openAIMessageFormat` | Converts to/from OpenAI `ChatCompletionMessageParam[]` | | `openAIConversationMessageFormat` | Converts to/from OpenAI Responses API `ResponseInputItem[]` | +| `langGraphMessageFormat` | Converts to/from LangChain/LangGraph message dicts | ### Custom format @@ -242,6 +284,11 @@ const myFormat: MessageFormat = { ```ts import type { ChatProviderProps, + ChatLLM, + ChatStorage, + ThreadStorage, + FetchLLMOptions, + RestStorageOptions, ChatStore, Thread, ThreadState, @@ -266,7 +313,8 @@ import type { ## Documentation - [React Headless API reference](https://openui.com/docs/api-reference/react-headless) -- [Chat guides](https://openui.com/docs/chat) +- [Agent Interface guides](https://openui.com/docs/agent/getting-started/introduction) +- [Adapters and formats reference](https://openui.com/docs/agent/reference/adapters-and-formats) - [Source on GitHub](https://github.com/thesysdev/openui/tree/main/packages/react-headless) ## License diff --git a/packages/react-ui/README.md b/packages/react-ui/README.md index 544875ec7..38e523937 100644 --- a/packages/react-ui/README.md +++ b/packages/react-ui/README.md @@ -6,7 +6,7 @@ React components and a ready-made chat surface for OpenUI. Use the `AgentInterfa [![monthly downloads](https://img.shields.io/npm/dm/@openuidev/react-ui)](https://www.npmjs.com/package/@openuidev/react-ui) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/thesysdev/openui/blob/main/LICENSE) -**Links:** [Package docs](https://openui.com/docs/api-reference/react-ui) | [Chat docs](https://openui.com/docs/chat) | [GitHub repo](https://github.com/thesysdev/openui) +**Links:** [Package docs](https://openui.com/docs/api-reference/react-ui) | [Agent Interface docs](https://openui.com/docs/agent/getting-started/introduction) | [GitHub repo](https://github.com/thesysdev/openui) ## Install @@ -16,12 +16,12 @@ npm install @openuidev/react-ui @openuidev/react-lang @openuidev/react-headless pnpm add @openuidev/react-ui @openuidev/react-lang @openuidev/react-headless ``` -**Peer dependencies:** `react >=19.0.0`, `react-dom >=19.0.0`, `zustand ^4.5.5`, `@openuidev/react-lang`, `@openuidev/react-headless` +**Peer dependencies:** `react ^18.3.1 || ^19.0.0`, `react-dom ^18.0.0 || ^19.0.0`, `zustand ^4.5.5`, `zod ^3.25.0 || ^4.0.0`, `@openuidev/react-lang`, `@openuidev/react-headless` -Don't forget to import the component styles: +Don't forget to import the component styles (once, app-wide): ```ts -import "@openuidev/react-ui/styles/index.css"; +import "@openuidev/react-ui/components.css"; ``` ## Overview @@ -34,28 +34,21 @@ This package provides three layers: ## Quick Start -The fastest way to get a working chat app is `AgentInterface`. Give it an `llm` transport that talks to your backend. Storage is optional — without it, threads live in memory and are wiped on reload: +The fastest way to get a working chat app is `AgentInterface`. Give it an `llm` transport built with `fetchLLM`: point it at your streaming endpoint, pick the stream adapter that matches what the endpoint emits (adapters are factories — call them), and optionally a message format for the wire shape. Storage is optional — without it, threads live in memory and are wiped on reload: ```tsx -import { - AgentInterface, - openAIAdapter, - openAIMessageFormat, - type ChatLLM, -} from "@openuidev/react-ui"; +import "@openuidev/react-ui/components.css"; + +import { AgentInterface, fetchLLM, openAIAdapter, openAIMessageFormat } from "@openuidev/react-ui"; import { openuiChatLibrary } from "@openuidev/react-ui/genui-lib"; -import "@openuidev/react-ui/styles/index.css"; - -const llm: ChatLLM = { - send: ({ messages, signal }) => - fetch("/api/chat", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ messages: openAIMessageFormat.toApi(messages) }), - signal, - }), - streamProtocol: openAIAdapter(), -}; + +// POSTs { threadId, runId, messages, tools, context } to /api/chat and parses +// the streamed response — here an OpenAI Chat Completions stream. +const llm = fetchLLM({ + url: "/api/chat", + streamAdapter: openAIAdapter(), + messageFormat: openAIMessageFormat, +}); function App() { return ( @@ -69,20 +62,22 @@ function App() { } ``` +If your endpoint streams AG-UI events, use `agUIAdapter()` and drop `messageFormat` (messages are sent as-is). For backends that don't fit `fetchLLM`'s conventions, implement the `ChatLLM` interface directly — see the [react-headless README](https://github.com/thesysdev/openui/tree/main/packages/react-headless). + ### The chat surface `AgentInterface` is the single chat surface. It adapts its layout responsively and accepts: | Prop | Description | | :----------------- | :------------------------------------------------------------------------------------------- | -| `storage` | Optional persistence adapter for thread history; defaults to in-memory (wiped on reload). Use `restStorage` from `@openuidev/react-ui` to back it with your own REST API | -| `llm` | Chat transport: `{ send({ messages, signal }), streamProtocol }` | +| `storage` | Optional persistence adapter for thread history; defaults to in-memory (wiped on reload). Use `restStorage({ baseUrl })` from `@openuidev/react-ui` to back it with your own REST API | +| `llm` | Chat transport, usually built with `fetchLLM`; any `ChatLLM` (`{ send({ threadId, messages, signal }), streamProtocol }`) works | | `componentLibrary` | OpenUI Lang library used to render assistant messages (e.g. `openuiChatLibrary`) | | `theme` | Theme configuration, e.g. `{ mode: "light" }` | | `agentName` | Name displayed in the header | | `starters` | Conversation-starter prompts shown on the welcome screen | -See the [chat docs](https://openui.com/docs/chat) for full configuration. +See the [AgentInterface props reference](https://openui.com/docs/agent/reference/agentinterface-props) for full configuration. ## Built-in Component Libraries @@ -148,9 +143,11 @@ OpenUI ships its component styles in two variants: | Import | Cascade behavior | | ------------------------------------------------------- | ------------------------------------------------------------------------- | -| `@openuidev/react-ui/styles/index.css` (default) | Unlayered — override via normal CSS specificity, as in 0.11.x and earlier | +| `@openuidev/react-ui/components.css` (default) | Unlayered — override via normal CSS specificity, as in 0.11.x and earlier | | `@openuidev/react-ui/layered/styles/index.css` (opt-in) | Wrapped in `@layer openui` — any unlayered consumer CSS wins | +`@openuidev/react-ui/styles/index.css` is an identical alias of `components.css` — import one or the other, never both. + Need a single component's CSS? Import it per component: `./styles/.css` (unlayered) or `./layered/styles/.css` (layered). With the layered variant, plain CSS overrides OpenUI without `!important` or specificity matching: @@ -215,7 +212,8 @@ import { Charts } from "@openuidev/react-ui/Charts"; | Import path | Description | | :--------------------------------------------- | :--------------------------------------------------- | | `@openuidev/react-ui` | All components and libraries | -| `@openuidev/react-ui/styles/index.css` | Full compiled stylesheet, unlayered (default import) | +| `@openuidev/react-ui/components.css` | Full compiled stylesheet, unlayered (default import) | +| `@openuidev/react-ui/styles/index.css` | Identical alias of `components.css` | | `@openuidev/react-ui/layered/styles/index.css` | Full stylesheet wrapped in `@layer openui` (opt-in) | | `@openuidev/react-ui/defaults.css` | Theme tokens, always unlayered | | `@openuidev/react-ui/genui-lib` | OpenUI Lang libraries and prompt options | @@ -227,7 +225,7 @@ import { Charts } from "@openuidev/react-ui/Charts"; ## Documentation - [React UI API reference](https://openui.com/docs/api-reference/react-ui) -- [Chat guides](https://openui.com/docs/chat) +- [Agent Interface guides](https://openui.com/docs/agent/getting-started/introduction) - [Source on GitHub](https://github.com/thesysdev/openui/tree/main/packages/react-ui) ## License From 0b67d19011beed8417af7d38754c6879ff88b330 Mon Sep 17 00:00:00 2001 From: ankit-thesys Date: Fri, 3 Jul 2026 00:53:39 +0530 Subject: [PATCH 8/8] chore(lockfile): react-email workspace link; drop openui-cloud vendor importer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two causes: (1) react-email's move from pinned react-headless 0.8.2 to workspace:* removes the old 0.8.2 dependency tree; (2) pnpm install ran in a checkout without the gitignored examples/openui-cloud/vendor/ dir, so the lockfile's vendor-package importer (and its now-unreferenced transitive entries) was dropped. (2) is arguably a fix: pnpm install --frozen-lockfile now passes on a fresh checkout (the known post-retire-shells CI lockfile debt). Devs with vendor/ present locally will see this importer churn back on their next install — drop this hunk at review if that trade-off is not wanted. Co-Authored-By: Claude Fable 5 --- pnpm-lock.yaml | 2234 +++++++++--------------------------------------- 1 file changed, 406 insertions(+), 1828 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0c457f5e4..e7e5809c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -579,7 +579,7 @@ importers: version: 0.0.53 '@ag-ui/mastra': specifier: ^1.0.1 - version: 1.0.2(9220890b5542174596f1672037334515) + version: 1.0.2(364620e1be806619c971a3ce5646742e) '@mastra/core': specifier: 1.15.0 version: 1.15.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@1.0.0)(typebox@1.1.38)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@1.0.0)(typebox@1.1.38)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) @@ -822,151 +822,6 @@ importers: specifier: ^5 version: 5.9.3 - examples/openui-cloud/vendor/package: - dependencies: - '@floating-ui/react-dom': - specifier: ^2.1.2 - version: 2.1.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tanstack/react-table': - specifier: ^8.0.0 - version: 8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tiptap/extension-placeholder': - specifier: ^2.10.0 - version: 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) - '@tiptap/react': - specifier: ^2.10.0 - version: 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tiptap/starter-kit': - specifier: ^2.10.0 - version: 2.27.2 - clsx: - specifier: ^2.1.0 - version: 2.1.1 - katex: - specifier: ^0.16.0 - version: 0.16.44 - lodash: - specifier: ^4.17.21 - version: 4.18.1 - lucide-react: - specifier: ^0.562.0 - version: 0.562.0(react@19.2.4) - mermaid: - specifier: ^11.15.0 - version: 11.15.0 - rehype-katex: - specifier: ^7.0.0 - version: 7.0.1 - remark-breaks: - specifier: ^4.0.0 - version: 4.0.0 - remark-gfm: - specifier: ^4.0.0 - version: 4.0.1 - remark-math: - specifier: ^6.0.0 - version: 6.0.0 - devDependencies: - '@openuidev/lang-core': - specifier: ^0.2.4 - version: 0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76))(zod@3.25.76) - '@openuidev/react-headless': - specifier: link:../../../openui/packages/react-headless - version: link:../../../openui/packages/react-headless - '@openuidev/react-lang': - specifier: ^0.2.5 - version: 0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76))(react@19.2.4)(zod@3.25.76) - '@openuidev/react-ui': - specifier: link:../../../openui/packages/react-ui - version: link:../../../openui/packages/react-ui - '@radix-ui/react-tooltip': - specifier: ^1.0.0 - version: 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@rolldown/binding-darwin-arm64': - specifier: 1.0.0-rc.16 - version: 1.0.0-rc.16 - '@thesysdev/eslint-config': - specifier: ^0.2.0 - version: 0.2.0(@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.4))(eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1) - '@thesysdev/prettier-config': - specifier: ^0.0.2 - version: 0.0.2(prettier-plugin-organize-imports@3.2.4(prettier@3.9.4)(typescript@5.9.3)) - '@types/lodash': - specifier: ^4.17.0 - version: 4.17.18 - '@types/react': - specifier: ^19.0.0 - version: 19.2.14 - '@types/react-dom': - specifier: ^19.0.0 - version: 19.2.3(@types/react@19.2.14) - '@typescript-eslint/eslint-plugin': - specifier: ^8.59.4 - version: 8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/parser': - specifier: ^8.59.4 - version: 8.59.4(eslint@8.57.1)(typescript@5.9.3) - '@vitejs/plugin-react': - specifier: ^6.0.1 - version: 6.0.3(babel-plugin-react-compiler@1.0.0)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) - eslint: - specifier: ^8.56.0 - version: 8.57.1 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.2(eslint@8.57.1) - eslint-plugin-prettier: - specifier: ^5.1.3 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.4) - eslint-plugin-react: - specifier: ^7.37.0 - version: 7.37.5(eslint@8.57.1) - eslint-plugin-react-hooks: - specifier: ^5.1.0 - version: 5.2.0(eslint@8.57.1) - eslint-plugin-unused-imports: - specifier: ^3.1.0 - version: 3.2.0(@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1) - magic-string: - specifier: ^0.30.21 - version: 0.30.21 - prettier: - specifier: ^3.8.3 - version: 3.9.4 - prettier-plugin-organize-imports: - specifier: ^3.2.4 - version: 3.2.4(prettier@3.9.4)(typescript@5.9.3) - react: - specifier: ^19.0.0 - version: 19.2.4 - react-dom: - specifier: ^19.0.0 - version: 19.2.4(react@19.2.4) - sass: - specifier: ^1.70.0 - version: 1.89.2 - terser: - specifier: ^5.36.0 - version: 5.48.0 - typescript: - specifier: ^5.3.0 - version: 5.9.3 - vite: - specifier: ^8.0.10 - version: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) - vite-plugin-dts: - specifier: ^4.5.4 - version: 4.5.4(@types/node@25.3.2)(rollup@4.60.4)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) - vitest: - specifier: ^4.1.0 - version: 4.1.7(@opentelemetry/api@1.9.1)(@types/node@25.3.2)(jsdom@29.1.1)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) - zod: - specifier: ^3.25.0 - version: 3.25.76 - zustand: - specifier: ^4.5.5 - version: 4.5.7(@types/react@19.2.14)(react@19.2.4) - examples/openui-dashboard: dependencies: '@modelcontextprotocol/sdk': @@ -1074,10 +929,10 @@ importers: version: 0.1.3(react@19.2.0) expo: specifier: ~54.0.6 - version: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-status-bar: specifier: ~55.0.4 - version: 55.0.4(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 55.0.4(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) openai: specifier: ^4.90.0 version: 4.104.0(ws@8.21.0)(zod@4.3.6) @@ -1086,13 +941,13 @@ importers: version: 19.2.0 react-native: specifier: 0.83.2 - version: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + version: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) react-native-safe-area-context: specifier: ^5.7.0 - version: 5.7.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 5.7.0(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-svg: specifier: 15.12.1 - version: 15.12.1(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + version: 15.12.1(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react-native-web: specifier: ^0.21.0 version: 0.21.2(react-dom@19.2.4(react@19.2.0))(react@19.2.0) @@ -1113,14 +968,14 @@ importers: specifier: workspace:* version: link:../../packages/openui-cli '@openuidev/react-email': - specifier: 0.2.4 - version: 0.2.4(@openuidev/react-lang@0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(react@19.2.3)(zod@4.3.6))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.6) + specifier: workspace:* + version: link:../../packages/react-email '@openuidev/react-headless': - specifier: 0.8.2 - version: 0.8.2(react@19.2.3)(zustand@4.5.7(@types/react@19.2.14)(react@19.2.3)) + specifier: workspace:* + version: link:../../packages/react-headless '@openuidev/react-lang': - specifier: 0.2.6 - version: 0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(react@19.2.3)(zod@4.3.6) + specifier: workspace:* + version: link:../../packages/react-lang '@react-email/components': specifier: ^0.0.41 version: 0.0.41(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -1519,13 +1374,13 @@ importers: devDependencies: '@tailwindcss/vite': specifier: ^4 - version: 4.2.2(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) + version: 4.2.2(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) jiti: specifier: ^2.0.0 version: 2.6.1 nuxt: specifier: ^3.17.0 - version: 3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0) + version: 3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0) tailwindcss: specifier: ^4 version: 4.2.1 @@ -2003,9 +1858,6 @@ packages: '@ag-ui/client@0.0.49': resolution: {integrity: sha512-G6LTsdULw91sqLBeqW6VBqQjdrMJ0d91gtNr7mvaVVEoQX5pM5qVt7cf61ZNh6uv3UIwEG4oLSwH+v9unVzbtg==} - '@ag-ui/core@0.0.45': - resolution: {integrity: sha512-Ccsarxb23TChONOWXDbNBqp1fIbOSMht8g7w6AsSYBTtdOwZ7h7AkjNkr3LSdVv+RbT30JMdSLtieJE0YepNPg==} - '@ag-ui/core@0.0.46': resolution: {integrity: sha512-5/gC9n20ImA10LMFLLYKOowqn2Btrr3UYXWGosmLc1+KJqREI0t35NXnwqoKlw7TWySznF1bpwY6uIvMtO/ZUg==} @@ -3734,18 +3586,10 @@ packages: resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.29.0': resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4026,19 +3870,10 @@ packages: resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@humanwhocodes/retry@0.3.1': resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} @@ -4655,19 +4490,6 @@ packages: '@mermaid-js/parser@1.1.1': resolution: {integrity: sha512-VuHdsYMK1bT6X2JbcAaWAhugTRvRBRyuZgd+c22swUeI9g/ntaxF7CY7dYarhZovofCbUNO0G7JesfmNtjYOCw==} - '@microsoft/api-extractor-model@7.33.8': - resolution: {integrity: sha512-aIcoQggPyer3B6Ze3usz0YWC/oBwUHfRH5ETUsr+oT2BRA6SfTJl7IKPcPZkX4UR+PohowzW4uMxsvjrn8vm+w==} - - '@microsoft/api-extractor@7.58.9': - resolution: {integrity: sha512-S2UF4yza5GoxCmf7hJQNxJNZN9ltOVuOQv8Dy+Z21aol5ERoBNMdWcQHm4MJMPPItW4H/4rZD906iaf4mUojJA==} - hasBin: true - - '@microsoft/tsdoc-config@0.18.1': - resolution: {integrity: sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==} - - '@microsoft/tsdoc@0.16.0': - resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} - '@mistralai/mistralai@2.2.1': resolution: {integrity: sha512-uKU8CZmL2RzYKmplsU01hii4p3pe4HqJefpWNRWXm1Tcm0Sm4xXfwSLIy4k7ZCPlbETCGcp69E7hZs+WOJ5itQ==} @@ -5319,44 +5141,11 @@ packages: resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==} engines: {node: '>=14'} - '@openuidev/lang-core@0.2.6': - resolution: {integrity: sha512-a/WkffvnclxSYBGhJxho8mvaVDYCBNw9GBMP5J2tl17mK6ukA6YmSQvwSmlC0UNi3FiLdj6Wk6qJIjESZ8EOUg==} - peerDependencies: - '@modelcontextprotocol/sdk': '>=1.0.0' - zod: ^3.25.0 || ^4.0.0 - peerDependenciesMeta: - '@modelcontextprotocol/sdk': - optional: true - - '@openuidev/react-email@0.2.4': - resolution: {integrity: sha512-n8z4Zv3Df/cXksMwQo9RNL1aeC/M0REQclvp44TGfhiMiCi1mvWlYZ3uX5qzrerIwHBS+m7NUdI6LugCpFeiaQ==} - peerDependencies: - '@openuidev/react-lang': 0.2.6 - react: ^18.3.1 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - zod: ^3.25.0 || ^4.0.0 - - '@openuidev/react-headless@0.8.2': - resolution: {integrity: sha512-o70dZnwVli25JWYFFZBEtXpCVrdJAkQRoW1/La58C6jVvga/Q2KTnz+rXCLUHX/e9iZpHQ9doZZht+GZ9vRfjA==} - peerDependencies: - react: ^18.3.1 || ^19.0.0 - zustand: ^4.5.5 - '@openuidev/react-lang@0.1.3': resolution: {integrity: sha512-+/sVNVOFFzmnAsR8y+5W/la5U485OGXPFNtgY7wu0XdBdKSkbljNUGBA1XiHkzcxSVoATWOSy9eQ/J4UeHSPuQ==} peerDependencies: react: '>=19.0.0' - '@openuidev/react-lang@0.2.6': - resolution: {integrity: sha512-5lfnMUiUyTQli0fPFwQtUhxV0B5T/PJntgZzUb0IXiJSyWm+FNpYOIozJxim0xxmqmuYwmk1geLTNcjzYIS6mA==} - peerDependencies: - '@modelcontextprotocol/sdk': '>=1.0.0' - react: ^18.3.1 || ^19.0.0 - zod: ^3.25.0 || ^4.0.0 - peerDependenciesMeta: - '@modelcontextprotocol/sdk': - optional: true - '@orama/orama@3.1.18': resolution: {integrity: sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==} engines: {node: '>= 20.0.0'} @@ -7732,9 +7521,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - '@remirror/core-constants@3.0.0': - resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} - '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} @@ -8220,36 +8006,6 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/node-core-library@5.23.1': - resolution: {integrity: sha512-wlKmIKIYCKuCASbITvOxLZXepPbwXvrv7S6ig6XNWFchSyhL/E2txmVXspHY49Wu2dzf7nI27a2k/yV5BA3EiA==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/problem-matcher@0.2.1': - resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/rig-package@0.7.3': - resolution: {integrity: sha512-aAA518n6wxxjCfnTAOjQnm7ngNE0FVHxHAw2pxKlIhxrMn0XQjGcXKF0oKWpjBgJOmsaJpVob/v+zr3zxgPWuA==} - - '@rushstack/terminal@0.24.0': - resolution: {integrity: sha512-8ZQS4MMaGsv27EXCBiH7WMPkRZrffeDoIevs6z9TM5dzqiY6+Hn4evfK/G+gvgBTjfvfkHIZPQQmalmI2sM4TQ==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/ts-command-line@5.3.10': - resolution: {integrity: sha512-fwI076HYknC0IrMXdY6UmjDv+PH7NHhNJX3/pY2UblSE5XrXgndXZPiOe/6ZtuFpn6DvVDVNhtkIzQ+Qu/MhVQ==} - '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} @@ -8999,167 +8755,12 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' - '@thesysdev/eslint-config@0.2.0': - resolution: {integrity: sha512-7NO8o7CyOUOv1ecgW//LPZapZz3q783OTos8nsTxowjZ2qAHXHgmio3DHXQceDi0l1h7pQK8MERMjM49a2G47g==, tarball: https://npm.pkg.github.com/download/@thesysdev/eslint-config/0.2.0/9fe0620a30b0aaf14552c98aca773964c4ac2423} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^8.59.4 - '@typescript-eslint/parser': ^8.59.4 - eslint: ^8.56.0 - eslint-config-prettier: ^9.1.0 - eslint-plugin-prettier: ^5.1.3 - eslint-plugin-unused-imports: ^3.1.0 - - '@thesysdev/prettier-config@0.0.2': - resolution: {integrity: sha512-dIcvAtyf3AraZi1wulLvSD2QgF/WN30j8cyJPRMzcN0xUfITWCvO78Ua1ts1VLozk5hbiYVDnygtHdkcQ4ffeg==, tarball: https://npm.pkg.github.com/download/@thesysdev/prettier-config/0.0.2/dd6cf6c6551b1290fbcfdb08355a9e46fe1bb611} - peerDependencies: - prettier-plugin-organize-imports: ^3.2.4 - - '@tiptap/core@2.27.2': - resolution: {integrity: sha512-ABL1N6eoxzDzC1bYvkMbvyexHacszsKdVPYqhl5GwHLOvpZcv9VE9QaKwDILTyz5voCA0lGcAAXZp+qnXOk5lQ==} - peerDependencies: - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-blockquote@2.27.2': - resolution: {integrity: sha512-oIGZgiAeA4tG3YxbTDfrmENL4/CIwGuP3THtHsNhwRqwsl9SfMk58Ucopi2GXTQSdYXpRJ0ahE6nPqB5D6j/Zw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-bold@2.27.2': - resolution: {integrity: sha512-bR7J5IwjCGQ0s3CIxyMvOCnMFMzIvsc5OVZKscTN5UkXzFsaY6muUAIqtKxayBUucjtUskm5qZowJITCeCb1/A==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-bubble-menu@2.27.2': - resolution: {integrity: sha512-VkwlCOcr0abTBGzjPXklJ92FCowG7InU8+Od9FyApdLNmn0utRYGRhw0Zno6VgE9EYr1JY4BRnuSa5f9wlR72w==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-bullet-list@2.27.2': - resolution: {integrity: sha512-gmFuKi97u5f8uFc/GQs+zmezjiulZmFiDYTh3trVoLRoc2SAHOjGEB7qxdx7dsqmMN7gwiAWAEVurLKIi1lnnw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-code-block@2.27.2': - resolution: {integrity: sha512-KgvdQHS4jXr79aU3wZOGBIZYYl9vCB7uDEuRFV4so2rYrfmiYMw3T8bTnlNEEGe4RUeAms1i4fdwwvQp9nR1Dw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-code@2.27.2': - resolution: {integrity: sha512-7X9AgwqiIGXoZX7uvdHQsGsjILnN/JaEVtqfXZnPECzKGaWHeK/Ao4sYvIIIffsyZJA8k5DC7ny2/0sAgr2TuA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-document@2.27.2': - resolution: {integrity: sha512-CFhAYsPnyYnosDC4639sCJnBUnYH4Cat9qH5NZWHVvdgtDwu8GZgZn2eSzaKSYXWH1vJ9DSlCK+7UyC3SNXIBA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-dropcursor@2.27.2': - resolution: {integrity: sha512-oEu/OrktNoQXq1x29NnH/GOIzQZm8ieTQl3FK27nxfBPA89cNoH4mFEUmBL5/OFIENIjiYG3qWpg6voIqzswNw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-floating-menu@2.27.2': - resolution: {integrity: sha512-GUN6gPIGXS7ngRJOwdSmtBRBDt9Kt9CM/9pSwKebhLJ+honFoNA+Y6IpVyDvvDMdVNgBchiJLs6qA5H97gAePQ==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-gapcursor@2.27.2': - resolution: {integrity: sha512-/c9VF1HBxj+AP54XGVgCmD9bEGYc5w5OofYCFQgM7l7PB1J00A4vOke0oPkHJnqnOOyPlFaxO/7N6l3XwFcnKA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-hard-break@2.27.2': - resolution: {integrity: sha512-kSRVGKlCYK6AGR0h8xRkk0WOFGXHIIndod3GKgWU49APuIGDiXd8sziXsSlniUsWmqgDmDXcNnSzPcV7AQ8YNg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-heading@2.27.2': - resolution: {integrity: sha512-iM3yeRWuuQR/IRQ1djwNooJGfn9Jts9zF43qZIUf+U2NY8IlvdNsk2wTOdBgh6E0CamrStPxYGuln3ZS4fuglw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-history@2.27.2': - resolution: {integrity: sha512-+hSyqERoFNTWPiZx4/FCyZ/0eFqB9fuMdTB4AC/q9iwu3RNWAQtlsJg5230bf/qmyO6bZxRUc0k8p4hrV6ybAw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-horizontal-rule@2.27.2': - resolution: {integrity: sha512-WGWUSgX+jCsbtf9Y9OCUUgRZYuwjVoieW5n6mAUohJ9/6gc6sGIOrUpBShf+HHo6WD+gtQjRd+PssmX3NPWMpg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-italic@2.27.2': - resolution: {integrity: sha512-1OFsw2SZqfaqx5Fa5v90iNlPRcqyt+lVSjBwTDzuPxTPFY4Q0mL89mKgkq2gVHYNCiaRkXvFLDxaSvBWbmthgg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-list-item@2.27.2': - resolution: {integrity: sha512-eJNee7IEGXMnmygM5SdMGDC8m/lMWmwNGf9fPCK6xk0NxuQRgmZHL6uApKcdH6gyNcRPHCqvTTkhEP7pbny/fg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-ordered-list@2.27.2': - resolution: {integrity: sha512-M7A4tLGJcLPYdLC4CI2Gwl8LOrENQW59u3cMVa+KkwG1hzSJyPsbDpa1DI6oXPC2WtYiTf22zrbq3gVvH+KA2w==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-paragraph@2.27.2': - resolution: {integrity: sha512-elYVn2wHJJ+zB9LESENWOAfI4TNT0jqEN34sMA/hCtA4im1ZG2DdLHwkHIshj/c4H0dzQhmsS/YmNC5Vbqab/A==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-placeholder@2.27.2': - resolution: {integrity: sha512-IjsgSVYJRjpAKmIoapU0E2R4E2FPY3kpvU7/1i7PUYisylqejSJxmtJPGYw0FOMQY9oxnEEvfZHMBA610tqKpg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-strike@2.27.2': - resolution: {integrity: sha512-HHIjhafLhS2lHgfAsCwC1okqMsQzR4/mkGDm4M583Yftyjri1TNA7lzhzXWRFWiiMfJxKtdjHjUAQaHuteRTZw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-text-style@2.27.2': - resolution: {integrity: sha512-Omk+uxjJLyEY69KStpCw5fA9asvV+MGcAX2HOxyISDFoLaL49TMrNjhGAuz09P1L1b0KGXo4ml7Q3v/Lfy4WPA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-text@2.27.2': - resolution: {integrity: sha512-Xk7nYcigljAY0GO9hAQpZ65ZCxqOqaAlTPDFcKerXmlkQZP/8ndx95OgUb1Xf63kmPOh3xypurGS2is3v0MXSA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/pm@2.27.2': - resolution: {integrity: sha512-kaEg7BfiJPDQMKbjVIzEPO3wlcA+pZb2tlcK9gPrdDnEFaec2QTF1sXz2ak2IIb2curvnIrQ4yrfHgLlVA72wA==} - - '@tiptap/react@2.27.2': - resolution: {integrity: sha512-0EAs8Cpkfbvben1PZ34JN2Nd79Dhioynm2jML27DBbf1VWPk+FFWFGTMLUT0bu+Np5iVxio8fqV9t0mc4D6thA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tiptap/starter-kit@2.27.2': - resolution: {integrity: sha512-bb0gJvPoDuyRUQ/iuN52j1//EtWWttw+RXAv1uJxfR0uKf8X7uAqzaOOgwjknoCIDC97+1YHwpGdnRjpDkOBxw==} - '@tybys/wasm-util@0.10.2': resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} - '@types/argparse@1.0.38': - resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} - '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -9346,24 +8947,15 @@ packages: '@types/katex@0.16.7': resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} '@types/lodash@4.17.18': resolution: {integrity: sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==} - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -9458,9 +9050,6 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - '@types/uuid@10.0.0': resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} @@ -9769,19 +9358,6 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitejs/plugin-react@6.0.3': - resolution: {integrity: sha512-vmFvco5/QuC2f9Oj+wTk0+9XeDFkHxSamwZKYc7MxYwKICfvUvlMhqKI0VuICPltGqh1neqBKDvO4kes1ya8vg==} - engines: {node: ^20.19.0 || >=22.12.0} - peerDependencies: - '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 - babel-plugin-react-compiler: ^1.0.0 - vite: ^8.0.0 - peerDependenciesMeta: - '@rolldown/plugin-babel': - optional: true - babel-plugin-react-compiler: - optional: true - '@vitejs/plugin-vue-jsx@5.1.5': resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -9924,14 +9500,6 @@ packages: '@vue/devtools-shared@8.1.1': resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==} - '@vue/language-core@2.2.0': - resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@vue/language-core@2.2.12': resolution: {integrity: sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==} peerDependencies: @@ -10136,14 +9704,6 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -10174,9 +9734,6 @@ packages: ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} - alien-signals@0.4.14: - resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} - alien-signals@1.0.13: resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==} @@ -11055,9 +10612,6 @@ packages: resolution: {integrity: sha512-BKKkSLvzeyoZCq3rM0F/YsPlG+p3EWEg9ZV1OgQpZpf4Fc7QWsdlCf/n/USS97m9hdMJTVjLiv7DMaqfKs9JgA==} hasBin: true - crelt@1.0.7: - resolution: {integrity: sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==} - croner@10.0.1: resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} engines: {node: '>=18.0'} @@ -11829,12 +11383,6 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-config-prettier@9.1.2: - resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - eslint-import-resolver-node@0.3.10: resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} @@ -11902,12 +11450,6 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-hooks@7.1.1: resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} engines: {node: '>=18'} @@ -11931,16 +11473,6 @@ packages: eslint: '>=8' storybook: ^10.2.14 - eslint-plugin-unused-imports@3.2.0: - resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': 6 - 7 - eslint: '8' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - eslint-plugin-unused-imports@4.4.1: resolution: {integrity: sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==} peerDependencies: @@ -11950,18 +11482,10 @@ packages: '@typescript-eslint/eslint-plugin': optional: true - eslint-rule-composer@0.3.0: - resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} - engines: {node: '>=4.0.0'} - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -11978,12 +11502,6 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - eslint@9.29.0: resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -12001,10 +11519,6 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -12381,10 +11895,6 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -12423,10 +11933,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -12517,10 +12023,6 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} - fs-extra@11.3.6: - resolution: {integrity: sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==} - engines: {node: '>=14.14'} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -12768,10 +12270,6 @@ packages: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -12806,9 +12304,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql-query-complexity@0.12.0: resolution: {integrity: sha512-fWEyuSL6g/+nSiIRgIipfI6UXTI7bAxrpPlCY1c0+V3pAEUo1ybaKmSBgNr1ed2r+agm1plJww8Loig9y6s2dw==} peerDependencies: @@ -13118,10 +12613,6 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -13329,10 +12820,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-path-inside@4.0.0: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} @@ -13500,9 +12987,6 @@ packages: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} @@ -13663,9 +13147,6 @@ packages: knitwork@1.3.0: resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==} - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} @@ -13903,9 +13384,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - linkify-it@5.0.1: - resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==} - listhen@1.10.0: resolution: {integrity: sha512-kfz4C0OrC6IpaVMtYDJtf6PFjurxe9NBBoDAh/o2p587INryFOO4DQ9OetbCdDrWFt1m1CJKvYrzkGsuPHw8nQ==} hasBin: true @@ -14061,10 +13539,6 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} - markdown-it@14.2.0: - resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} - hasBin: true - markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -14177,9 +13651,6 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -14492,10 +13963,6 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimatch@10.2.3: - resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} - engines: {node: 18 || 20 || >=22} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -15099,9 +14566,6 @@ packages: resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} engines: {node: '>=6'} - orderedmap@2.1.1: - resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} - os-paths@4.4.0: resolution: {integrity: sha512-wrAwOeXp1RRMFfQY8Sy7VaGVmPocaLwSFOYCGKSyo8qmJ+/yaafCl5BCA1IQZWqFSRBrKDYFeR9d/VyQzfH/jg==} engines: {node: '>= 6.0'} @@ -15732,64 +15196,6 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - prosemirror-changeset@2.4.1: - resolution: {integrity: sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==} - - prosemirror-collab@1.3.1: - resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} - - prosemirror-commands@1.7.1: - resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} - - prosemirror-dropcursor@1.8.2: - resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} - - prosemirror-gapcursor@1.4.1: - resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==} - - prosemirror-history@1.5.0: - resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==} - - prosemirror-inputrules@1.5.1: - resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==} - - prosemirror-keymap@1.2.3: - resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} - - prosemirror-markdown@1.13.4: - resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==} - - prosemirror-menu@1.3.2: - resolution: {integrity: sha512-6VgUJTYod0nMBlCaYJGhXGLu7Gt4AvcwcOq0YfJCY/6Uh+3S7UsWhpy6rJFCBFOmonq1hD8KyWOtZhkppd4YPg==} - - prosemirror-model@1.25.9: - resolution: {integrity: sha512-pRTklkDDMMRopyoAcrr9wV/8g/RYgrLHBuJAb5hlEuYZRdm5yqmPjWId83fpBwPpSFqEdja0H7Dfd7z1X/npcA==} - - prosemirror-schema-basic@1.2.4: - resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} - - prosemirror-schema-list@1.5.1: - resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} - - prosemirror-state@1.4.4: - resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==} - - prosemirror-tables@1.8.5: - resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==} - - prosemirror-trailing-node@3.0.0: - resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} - peerDependencies: - prosemirror-model: ^1.22.1 - prosemirror-state: ^1.4.2 - prosemirror-view: ^1.33.8 - - prosemirror-transform@1.12.0: - resolution: {integrity: sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==} - - prosemirror-view@1.41.9: - resolution: {integrity: sha512-clTunTX+eaLbr87L1V1QPheRlEQJyTlL3gXe9x3jQIk3rL0RVWxviDGz8tFaydwIVm+hKhYCyr+R/zBtWr9s6A==} - proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -15809,10 +15215,6 @@ packages: pump@3.0.4: resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -16371,9 +15773,6 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rope-sequence@1.3.4: - resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - rou3@0.8.1: resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==} @@ -16725,10 +16124,6 @@ packages: streamx@2.25.0: resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - string-hash@1.1.3: resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} @@ -17063,9 +16458,6 @@ packages: text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -17120,9 +16512,6 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tippy.js@6.3.7: - resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} - tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} @@ -17265,10 +16654,6 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -17343,9 +16728,6 @@ packages: resolution: {integrity: sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==} hasBin: true - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -17813,15 +17195,6 @@ packages: vue-tsc: optional: true - vite-plugin-dts@4.5.4: - resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} - peerDependencies: - typescript: '*' - vite: '*' - peerDependenciesMeta: - vite: - optional: true - vite-plugin-inspect@11.3.3: resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==} engines: {node: '>=14'} @@ -18052,9 +17425,6 @@ packages: typescript: optional: true - 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'} @@ -18467,11 +17837,6 @@ snapshots: uuid: 11.1.1 zod: 3.25.76 - '@ag-ui/core@0.0.45': - dependencies: - rxjs: 7.8.1 - zod: 3.25.76 - '@ag-ui/core@0.0.46': dependencies: rxjs: 7.8.1 @@ -18516,12 +17881,12 @@ snapshots: - react-dom - ws - '@ag-ui/mastra@1.0.2(9220890b5542174596f1672037334515)': + '@ag-ui/mastra@1.0.2(364620e1be806619c971a3ce5646742e)': dependencies: '@ag-ui/client': 0.0.49 '@ag-ui/core': 0.0.53 '@ai-sdk/ui-utils': 1.2.11(zod@4.3.6) - '@copilotkit/runtime': 0.0.0-mme-ag-ui-0-0-46-20260227141603(035c16db2a3cb52a93fabe2605f70548) + '@copilotkit/runtime': 0.0.0-mme-ag-ui-0-0-46-20260227141603(78f6bf7329ddca7893fae8ba1863557a) '@mastra/client-js': 1.11.2(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@1.0.0)(typebox@1.1.38)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@1.0.0)(typebox@1.1.38)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) '@mastra/core': 1.15.0(@cfworker/json-schema@4.1.1)(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@1.0.0)(typebox@1.1.38)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6))(@standard-community/standard-openapi@0.2.9(@standard-community/standard-json@0.3.5(@standard-schema/spec@1.1.0)(@types/json-schema@7.0.15)(quansync@1.0.0)(typebox@1.1.38)(zod-to-json-schema@3.25.2(zod@4.3.6))(zod@4.3.6))(@standard-schema/spec@1.1.0)(openapi-types@12.1.3)(typebox@1.1.38)(zod@4.3.6))(@types/json-schema@7.0.15)(openapi-types@12.1.3)(zod@4.3.6) rxjs: 7.8.1 @@ -19097,19 +18462,6 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -19123,16 +18475,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.29.0)': + '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3 @@ -19175,15 +18527,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -19199,24 +18542,15 @@ snapshots: '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -19294,78 +18628,73 @@ snapshots: dependencies: '@babel/types': 8.0.0-rc.6 - '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.0)': + '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.0)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.0)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-export-default-from@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-export-default-from@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-flow@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.7)': @@ -19373,49 +18702,44 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.0)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.0)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.0)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.7)': @@ -19423,278 +18747,257 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.7) '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-globals': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.7) '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.29.7 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.7) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.7) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.7) + babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.7)': dependencies: @@ -19707,32 +19010,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-react@7.28.5(@babel/core@7.29.0)': + '@babel/preset-react@7.28.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': + '@babel/preset-typescript@7.28.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color @@ -19866,7 +19169,7 @@ snapshots: dependencies: commander: 13.1.0 - '@copilotkit/runtime@0.0.0-mme-ag-ui-0-0-46-20260227141603(035c16db2a3cb52a93fabe2605f70548)': + '@copilotkit/runtime@0.0.0-mme-ag-ui-0-0-46-20260227141603(78f6bf7329ddca7893fae8ba1863557a)': dependencies: '@ag-ui/client': 0.0.46 '@ag-ui/core': 0.0.46 @@ -19878,7 +19181,7 @@ snapshots: '@copilotkitnext/runtime': 0.0.0-mme-ag-ui-0-0-46-20260227141603(@ag-ui/client@0.0.46)(@ag-ui/core@0.0.46)(@ag-ui/encoder@0.0.49)(@copilotkitnext/shared@0.0.0-mme-ag-ui-0-0-46-20260227141603) '@graphql-yoga/plugin-defer-stream': 3.21.0(graphql-yoga@5.21.0(graphql@16.14.0))(graphql@16.14.0) '@hono/node-server': 1.19.14(hono@4.12.23) - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) '@scarf/scarf': 1.4.0 ai: 5.0.192(zod@3.25.76) class-transformer: 0.5.1 @@ -19895,9 +19198,9 @@ snapshots: type-graphql: 2.0.0-rc.1(class-validator@0.14.4)(graphql-scalars@1.25.0(graphql@16.14.0))(graphql@16.14.0) zod: 3.25.76 optionalDependencies: - '@langchain/langgraph-sdk': 1.9.25(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3)) - '@langchain/openai': 1.5.3(@aws-sdk/credential-provider-node@3.972.56)(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(@smithy/signature-v4@5.5.0)(ws@8.21.0) - langchain: 1.5.2(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))(ws@8.21.0) + '@langchain/langgraph-sdk': 1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3)) + '@langchain/openai': 1.5.3(@aws-sdk/credential-provider-node@3.972.56)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(@smithy/signature-v4@5.5.0)(ws@8.21.0) + langchain: 1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))(ws@8.21.0) openai: 4.104.0(ws@8.21.0)(zod@4.3.6) transitivePeerDependencies: - '@ag-ui/encoder' @@ -20471,11 +19774,6 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.1(eslint@9.29.0(jiti@2.7.0))': dependencies: eslint: 9.29.0(jiti@2.7.0) @@ -20501,20 +19799,6 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.15.0 - debug: 4.4.3 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.5 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.15.0 @@ -20529,8 +19813,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} - '@eslint/js@9.29.0': {} '@eslint/object-schema@2.1.6': {} @@ -20543,7 +19825,7 @@ snapshots: '@exodus/bytes@1.15.1': optional: true - '@expo/cli@54.0.24(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))': + '@expo/cli@54.0.24(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))': dependencies: '@0no-co/graphql.web': 1.2.0(graphql@16.14.0) '@expo/code-signing-certificates': 0.0.6 @@ -20554,11 +19836,11 @@ snapshots: '@expo/image-utils': 0.8.12 '@expo/json-file': 10.0.12 '@expo/metro': 54.2.0 - '@expo/metro-config': 54.0.15(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)) + '@expo/metro-config': 54.0.15(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)) '@expo/osascript': 2.4.2 '@expo/package-manager': 1.10.3 '@expo/plist': 0.4.8 - '@expo/prebuild-config': 54.0.8(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)) + '@expo/prebuild-config': 54.0.8(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)) '@expo/schema-utils': 0.1.8 '@expo/spawn-async': 1.7.2 '@expo/ws-tunnel': 1.0.6 @@ -20577,7 +19859,7 @@ snapshots: connect: 3.7.0 debug: 4.4.3 env-editor: 0.4.2 - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) expo-server: 1.0.6 freeport-async: 2.0.0 getenv: 2.0.0 @@ -20610,7 +19892,7 @@ snapshots: wrap-ansi: 7.0.0 ws: 8.21.0 optionalDependencies: - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - bufferutil - graphql @@ -20667,12 +19949,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devtools@0.1.8(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@expo/devtools@0.1.8(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: chalk: 4.1.2 optionalDependencies: react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) '@expo/env@2.0.11': dependencies: @@ -20715,7 +19997,7 @@ snapshots: '@babel/code-frame': 7.29.7 json5: 2.2.3 - '@expo/metro-config@54.0.15(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))': + '@expo/metro-config@54.0.15(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))': dependencies: '@babel/code-frame': 7.29.7 '@babel/core': 7.29.7 @@ -20739,7 +20021,7 @@ snapshots: postcss: 8.5.15 resolve-from: 5.0.0 optionalDependencies: - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) transitivePeerDependencies: - bufferutil - supports-color @@ -20785,7 +20067,7 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/prebuild-config@54.0.8(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))': + '@expo/prebuild-config@54.0.8(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))': dependencies: '@expo/config': 12.0.13 '@expo/config-plugins': 54.0.4 @@ -20794,7 +20076,7 @@ snapshots: '@expo/json-file': 10.0.12 '@react-native/normalize-colors': 0.81.5 debug: 4.4.3 - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) resolve-from: 5.0.0 semver: 7.8.1 xml2js: 0.6.0 @@ -20811,11 +20093,11 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/vector-icons@15.1.1(expo-font@14.0.11(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@expo/vector-icons@15.1.1(expo-font@14.0.11(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: - expo-font: 14.0.11(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-font: 14.0.11(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) '@expo/ws-tunnel@1.0.6': {} @@ -21019,18 +20301,8 @@ snapshots: '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.3 - minimatch: 3.1.5 - transitivePeerDependencies: - - supports-color - '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} - '@humanwhocodes/retry@0.3.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -21424,6 +20696,22 @@ snapshots: - openai - ws + '@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0)': + dependencies: + '@cfworker/json-schema': 4.1.1 + '@standard-schema/spec': 1.1.0 + js-tiktoken: 1.0.21 + langsmith: 0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) + mustache: 4.2.0 + p-queue: 6.6.2 + zod: 4.4.3 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - ws + '@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.56)(@smithy/signature-v4@5.5.0)(ws@8.21.0)(zod@4.4.3))(ws@8.21.0)': dependencies: '@cfworker/json-schema': 4.1.1 @@ -21481,9 +20769,9 @@ snapshots: - utf-8-validate - ws - '@langchain/langgraph-checkpoint@1.1.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))': + '@langchain/langgraph-checkpoint@1.1.3(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))': dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) optional: true '@langchain/langgraph-checkpoint@1.1.3(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.56)(@smithy/signature-v4@5.5.0)(ws@8.21.0)(zod@4.4.3))(ws@8.21.0))': @@ -21553,9 +20841,9 @@ snapshots: svelte: 5.55.9(@typescript-eslint/types@8.59.4) vue: 3.5.34(typescript@5.9.3) - '@langchain/langgraph-sdk@1.9.25(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))': + '@langchain/langgraph-sdk@1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))': dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) '@langchain/protocol': 0.0.18 '@types/json-schema': 7.0.15 p-queue: 9.3.0 @@ -21588,11 +20876,11 @@ snapshots: esbuild-plugin-tailwindcss: 2.2.0 zod: 4.4.3 - '@langchain/langgraph@1.4.7(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))(zod@4.4.3)': + '@langchain/langgraph@1.4.7(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))(zod@4.4.3)': dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) - '@langchain/langgraph-checkpoint': 1.1.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0)) - '@langchain/langgraph-sdk': 1.9.25(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3)) + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) + '@langchain/langgraph-checkpoint': 1.1.3(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0)) + '@langchain/langgraph-sdk': 1.9.25(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3)) '@langchain/protocol': 0.0.18 '@standard-schema/spec': 1.1.0 zod: 4.4.3 @@ -21617,9 +20905,9 @@ snapshots: - svelte - vue - '@langchain/openai@1.5.3(@aws-sdk/credential-provider-node@3.972.56)(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(@smithy/signature-v4@5.5.0)(ws@8.21.0)': + '@langchain/openai@1.5.3(@aws-sdk/credential-provider-node@3.972.56)(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(@smithy/signature-v4@5.5.0)(ws@8.21.0)': dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) js-tiktoken: 1.0.21 openai: 6.45.0(@aws-sdk/credential-provider-node@3.972.56)(@smithy/signature-v4@5.5.0)(ws@8.21.0)(zod@4.4.3) zod: 4.4.3 @@ -21873,41 +21161,6 @@ snapshots: dependencies: '@chevrotain/types': 11.1.2 - '@microsoft/api-extractor-model@7.33.8(@types/node@25.3.2)': - dependencies: - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@rushstack/node-core-library': 5.23.1(@types/node@25.3.2) - transitivePeerDependencies: - - '@types/node' - - '@microsoft/api-extractor@7.58.9(@types/node@25.3.2)': - dependencies: - '@microsoft/api-extractor-model': 7.33.8(@types/node@25.3.2) - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@rushstack/node-core-library': 5.23.1(@types/node@25.3.2) - '@rushstack/rig-package': 0.7.3 - '@rushstack/terminal': 0.24.0(@types/node@25.3.2) - '@rushstack/ts-command-line': 5.3.10(@types/node@25.3.2) - diff: 8.0.4 - minimatch: 10.2.3 - resolve: 1.22.11 - semver: 7.7.4 - source-map: 0.6.1 - typescript: 5.9.3 - transitivePeerDependencies: - - '@types/node' - - '@microsoft/tsdoc-config@0.18.1': - dependencies: - '@microsoft/tsdoc': 0.16.0 - ajv: 8.18.0 - jju: 1.4.0 - resolve: 1.22.11 - - '@microsoft/tsdoc@0.16.0': {} - '@mistralai/mistralai@2.2.1': dependencies: ws: 8.21.0 @@ -22328,11 +21581,11 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))': + '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) execa: 8.0.1 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) transitivePeerDependencies: - magicast @@ -22347,9 +21600,9 @@ snapshots: pkg-types: 2.3.1 semver: 7.8.1 - '@nuxt/devtools@3.2.4(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))': + '@nuxt/devtools@3.2.4(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))': dependencies: - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) '@nuxt/devtools-wizard': 3.2.4 '@nuxt/kit': 4.4.2(magicast@0.5.2) '@vue/devtools-core': 8.1.1(vue@3.5.34(typescript@5.9.3)) @@ -22377,9 +21630,9 @@ snapshots: sirv: 3.0.2 structured-clone-es: 2.0.0 tinyglobby: 0.2.16 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) - vite-plugin-vue-tracer: 1.3.0(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)) + vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) + vite-plugin-vue-tracer: 1.3.0(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)) which: 6.0.1 ws: 8.21.0 transitivePeerDependencies: @@ -22439,7 +21692,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@3.21.6(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0))(oxc-parser@0.131.0)(rolldown@1.1.3)(srvx@0.11.16)(typescript@5.9.3)': + '@nuxt/nitro-server@3.21.6(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0))(oxc-parser@0.131.0)(rolldown@1.1.3)(srvx@0.11.16)(typescript@5.9.3)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 3.21.6(magicast@0.5.2) @@ -22457,7 +21710,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.13.4(oxc-parser@0.131.0)(rolldown@1.1.3)(srvx@0.11.16) - nuxt: 3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0) + nuxt: 3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.1 @@ -22524,7 +21777,7 @@ snapshots: rc9: 3.0.1 std-env: 4.1.0 - '@nuxt/vite-builder@3.21.6(@types/node@25.3.2)(eslint@9.29.0(jiti@2.7.0))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0))(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(vue@3.5.34(typescript@5.9.3))(yaml@2.9.0)': + '@nuxt/vite-builder@3.21.6(@types/node@25.3.2)(eslint@9.29.0(jiti@2.7.0))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0))(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(vue@3.5.34(typescript@5.9.3))(yaml@2.9.0)': dependencies: '@nuxt/kit': 3.21.6(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.4) @@ -22543,7 +21796,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0) + nuxt: 3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0) nypm: 0.6.6 ohash: 2.0.11 pathe: 2.0.3 @@ -22554,7 +21807,7 @@ snapshots: std-env: 4.1.0 ufo: 1.6.4 unenv: 2.0.0-rc.24 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite: 7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) vite-node: 5.3.0(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) vite-plugin-checker: 0.13.0(eslint@9.29.0(jiti@2.7.0))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3)) vue: 3.5.34(typescript@5.9.3) @@ -22815,32 +22068,6 @@ snapshots: '@opentelemetry/semantic-conventions@1.41.1': {} - '@openuidev/lang-core@0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76))(zod@3.25.76)': - dependencies: - zod: 3.25.76 - optionalDependencies: - '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) - - '@openuidev/lang-core@0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(zod@4.3.6)': - dependencies: - zod: 4.3.6 - optionalDependencies: - '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6) - - '@openuidev/react-email@0.2.4(@openuidev/react-lang@0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(react@19.2.3)(zod@4.3.6))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.3.6)': - dependencies: - '@openuidev/react-lang': 0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(react@19.2.3)(zod@4.3.6) - '@react-email/components': 0.0.41(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - zod: 4.3.6 - - '@openuidev/react-headless@0.8.2(react@19.2.3)(zustand@4.5.7(@types/react@19.2.14)(react@19.2.3))': - dependencies: - '@ag-ui/core': 0.0.45 - react: 19.2.3 - zustand: 4.5.7(@types/react@19.2.14)(react@19.2.3) - '@openuidev/react-lang@0.1.3(react@19.2.0)': dependencies: react: 19.2.0 @@ -22851,22 +22078,6 @@ snapshots: react: 19.2.4 zod: 4.4.3 - '@openuidev/react-lang@0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76))(react@19.2.4)(zod@3.25.76)': - dependencies: - '@openuidev/lang-core': 0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76))(zod@3.25.76) - react: 19.2.4 - zod: 3.25.76 - optionalDependencies: - '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@3.25.76) - - '@openuidev/react-lang@0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(react@19.2.3)(zod@4.3.6)': - dependencies: - '@openuidev/lang-core': 0.2.6(@modelcontextprotocol/sdk@1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6))(zod@4.3.6) - react: 19.2.3 - zod: 4.3.6 - optionalDependencies: - '@modelcontextprotocol/sdk': 1.29.0(@cfworker/json-schema@4.1.1)(zod@4.3.6) - '@orama/orama@3.1.18': {} '@oxc-minify/binding-android-arm-eabi@0.131.0': @@ -24722,26 +23933,6 @@ snapshots: '@types/react': 19.2.14 '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.4) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - optionalDependencies: - '@types/react': 19.2.14 - '@types/react-dom': 19.2.3(@types/react@19.2.14) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.3)': dependencies: react: 19.2.3 @@ -25746,67 +24937,67 @@ snapshots: '@react-native/assets-registry@0.83.2': {} - '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.29.0)': + '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.29.7)': dependencies: '@babel/traverse': 7.29.7 - '@react-native/codegen': 0.81.5(@babel/core@7.29.0) + '@react-native/codegen': 0.81.5(@babel/core@7.29.7) transitivePeerDependencies: - '@babel/core' - supports-color - '@react-native/babel-preset@0.81.5(@babel/core@7.29.0)': + '@react-native/babel-preset@0.81.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.7) '@babel/template': 7.29.7 - '@react-native/babel-plugin-codegen': 0.81.5(@babel/core@7.29.0) + '@react-native/babel-plugin-codegen': 0.81.5(@babel/core@7.29.7) babel-plugin-syntax-hermes-parser: 0.29.1 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) react-refresh: 0.14.2 transitivePeerDependencies: - supports-color - '@react-native/codegen@0.81.5(@babel/core@7.29.0)': + '@react-native/codegen@0.81.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/parser': 7.29.7 glob: 7.2.3 hermes-parser: 0.29.1 @@ -25814,9 +25005,9 @@ snapshots: nullthrows: 1.1.1 yargs: 17.7.2 - '@react-native/codegen@0.83.2(@babel/core@7.29.0)': + '@react-native/codegen@0.83.2(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/parser': 7.29.0 glob: 7.2.3 hermes-parser: 0.32.0 @@ -25894,12 +25085,12 @@ snapshots: '@react-native/normalize-colors@0.83.2': {} - '@react-native/virtualized-lists@0.83.2(@types/react@19.2.14)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': + '@react-native/virtualized-lists@0.83.2(@types/react@19.2.14)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) optionalDependencies: '@types/react': 19.2.14 @@ -26345,8 +25536,6 @@ snapshots: '@react-types/shared': 3.33.1(react@19.2.3) react: 19.2.3 - '@remirror/core-constants@3.0.0': {} - '@repeaterjs/repeater@3.0.6': {} '@rolldown/binding-android-arm64@1.0.0-rc.17': @@ -26644,45 +25833,6 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/node-core-library@5.23.1(@types/node@25.3.2)': - dependencies: - ajv: 8.18.0 - ajv-draft-04: 1.0.0(ajv@8.18.0) - ajv-formats: 3.0.1(ajv@8.18.0) - fs-extra: 11.3.6 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.11 - semver: 7.7.4 - optionalDependencies: - '@types/node': 25.3.2 - - '@rushstack/problem-matcher@0.2.1(@types/node@25.3.2)': - optionalDependencies: - '@types/node': 25.3.2 - - '@rushstack/rig-package@0.7.3': - dependencies: - jju: 1.4.0 - resolve: 1.22.11 - - '@rushstack/terminal@0.24.0(@types/node@25.3.2)': - dependencies: - '@rushstack/node-core-library': 5.23.1(@types/node@25.3.2) - '@rushstack/problem-matcher': 0.2.1(@types/node@25.3.2) - supports-color: 8.1.1 - optionalDependencies: - '@types/node': 25.3.2 - - '@rushstack/ts-command-line@5.3.10(@types/node@25.3.2)': - dependencies: - '@rushstack/terminal': 0.24.0(@types/node@25.3.2) - '@types/argparse': 1.0.38 - argparse: 1.0.10 - string-argv: 0.3.2 - transitivePeerDependencies: - - '@types/node' - '@scarf/scarf@1.4.0': {} '@sec-ant/readable-stream@0.4.1': {} @@ -27417,12 +26567,12 @@ snapshots: tailwindcss: 4.2.2 vite: 6.4.2(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) - '@tailwindcss/vite@4.2.2(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))': + '@tailwindcss/vite@4.2.2(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.2.2 '@tailwindcss/oxide': 4.2.2 tailwindcss: 4.2.2 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) '@takumi-rs/core-darwin-arm64@0.68.17': optional: true @@ -27475,12 +26625,6 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - '@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tanstack/table-core': 8.21.3 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - '@tanstack/table-core@8.21.3': {} '@testing-library/dom@10.4.0': @@ -27521,178 +26665,6 @@ snapshots: dependencies: '@testing-library/dom': 10.4.0 - '@thesysdev/eslint-config@0.2.0(@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.4))(eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1)': - dependencies: - '@typescript-eslint/eslint-plugin': 8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.4(eslint@8.57.1)(typescript@5.9.3) - eslint: 8.57.1 - eslint-config-prettier: 9.1.2(eslint@8.57.1) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.4) - eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1) - - '@thesysdev/prettier-config@0.0.2(prettier-plugin-organize-imports@3.2.4(prettier@3.9.4)(typescript@5.9.3))': - dependencies: - prettier-plugin-organize-imports: 3.2.4(prettier@3.9.4)(typescript@5.9.3) - - '@tiptap/core@2.27.2(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/pm': 2.27.2 - - '@tiptap/extension-blockquote@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-bold@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-bubble-menu@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - tippy.js: 6.3.7 - - '@tiptap/extension-bullet-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-code-block@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - - '@tiptap/extension-code@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-document@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-dropcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - - '@tiptap/extension-floating-menu@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - tippy.js: 6.3.7 - - '@tiptap/extension-gapcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - - '@tiptap/extension-hard-break@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-heading@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-history@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - - '@tiptap/extension-horizontal-rule@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - - '@tiptap/extension-italic@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-list-item@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-ordered-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-paragraph@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-placeholder@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - - '@tiptap/extension-strike@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/extension-text@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - - '@tiptap/pm@2.27.2': - dependencies: - prosemirror-changeset: 2.4.1 - prosemirror-collab: 1.3.1 - prosemirror-commands: 1.7.1 - prosemirror-dropcursor: 1.8.2 - prosemirror-gapcursor: 1.4.1 - prosemirror-history: 1.5.0 - prosemirror-inputrules: 1.5.1 - prosemirror-keymap: 1.2.3 - prosemirror-markdown: 1.13.4 - prosemirror-menu: 1.3.2 - prosemirror-model: 1.25.9 - prosemirror-schema-basic: 1.2.4 - prosemirror-schema-list: 1.5.1 - prosemirror-state: 1.4.4 - prosemirror-tables: 1.8.5 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.9)(prosemirror-state@1.4.4)(prosemirror-view@1.41.9) - prosemirror-transform: 1.12.0 - prosemirror-view: 1.41.9 - - '@tiptap/react@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-bubble-menu': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) - '@tiptap/extension-floating-menu': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) - '@tiptap/pm': 2.27.2 - '@types/use-sync-external-store': 0.0.6 - fast-deep-equal: 3.1.3 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) - - '@tiptap/starter-kit@2.27.2': - dependencies: - '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2) - '@tiptap/extension-blockquote': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-bold': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-bullet-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-code': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-code-block': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) - '@tiptap/extension-document': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-dropcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) - '@tiptap/extension-gapcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) - '@tiptap/extension-hard-break': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-heading': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-history': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) - '@tiptap/extension-horizontal-rule': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2) - '@tiptap/extension-italic': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-list-item': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-ordered-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-paragraph': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-strike': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-text': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/extension-text-style': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2)) - '@tiptap/pm': 2.27.2 - '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 @@ -27703,8 +26675,6 @@ snapshots: tslib: 2.8.1 optional: true - '@types/argparse@1.0.38': {} - '@types/aria-query@5.0.4': {} '@types/aws-lambda@8.10.161': {} @@ -27933,25 +26903,16 @@ snapshots: '@types/katex@0.16.7': {} - '@types/linkify-it@5.0.0': {} - '@types/lodash-es@4.17.12': dependencies: '@types/lodash': 4.17.18 '@types/lodash@4.17.18': {} - '@types/markdown-it@14.1.2': - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 - '@types/mdurl@2.0.0': {} - '@types/mdx@2.0.13': {} '@types/mime@1.3.5': {} @@ -28044,8 +27005,6 @@ snapshots: '@types/unist@3.0.3': {} - '@types/use-sync-external-store@0.0.6': {} - '@types/uuid@10.0.0': {} '@types/uuid@9.0.8': {} @@ -28063,22 +27022,6 @@ snapshots: '@types/node': 24.13.2 optional: true - '@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.4(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.59.4 - '@typescript-eslint/type-utils': 8.59.4(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.4(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.4 - eslint: 8.57.1 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3))(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -28095,18 +27038,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.59.4 - '@typescript-eslint/types': 8.59.4 - '@typescript-eslint/typescript-estree': 8.59.4(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.4 - debug: 4.4.3 - eslint: 8.57.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.59.4(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.4 @@ -28137,18 +27068,6 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.4(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.59.4 - '@typescript-eslint/typescript-estree': 8.59.4(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.4(eslint@8.57.1)(typescript@5.9.3) - debug: 4.4.3 - eslint: 8.57.1 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.59.4(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.4 @@ -28178,17 +27097,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.4(eslint@8.57.1)(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.59.4 - '@typescript-eslint/types': 8.59.4 - '@typescript-eslint/typescript-estree': 8.59.4(typescript@5.9.3) - eslint: 8.57.1 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.59.4(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.29.0(jiti@2.7.0)) @@ -28395,13 +27303,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@6.0.3(babel-plugin-react-compiler@1.0.0)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))': - dependencies: - '@rolldown/pluginutils': 1.0.1 - vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) - optionalDependencies: - babel-plugin-react-compiler: 1.0.0 - '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))': dependencies: '@babel/core': 7.29.7 @@ -28409,7 +27310,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) '@rolldown/pluginutils': 1.0.1 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite: 7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) vue: 3.5.34(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -28423,7 +27324,7 @@ snapshots: '@vitejs/plugin-vue@6.0.7(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite: 7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) vue: 3.5.34(typescript@5.9.3) '@vitest/expect@2.0.5': @@ -28654,19 +27555,6 @@ snapshots: '@vue/devtools-shared@8.1.1': {} - '@vue/language-core@2.2.0(typescript@5.9.3)': - dependencies: - '@volar/language-core': 2.4.28 - '@vue/compiler-dom': 3.5.34 - '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.34 - alien-signals: 0.4.14 - minimatch: 9.0.9 - muggle-string: 0.4.1 - path-browserify: 1.0.1 - optionalDependencies: - typescript: 5.9.3 - '@vue/language-core@2.2.12(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.15 @@ -28932,10 +27820,6 @@ snapshots: '@ai-sdk/provider-utils': 5.0.0-beta.49(zod@4.4.3) zod: 4.4.3 - ajv-draft-04@1.0.0(ajv@8.18.0): - optionalDependencies: - ajv: 8.18.0 - ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 @@ -28970,8 +27854,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - alien-signals@0.4.14: {} - alien-signals@1.0.13: {} alien-signals@3.1.2: {} @@ -29196,13 +28078,13 @@ snapshots: b4a@1.8.0: {} - babel-jest@29.7.0(@babel/core@7.29.0): + babel-jest@29.7.0(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.29.0) + babel-preset-jest: 29.6.3(@babel/core@7.29.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -29232,27 +28114,27 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.11 - babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): + babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.7): dependencies: '@babel/compat-data': 7.29.7 - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.7) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.29.0): + babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color @@ -29270,68 +28152,68 @@ snapshots: dependencies: hermes-parser: 0.32.0 - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.0): + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.7): dependencies: - '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - '@babel/core' - babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.0) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.0) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.0) - - babel-preset-expo@54.0.10(@babel/core@7.29.0)(@babel/runtime@7.29.7)(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-refresh@0.14.2): + '@babel/core': 7.29.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) + + babel-preset-expo@54.0.10(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-refresh@0.14.2): dependencies: '@babel/helper-module-imports': 7.29.7 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@react-native/babel-preset': 0.81.5(@babel/core@7.29.0) + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.7) + '@babel/preset-react': 7.28.5(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) + '@react-native/babel-preset': 0.81.5(@babel/core@7.29.7) babel-plugin-react-compiler: 1.0.0 babel-plugin-react-native-web: 0.21.2 babel-plugin-syntax-hermes-parser: 0.29.1 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.0) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) debug: 4.4.3 react-refresh: 0.14.2 resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.29.7 - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) transitivePeerDependencies: - '@babel/core' - supports-color - babel-preset-jest@29.6.3(@babel/core@7.29.0): + babel-preset-jest@29.6.3(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) bail@2.0.2: {} @@ -29946,8 +28828,6 @@ snapshots: - babel-plugin-macros - supports-color - crelt@1.0.7: {} - croner@10.0.1: {} cross-fetch@3.2.0: @@ -30849,10 +29729,6 @@ snapshots: dependencies: eslint: 9.29.0(jiti@2.7.0) - eslint-config-prettier@9.1.2(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - eslint-import-resolver-node@0.3.10: dependencies: debug: 3.2.7 @@ -30955,20 +29831,6 @@ snapshots: '@types/eslint': 9.6.1 eslint-config-prettier: 10.1.8(eslint@9.29.0(jiti@2.7.0)) - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.9.4): - dependencies: - eslint: 8.57.1 - prettier: 3.9.4 - prettier-linter-helpers: 1.0.1 - synckit: 0.11.12 - optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 9.1.2(eslint@8.57.1) - - eslint-plugin-react-hooks@5.2.0(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - eslint-plugin-react-hooks@7.1.1(eslint@9.29.0(jiti@2.7.0)): dependencies: '@babel/core': 7.29.7 @@ -30984,28 +29846,6 @@ snapshots: dependencies: eslint: 9.29.0(jiti@2.7.0) - eslint-plugin-react@7.37.5(eslint@8.57.1): - dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.3.2 - eslint: 8.57.1 - estraverse: 5.3.0 - hasown: 2.0.3 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.5 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.7 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - eslint-plugin-react@7.37.5(eslint@9.29.0(jiti@2.7.0)): dependencies: array-includes: 3.1.9 @@ -31046,31 +29886,17 @@ snapshots: - supports-color - typescript - eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - eslint-rule-composer: 0.3.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.59.4(@typescript-eslint/parser@8.59.4(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.59.4(@typescript-eslint/parser@8.59.4(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3))(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3))(eslint@9.29.0(jiti@2.7.0)): dependencies: eslint: 9.29.0(jiti@2.7.0) optionalDependencies: '@typescript-eslint/eslint-plugin': 8.59.4(@typescript-eslint/parser@8.59.4(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3))(eslint@9.29.0(jiti@2.7.0))(typescript@5.9.3) - eslint-rule-composer@0.3.0: {} - eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -31082,49 +29908,6 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@8.57.1: - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.1 - ajv: 6.15.0 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - eslint@9.29.0(jiti@2.7.0): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.29.0(jiti@2.7.0)) @@ -31175,12 +29958,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 - espree@9.6.1: - dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} esquery@1.6.0: @@ -31360,40 +30137,40 @@ snapshots: expect-type@1.3.0: {} - expo-asset@12.0.13(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-asset@12.0.13(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: '@expo/image-utils': 0.8.12 - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-constants: 18.0.13(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-constants: 18.0.13(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0)) react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - supports-color - expo-constants@18.0.13(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): + expo-constants@18.0.13(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0)): dependencies: '@expo/config': 12.0.13 '@expo/env': 2.0.11 - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) transitivePeerDependencies: - supports-color - expo-file-system@19.0.22(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): + expo-file-system@19.0.22(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0)): dependencies: - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) - expo-font@14.0.11(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-font@14.0.11(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) fontfaceobserver: 2.3.0 react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) - expo-keep-awake@15.0.8(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react@19.2.0): + expo-keep-awake@15.0.8(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react@19.2.0): dependencies: - expo: 54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo: 54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) react: 19.2.0 expo-modules-autolinking@3.0.25: @@ -31404,43 +30181,43 @@ snapshots: require-from-string: 2.0.2 resolve-from: 5.0.0 - expo-modules-core@3.0.30(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-modules-core@3.0.30(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: invariant: 2.2.4 react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) expo-server@1.0.6: {} - expo-status-bar@55.0.4(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo-status-bar@55.0.4(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - react-native-is-edge-to-edge: 1.3.1(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: '@babel/runtime': 7.29.7 - '@expo/cli': 54.0.24(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) + '@expo/cli': 54.0.24(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0)) '@expo/config': 12.0.13 '@expo/config-plugins': 54.0.4 - '@expo/devtools': 0.1.8(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/devtools': 0.1.8(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@expo/fingerprint': 0.15.5 '@expo/metro': 54.2.0 - '@expo/metro-config': 54.0.15(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)) - '@expo/vector-icons': 15.1.1(expo-font@14.0.11(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@expo/metro-config': 54.0.15(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)) + '@expo/vector-icons': 15.1.1(expo-font@14.0.11(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) '@ungap/structured-clone': 1.3.1 - babel-preset-expo: 54.0.10(@babel/core@7.29.0)(@babel/runtime@7.29.7)(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-refresh@0.14.2) - expo-asset: 12.0.13(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-constants: 18.0.13(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) - expo-file-system: 19.0.22(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)) - expo-font: 14.0.11(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - expo-keep-awake: 15.0.8(expo@54.0.34(@babel/core@7.29.0)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react@19.2.0) + babel-preset-expo: 54.0.10(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-refresh@0.14.2) + expo-asset: 12.0.13(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-constants: 18.0.13(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0)) + expo-file-system: 19.0.22(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0)) + expo-font: 14.0.11(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-keep-awake: 15.0.8(expo@54.0.34(@babel/core@7.29.7)(graphql@16.14.0)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react@19.2.0) expo-modules-autolinking: 3.0.25 - expo-modules-core: 3.0.30(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + expo-modules-core: 3.0.30(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) pretty-format: 29.7.0 react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) react-refresh: 0.14.2 whatwg-url-without-unicode: 8.0.0-3 transitivePeerDependencies: @@ -31703,10 +30480,6 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -31766,12 +30539,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: - dependencies: - flatted: 3.4.2 - keyv: 4.5.4 - rimraf: 3.0.2 - flat-cache@4.0.1: dependencies: flatted: 3.4.2 @@ -31845,12 +30612,6 @@ snapshots: fresh@2.0.0: {} - fs-extra@11.3.6: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -32098,10 +30859,6 @@ snapshots: dependencies: ini: 4.1.1 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - globals@14.0.0: {} globals@16.4.0: {} @@ -32139,8 +30896,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - graphql-query-complexity@0.12.0(graphql@16.14.0): dependencies: graphql: 16.14.0 @@ -32552,8 +31307,6 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-lazy@4.0.0: {} - import-meta-resolve@4.2.0: {} import-without-cache@0.3.3: {} @@ -32753,8 +31506,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-path-inside@4.0.0: {} is-plain-obj@4.1.0: {} @@ -32949,8 +31700,6 @@ snapshots: jiti@2.7.0: {} - jju@1.4.0: {} - jose@5.10.0: {} jose@6.2.2: {} @@ -33125,17 +31874,15 @@ snapshots: knitwork@1.3.0: {} - kolorist@1.8.0: {} - kuler@2.0.0: {} lan-network@0.2.1: {} - langchain@1.5.2(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))(ws@8.21.0): + langchain@1.5.2(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))(ws@8.21.0): dependencies: - '@langchain/core': 0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) - '@langchain/langgraph': 1.4.7(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))(zod@4.4.3) - '@langchain/langgraph-checkpoint': 1.1.3(@langchain/core@0.3.80(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0)) + '@langchain/core': 1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) + '@langchain/langgraph': 1.4.7(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(svelte@5.55.9(@typescript-eslint/types@8.59.4))(vue@3.5.34(typescript@5.9.3))(zod@4.4.3) + '@langchain/langgraph-checkpoint': 1.1.3(@langchain/core@1.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0)) langsmith: 0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0)(zod@4.3.6))(ws@8.21.0) zod: 4.4.3 transitivePeerDependencies: @@ -33334,10 +32081,6 @@ snapshots: lines-and-columns@1.2.4: {} - linkify-it@5.0.1: - dependencies: - uc.micro: 2.1.0 - listhen@1.10.0(srvx@0.11.16): dependencies: '@parcel/watcher': 2.5.6 @@ -33500,15 +32243,6 @@ snapshots: markdown-extensions@2.0.0: {} - markdown-it@14.2.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.1 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - markdown-table@3.0.4: {} marked-terminal@7.3.0(marked@9.1.6): @@ -33749,8 +32483,6 @@ snapshots: mdn-data@2.27.1: {} - mdurl@2.0.0: {} - media-typer@0.3.0: {} media-typer@1.1.0: {} @@ -34451,10 +33183,6 @@ snapshots: min-indent@1.0.1: {} - minimatch@10.2.3: - dependencies: - brace-expansion: 5.0.6 - minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 @@ -34952,16 +33680,16 @@ snapshots: dependencies: bignumber.js: 9.3.1 - nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0): + nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0): dependencies: '@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@5.9.3) '@nuxt/cli': 3.35.2(@nuxt/schema@3.21.6)(cac@6.7.14)(commander@13.1.0)(magicast@0.5.2) - '@nuxt/devtools': 3.2.4(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)) + '@nuxt/devtools': 3.2.4(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)) '@nuxt/kit': 3.21.6(magicast@0.5.2) - '@nuxt/nitro-server': 3.21.6(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0))(oxc-parser@0.131.0)(rolldown@1.1.3)(srvx@0.11.16)(typescript@5.9.3) + '@nuxt/nitro-server': 3.21.6(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0))(oxc-parser@0.131.0)(rolldown@1.1.3)(srvx@0.11.16)(typescript@5.9.3) '@nuxt/schema': 3.21.6 '@nuxt/telemetry': 2.8.0(@nuxt/kit@3.21.6(magicast@0.5.2)) - '@nuxt/vite-builder': 3.21.6(@types/node@25.3.2)(eslint@9.29.0(jiti@2.7.0))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0))(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(vue@3.5.34(typescript@5.9.3))(yaml@2.9.0) + '@nuxt/vite-builder': 3.21.6(@types/node@25.3.2)(eslint@9.29.0(jiti@2.7.0))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@3.21.6(@parcel/watcher@2.5.6)(@types/node@25.3.2)(@vue/compiler-sfc@3.5.34)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(eslint@9.29.0(jiti@2.7.0))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(srvx@0.11.16)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@5.9.3))(yaml@2.9.0))(optionator@0.9.4)(rolldown@1.1.3)(rollup-plugin-visualizer@7.0.1(rolldown@1.1.3)(rollup@4.60.4))(rollup@4.60.4)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(vue@3.5.34(typescript@5.9.3))(yaml@2.9.0) '@unhead/vue': 2.1.15(vue@3.5.34(typescript@5.9.3)) '@vue/shared': 3.5.34 c12: 3.3.4(magicast@0.5.2) @@ -35321,8 +34049,6 @@ snapshots: strip-ansi: 5.2.0 wcwidth: 1.0.1 - orderedmap@2.1.1: {} - os-paths@4.4.0: {} own-keys@1.0.1: @@ -35988,109 +34714,6 @@ snapshots: property-information@7.1.0: {} - prosemirror-changeset@2.4.1: - dependencies: - prosemirror-transform: 1.12.0 - - prosemirror-collab@1.3.1: - dependencies: - prosemirror-state: 1.4.4 - - prosemirror-commands@1.7.1: - dependencies: - prosemirror-model: 1.25.9 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - - prosemirror-dropcursor@1.8.2: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.41.9 - - prosemirror-gapcursor@1.4.1: - dependencies: - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.9 - prosemirror-state: 1.4.4 - prosemirror-view: 1.41.9 - - prosemirror-history@1.5.0: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.41.9 - rope-sequence: 1.3.4 - - prosemirror-inputrules@1.5.1: - dependencies: - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - - prosemirror-keymap@1.2.3: - dependencies: - prosemirror-state: 1.4.4 - w3c-keyname: 2.2.8 - - prosemirror-markdown@1.13.4: - dependencies: - '@types/markdown-it': 14.1.2 - markdown-it: 14.2.0 - prosemirror-model: 1.25.9 - - prosemirror-menu@1.3.2: - dependencies: - crelt: 1.0.7 - prosemirror-commands: 1.7.1 - prosemirror-history: 1.5.0 - prosemirror-state: 1.4.4 - - prosemirror-model@1.25.9: - dependencies: - orderedmap: 2.1.1 - - prosemirror-schema-basic@1.2.4: - dependencies: - prosemirror-model: 1.25.9 - - prosemirror-schema-list@1.5.1: - dependencies: - prosemirror-model: 1.25.9 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - - prosemirror-state@1.4.4: - dependencies: - prosemirror-model: 1.25.9 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.41.9 - - prosemirror-tables@1.8.5: - dependencies: - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.9 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - prosemirror-view: 1.41.9 - - prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.9)(prosemirror-state@1.4.4)(prosemirror-view@1.41.9): - dependencies: - '@remirror/core-constants': 3.0.0 - escape-string-regexp: 4.0.0 - prosemirror-model: 1.25.9 - prosemirror-state: 1.4.4 - prosemirror-view: 1.41.9 - - prosemirror-transform@1.12.0: - dependencies: - prosemirror-model: 1.25.9 - - prosemirror-view@1.41.9: - dependencies: - prosemirror-model: 1.25.9 - prosemirror-state: 1.4.4 - prosemirror-transform: 1.12.0 - proto-list@1.2.4: {} protobufjs@7.6.1: @@ -36125,8 +34748,6 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 - punycode.js@2.3.1: {} - punycode@2.3.1: {} qrcode-terminal@0.11.0: {} @@ -36431,22 +35052,22 @@ snapshots: transitivePeerDependencies: - supports-color - react-native-is-edge-to-edge@1.3.1(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-is-edge-to-edge@1.3.1(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) - react-native-safe-area-context@5.7.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-safe-area-context@5.7.0(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) - react-native-svg@15.12.1(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): + react-native-svg@15.12.1(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: css-select: 5.2.2 css-tree: 1.1.3 react: 19.2.0 - react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) + react-native: 0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0) warn-once: 0.1.1 react-native-web@0.21.2(react-dom@19.2.4(react@19.2.0))(react@19.2.0): @@ -36464,20 +35085,20 @@ snapshots: transitivePeerDependencies: - encoding - react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0): + react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.83.2 - '@react-native/codegen': 0.83.2(@babel/core@7.29.0) + '@react-native/codegen': 0.83.2(@babel/core@7.29.7) '@react-native/community-cli-plugin': 0.83.2 '@react-native/gradle-plugin': 0.83.2 '@react-native/js-polyfills': 0.83.2 '@react-native/normalize-colors': 0.83.2 - '@react-native/virtualized-lists': 0.83.2(@types/react@19.2.14)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + '@react-native/virtualized-lists': 0.83.2(@types/react@19.2.14)(react-native@0.83.2(@babel/core@7.29.7)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.29.0) + babel-jest: 29.7.0(@babel/core@7.29.7) babel-plugin-syntax-hermes-parser: 0.32.0 base64-js: 1.5.1 commander: 12.1.0 @@ -37158,8 +35779,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.4 fsevents: 2.3.3 - rope-sequence@1.3.4: {} - rou3@0.8.1: {} roughjs@4.6.6: @@ -37602,8 +36221,6 @@ snapshots: - bare-abort-controller - react-native-b4a - string-argv@0.3.2: {} - string-hash@1.1.3: {} string-width@4.2.3: @@ -37993,8 +36610,6 @@ snapshots: text-hex@1.0.0: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -38037,10 +36652,6 @@ snapshots: tinyspy@3.0.2: {} - tippy.js@6.3.7: - dependencies: - '@popperjs/core': 2.11.8 - tldts-core@6.1.86: {} tldts-core@7.4.0: @@ -38168,8 +36779,6 @@ snapshots: type-detect@4.0.8: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.7.1: {} @@ -38256,8 +36865,6 @@ snapshots: ua-parser-js@1.0.41: {} - uc.micro@2.1.0: {} - ufo@1.6.4: {} ultrahtml@1.6.0: {} @@ -38654,15 +37261,15 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-dev-rpc@1.1.0(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)): + vite-dev-rpc@1.1.0(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)): dependencies: birpc: 2.9.0 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) - vite-hot-client: 2.1.0(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) + vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite-hot-client: 2.1.0(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) - vite-hot-client@2.1.0(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)): + vite-hot-client@2.1.0(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)): dependencies: - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) vite-node@5.3.0(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): dependencies: @@ -38694,7 +37301,7 @@ snapshots: proper-lockfile: 4.1.2 tiny-invariant: 1.3.3 tinyglobby: 0.2.16 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite: 7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) vscode-uri: 3.1.0 optionalDependencies: eslint: 9.29.0(jiti@2.7.0) @@ -38702,26 +37309,7 @@ snapshots: typescript: 5.9.3 vue-tsc: 2.2.12(typescript@5.9.3) - vite-plugin-dts@4.5.4(@types/node@25.3.2)(rollup@4.60.4)(typescript@5.9.3)(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)): - dependencies: - '@microsoft/api-extractor': 7.58.9(@types/node@25.3.2) - '@rollup/pluginutils': 5.2.0(rollup@4.60.4) - '@volar/typescript': 2.4.15 - '@vue/language-core': 2.2.0(typescript@5.9.3) - compare-versions: 6.1.1 - debug: 4.4.3 - kolorist: 1.8.0 - local-pkg: 1.1.2 - magic-string: 0.30.21 - typescript: 5.9.3 - optionalDependencies: - vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - - vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -38731,21 +37319,21 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) - vite-dev-rpc: 1.1.0(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) + vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite-dev-rpc: 1.1.0(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0)) optionalDependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.3.0(vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)): + vite-plugin-vue-tracer@1.3.0(vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0))(vue@3.5.34(typescript@5.9.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) + vite: 8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0) vue: 3.5.34(typescript@5.9.3) vite@6.4.2(@types/node@22.19.19)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): @@ -38784,7 +37372,7 @@ snapshots: tsx: 4.20.3 yaml: 2.9.0 - vite@7.3.3(@types/node@25.3.2)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): + vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -38795,32 +37383,32 @@ snapshots: optionalDependencies: '@types/node': 25.3.2 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 lightningcss: 1.32.0 sass: 1.89.2 terser: 5.48.0 tsx: 4.20.3 yaml: 2.9.0 - vite@7.3.3(@types/node@25.3.2)(jiti@2.7.0)(lightningcss@1.32.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): + vite@8.1.1(@types/node@22.19.19)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): dependencies: - esbuild: 0.27.7 - fdir: 6.5.0(picomatch@4.0.4) + lightningcss: 1.32.0 picomatch: 4.0.4 postcss: 8.5.16 - rollup: 4.60.4 - tinyglobby: 0.2.16 + rolldown: 1.1.3 + tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 25.3.2 + '@types/node': 22.19.19 + esbuild: 0.28.0 fsevents: 2.3.3 jiti: 2.7.0 - lightningcss: 1.32.0 sass: 1.89.2 terser: 5.48.0 tsx: 4.20.3 yaml: 2.9.0 + optional: true - vite@8.1.1(@types/node@22.19.19)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): + vite@8.1.1(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -38828,7 +37416,7 @@ snapshots: rolldown: 1.1.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 22.19.19 + '@types/node': 24.13.2 esbuild: 0.28.0 fsevents: 2.3.3 jiti: 2.7.0 @@ -38838,7 +37426,7 @@ snapshots: yaml: 2.9.0 optional: true - vite@8.1.1(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): + vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.6.1)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -38846,15 +37434,14 @@ snapshots: rolldown: 1.1.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.13.2 + '@types/node': 25.3.2 esbuild: 0.28.0 fsevents: 2.3.3 - jiti: 2.7.0 + jiti: 2.6.1 sass: 1.89.2 terser: 5.48.0 tsx: 4.20.3 yaml: 2.9.0 - optional: true vite@8.1.1(@types/node@25.3.2)(esbuild@0.28.0)(jiti@2.7.0)(sass@1.89.2)(terser@5.48.0)(tsx@4.20.3)(yaml@2.9.0): dependencies: @@ -39017,8 +37604,6 @@ snapshots: optionalDependencies: typescript: 5.9.3 - w3c-keyname@2.2.8: {} - w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 @@ -39412,13 +37997,6 @@ snapshots: zod@4.4.3: {} - zustand@4.5.7(@types/react@19.2.14)(react@19.2.3): - dependencies: - use-sync-external-store: 1.6.0(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - react: 19.2.3 - zustand@4.5.7(@types/react@19.2.14)(react@19.2.4): dependencies: use-sync-external-store: 1.6.0(react@19.2.4)