diff --git a/aisdk_client.ts b/aisdk_client.ts
new file mode 100644
index 0000000..b6f1d2e
--- /dev/null
+++ b/aisdk_client.ts
@@ -0,0 +1,130 @@
+/******************************************************************************
+ * YOU PROBABLY DON'T WANT TO BE USING THIS FILE DIRECTLY *
+ * INSTEAD, EDIT `stagehand.config.ts` TO MODIFY THE CLIENT CONFIGURATION *
+ ******************************************************************************/
+
+/**
+ * Welcome to the Stagehand Vercel AI SDK client!
+ *
+ * This is a client for OpenAI using Vercel AI SDK
+ * that allows you to create chat completions with Vercel AI SDK.
+ *
+ * To use this client, you need to have Vercel AI SDK installed and the appropriate environment variables set.
+ *
+ * ```bash
+ * npm install @vercel/ai
+ * ```
+ */
+
+import {
+ CoreAssistantMessage,
+ CoreMessage,
+ CoreSystemMessage,
+ CoreTool,
+ CoreUserMessage,
+ generateObject,
+ generateText,
+ ImagePart,
+ LanguageModel,
+ TextPart,
+} from "ai";
+import { ChatCompletion } from "openai/resources/chat/completions";
+import {
+ CreateChatCompletionOptions,
+ LLMClient,
+ AvailableModel,
+} from "@browserbasehq/stagehand";
+
+export class AISdkClient extends LLMClient {
+ public type = "aisdk" as const;
+ private model: LanguageModel;
+
+ constructor({ model }: { model: LanguageModel }) {
+ super(model.modelId as AvailableModel);
+ this.model = model;
+ }
+
+ async createChatCompletion({
+ options,
+ }: CreateChatCompletionOptions): Promise {
+ const formattedMessages: CoreMessage[] = options.messages.map((message) => {
+ if (Array.isArray(message.content)) {
+ if (message.role === "system") {
+ const systemMessage: CoreSystemMessage = {
+ role: "system",
+ content: message.content
+ .map((c) => ("text" in c ? c.text : ""))
+ .join("\n"),
+ };
+ return systemMessage;
+ }
+
+ const contentParts = message.content.map((content) => {
+ if ("image_url" in content) {
+ const imageContent: ImagePart = {
+ type: "image",
+ image: content.image_url.url,
+ };
+ return imageContent;
+ } else {
+ const textContent: TextPart = {
+ type: "text",
+ text: content.text,
+ };
+ return textContent;
+ }
+ });
+
+ if (message.role === "user") {
+ const userMessage: CoreUserMessage = {
+ role: "user",
+ content: contentParts,
+ };
+ return userMessage;
+ } else {
+ const textOnlyParts = contentParts.map((part) => ({
+ type: "text" as const,
+ text: part.type === "image" ? "[Image]" : part.text,
+ }));
+ const assistantMessage: CoreAssistantMessage = {
+ role: "assistant",
+ content: textOnlyParts,
+ };
+ return assistantMessage;
+ }
+ }
+
+ return {
+ role: message.role,
+ content: message.content,
+ };
+ });
+
+ if (options.response_model) {
+ const response = await generateObject({
+ model: this.model,
+ messages: formattedMessages,
+ schema: options.response_model.schema,
+ });
+
+ return response.object;
+ }
+
+ const tools: Record = {};
+
+ for (const rawTool of options.tools || []) {
+ tools[rawTool.name] = {
+ description: rawTool.description,
+ parameters: rawTool.parameters,
+ };
+ }
+
+ const response = await generateText({
+ model: this.model,
+ messages: formattedMessages,
+ tools,
+ });
+
+ return response as T;
+ }
+}
diff --git a/app/api/agent/route.ts b/app/api/agent/route.ts
index 0cffea9..943dcc7 100644
--- a/app/api/agent/route.ts
+++ b/app/api/agent/route.ts
@@ -1,10 +1,8 @@
-import { NextResponse } from 'next/server';
-import { openai } from "@ai-sdk/openai";
+import { NextResponse } from "next/server";
import { CoreMessage, generateObject, UserContent } from "ai";
import { z } from "zod";
-import { ObserveResult, Stagehand } from "@browserbasehq/stagehand";
-
-const LLMClient = openai("gpt-4o");
+import { ObserveResult, Page, Stagehand } from "@browserbasehq/stagehand";
+import StagehandConfig, { LLMClient } from "@/stagehand.config";
type Step = {
text: string;
@@ -19,13 +17,20 @@ async function runStagehand({
instruction,
}: {
sessionID: string;
- method: "GOTO" | "ACT" | "EXTRACT" | "CLOSE" | "SCREENSHOT" | "OBSERVE" | "WAIT" | "NAVBACK";
+ method:
+ | "GOTO"
+ | "ACT"
+ | "EXTRACT"
+ | "CLOSE"
+ | "SCREENSHOT"
+ | "OBSERVE"
+ | "WAIT"
+ | "NAVBACK";
instruction?: string;
}) {
const stagehand = new Stagehand({
+ ...StagehandConfig,
browserbaseSessionID: sessionID,
- env: "BROWSERBASE",
- logger: () => {},
});
await stagehand.init();
@@ -81,6 +86,62 @@ async function runStagehand({
}
}
+async function getSuggestions({
+ page,
+ goal,
+ stepInstruction,
+ previousSteps,
+}: {
+ page: Page;
+ goal?: string;
+ stepInstruction?: string;
+ previousSteps: {
+ method: string;
+ description: string;
+ result?: string;
+ }[];
+}) {
+ const suggestions = await page.observe(
+ `
+ ${goal ? `You are trying to achieve the following goal: "${goal}"` : ""}
+ ${
+ stepInstruction
+ ? `THE USER'S SPECIFIC STEP INSTRUCTION IS AS FOLLOWS: "${stepInstruction}"`
+ : ""
+ }
+ ${
+ previousSteps.length > 0
+ ? `THE PREVIOUS STEPS ARE AS FOLLOWS: ${previousSteps
+ .map(
+ (step, i) =>
+ `[${i + 1}] ${step.method.toUpperCase()}: ${step.description}`
+ )
+ .join("\n")}`
+ : ""
+ }
+ If there is data on the page, get the top 5 things that a user would want to do (take action) or read on this page, with the most likely first. Limit the suggestions to 5.
+ If the user is requesting text (NON-INTERACTABLE) information from the page, and you see the information in the current page, set the method to 'EXTRACT' and include the data
+ in the description. Make sure to select an element id pointing to the element to extract from, or its parent.
+ If the user wants to interact with an element on the page, or the page in general, such as clicking a button, filling a form, or typing into a search bar, DO NOT USE EXTRACT.
+ If the method is 'EXTRACT', set a description (think of it as an instruction) of the data to extract as the first argument. For the second argument, provide a JSON schema that matches the structure of the data to be extracted. The schema should be a valid JSON schema object with proper types and structure. THE JSON SCHEMA MUST BE A STRING. For example:
+ '{
+ "type": "object",
+ "properties": {
+ "title": { "type": "string" },
+ "description": { "type": "string" },
+ "items": {
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "required": ["title"]
+ }'
+ Do NOT include the result values in the argument, instead describe what the result should look like. Put the actual extracted values in the description.
+ Without a specific instruction, MAKE SURE to combine / alternate extract and non-extract suggestions such as click, fill, type, etc. DON'T PROVIDE ONLY ACT CALLS, COMBINE WITH EXTRACT. ON EXTRACT CALLS PROVIDE BOTH ARGUMENTS LIKE IN THE TEMPLATE: STICK TO ZOD SCHEMA AS A STRING. THE ZOD SCHEMA SHOULD BE AN OBJECT AT THE ROOT LEVEL, FOR EXAMPLE: '{"type": "object", "properties": {"example": {"type": "string"}}}. The first part of a zod schema should always be the object'`
+ );
+ return suggestions;
+}
+
async function sendPrompt({
goal,
sessionID,
@@ -96,21 +157,24 @@ async function sendPrompt({
try {
const stagehand = new Stagehand({
+ ...StagehandConfig,
browserbaseSessionID: sessionID,
- env: "BROWSERBASE"
});
await stagehand.init();
currentUrl = await stagehand.page.url();
await stagehand.close();
} catch (error) {
- console.error('Error getting page info:', error);
+ console.error("Error getting page info:", error);
}
const content: UserContent = [
{
type: "text",
- text: `Consider the following screenshot of a web page${currentUrl ? ` (URL: ${currentUrl})` : ''}, with the goal being "${goal}".
-${previousSteps.length > 0
+ text: `Consider the following screenshot of a web page${
+ currentUrl ? ` (URL: ${currentUrl})` : ""
+ }, with the goal being "${goal}".
+${
+ previousSteps.length > 0
? `Previous steps taken:
${previousSteps
.map(
@@ -141,7 +205,10 @@ If the goal has been achieved, return "close".`,
];
// Add screenshot if navigated to a page previously
- if (previousSteps.length > 0 && previousSteps.some((step) => step.tool === "GOTO")) {
+ if (
+ previousSteps.length > 0 &&
+ previousSteps.some((step) => step.tool === "GOTO")
+ ) {
content.push({
type: "image",
image: (await runStagehand({
@@ -193,32 +260,34 @@ If the goal has been achieved, return "close".`,
async function selectStartingUrl(goal: string) {
const message: CoreMessage = {
role: "user",
- content: [{
- type: "text",
- text: `Given the goal: "${goal}", determine the best URL to start from.
+ content: [
+ {
+ type: "text",
+ text: `Given the goal: "${goal}", determine the best URL to start from.
Choose from:
1. A relevant search engine (Google, Bing, etc.)
2. A direct URL if you're confident about the target website
3. Any other appropriate starting point
-Return a URL that would be most effective for achieving this goal.`
- }]
+Return a URL that would be most effective for achieving this goal.`,
+ },
+ ],
};
const result = await generateObject({
model: LLMClient,
schema: z.object({
url: z.string().url(),
- reasoning: z.string()
+ reasoning: z.string(),
}),
- messages: [message]
+ messages: [message],
});
return result.object;
}
export async function GET() {
- return NextResponse.json({ message: 'Agent API endpoint ready' });
+ return NextResponse.json({ message: "Agent API endpoint ready" });
}
export async function POST(request: Request) {
@@ -228,17 +297,17 @@ export async function POST(request: Request) {
if (!sessionId) {
return NextResponse.json(
- { error: 'Missing sessionId in request body' },
+ { error: "Missing sessionId in request body" },
{ status: 400 }
);
}
// Handle different action types
switch (action) {
- case 'START': {
+ case "START": {
if (!goal) {
return NextResponse.json(
- { error: 'Missing goal in request body' },
+ { error: "Missing goal in request body" },
{ status: 400 }
);
}
@@ -249,31 +318,52 @@ export async function POST(request: Request) {
text: `Navigating to ${url}`,
reasoning,
tool: "GOTO" as const,
- instruction: url
+ instruction: url,
};
-
+
await runStagehand({
sessionID: sessionId,
method: "GOTO",
- instruction: url
+ instruction: url,
});
- return NextResponse.json({
+ return NextResponse.json({
success: true,
result: firstStep,
steps: [firstStep],
- done: false
+ done: false,
});
}
- case 'GET_NEXT_STEP': {
+ case "GET_NEXT_STEP": {
if (!goal) {
return NextResponse.json(
- { error: 'Missing goal in request body' },
+ { error: "Missing goal in request body" },
{ status: 400 }
);
}
+ console.log("STARTING STAGEHAND");
+ const startTime = performance.now();
+ const stagehand = new Stagehand({
+ ...StagehandConfig,
+ browserbaseSessionID: sessionId,
+ });
+ await stagehand.init();
+ const suggestions = await getSuggestions({
+ page: stagehand.page,
+ goal,
+ previousSteps: previousSteps.map((step: Step) => ({
+ method: step.tool,
+ description: step.text,
+ })),
+ // previousExtraction: previousSteps.find(step => step.tool === "EXTRACT")?.result,
+ });
+ await stagehand.close();
+ const endTime = performance.now();
+ console.log(`Time taken: ${endTime - startTime}ms`);
+ console.log("SUGGESTIONS", suggestions);
+
// Get the next step from the LLM
const { result, previousSteps: newPreviousSteps } = await sendPrompt({
goal,
@@ -285,15 +375,15 @@ export async function POST(request: Request) {
success: true,
result,
steps: newPreviousSteps,
- done: result.tool === "CLOSE"
+ done: result.tool === "CLOSE",
});
}
- case 'EXECUTE_STEP': {
+ case "EXECUTE_STEP": {
const { step } = body;
if (!step) {
return NextResponse.json(
- { error: 'Missing step in request body' },
+ { error: "Missing step in request body" },
{ status: 400 }
);
}
@@ -308,21 +398,21 @@ export async function POST(request: Request) {
return NextResponse.json({
success: true,
extraction,
- done: step.tool === "CLOSE"
+ done: step.tool === "CLOSE",
});
}
default:
return NextResponse.json(
- { error: 'Invalid action type' },
+ { error: "Invalid action type" },
{ status: 400 }
);
}
} catch (error) {
- console.error('Error in agent endpoint:', error);
+ console.error("Error in agent endpoint:", error);
return NextResponse.json(
- { success: false, error: 'Failed to process request' },
+ { success: false, error: "Failed to process request" },
{ status: 500 }
);
}
-}
\ No newline at end of file
+}
diff --git a/app/components/ChatFeed.tsx b/app/components/ChatFeed.tsx
index 10b5323..203e14a 100644
--- a/app/components/ChatFeed.tsx
+++ b/app/components/ChatFeed.tsx
@@ -32,7 +32,6 @@ export default function ChatFeed({ initialMessage, onClose }: ChatFeedProps) {
const [isLoading, setIsLoading] = useState(false);
const { width } = useWindowSize();
const isMobile = width ? width < 768 : false;
- const initializationRef = useRef(false);
const chatContainerRef = useRef(null);
const [isAgentFinished, setIsAgentFinished] = useState(false);
const [contextId, setContextId] = useAtom(contextIdAtom);
@@ -53,6 +52,11 @@ export default function ChatFeed({ initialMessage, onClose }: ChatFeedProps) {
steps: [],
});
+ const [canStart, setCanStart] = useState(true);
+
+ // Add new state for controlling next step button
+ const [canExecuteNextStep, setCanExecuteNextStep] = useState(false);
+
const scrollToBottom = useCallback(() => {
if (chatContainerRef.current) {
chatContainerRef.current.scrollTop =
@@ -82,173 +86,175 @@ export default function ChatFeed({ initialMessage, onClose }: ChatFeedProps) {
scrollToBottom();
}, [uiState.steps, scrollToBottom]);
- useEffect(() => {
- console.log("useEffect called");
- const initializeSession = async () => {
- if (initializationRef.current) return;
- initializationRef.current = true;
-
- if (initialMessage && !agentStateRef.current.sessionId) {
- setIsLoading(true);
- try {
- const sessionResponse = await fetch("/api/session", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
- contextId: contextId,
- }),
- });
- const sessionData = await sessionResponse.json();
-
- if (!sessionData.success) {
- throw new Error(sessionData.error || "Failed to create session");
- }
-
- setContextId(sessionData.contextId);
-
- agentStateRef.current = {
- ...agentStateRef.current,
- sessionId: sessionData.sessionId,
- sessionUrl: sessionData.sessionUrl.replace(
- "https://www.browserbase.com/devtools-fullscreen/inspector.html",
- "https://www.browserbase.com/devtools-internal-compiled/index.html"
- ),
- };
-
- setUiState({
- sessionId: sessionData.sessionId,
- sessionUrl: sessionData.sessionUrl.replace(
- "https://www.browserbase.com/devtools-fullscreen/inspector.html",
- "https://www.browserbase.com/devtools-internal-compiled/index.html"
- ),
- steps: [],
- });
-
- const response = await fetch("/api/agent", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- goal: initialMessage,
- sessionId: sessionData.sessionId,
- action: "START",
- }),
- });
-
- const data = await response.json();
- posthog.capture("agent_start", {
- goal: initialMessage,
- sessionId: sessionData.sessionId,
- contextId: sessionData.contextId,
- });
-
- if (data.success) {
- const newStep = {
- text: data.result.text,
- reasoning: data.result.reasoning,
- tool: data.result.tool,
- instruction: data.result.instruction,
- stepNumber: 1,
- };
-
- agentStateRef.current = {
- ...agentStateRef.current,
- steps: [newStep],
- };
-
- setUiState((prev) => ({
- ...prev,
- steps: [newStep],
- }));
-
- // Continue with subsequent steps
- while (true) {
- // Get next step from LLM
- const nextStepResponse = await fetch("/api/agent", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- goal: initialMessage,
- sessionId: sessionData.sessionId,
- previousSteps: agentStateRef.current.steps,
- action: "GET_NEXT_STEP",
- }),
- });
-
- const nextStepData = await nextStepResponse.json();
-
- if (!nextStepData.success) {
- throw new Error("Failed to get next step");
- }
-
- // Add the next step to UI immediately after receiving it
- const nextStep = {
- ...nextStepData.result,
- stepNumber: agentStateRef.current.steps.length + 1,
- };
-
- agentStateRef.current = {
- ...agentStateRef.current,
- steps: [...agentStateRef.current.steps, nextStep],
- };
-
- setUiState((prev) => ({
- ...prev,
- steps: agentStateRef.current.steps,
- }));
-
- // Break after adding the CLOSE step to UI
- if (nextStepData.done || nextStepData.result.tool === "CLOSE") {
- break;
- }
-
- // Execute the step
- const executeResponse = await fetch("/api/agent", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- sessionId: sessionData.sessionId,
- step: nextStepData.result,
- action: "EXECUTE_STEP",
- }),
- });
-
- const executeData = await executeResponse.json();
-
- posthog.capture("agent_execute_step", {
- goal: initialMessage,
- sessionId: sessionData.sessionId,
- contextId: sessionData.contextId,
- step: nextStepData.result,
- });
-
- if (!executeData.success) {
- throw new Error("Failed to execute step");
- }
-
- if (executeData.done) {
- break;
- }
- }
- }
- } catch (error) {
- console.error("Session initialization error:", error);
- } finally {
- setIsLoading(false);
- }
+ const handleStartAgent = async () => {
+ if (!initialMessage || !canStart) return;
+ setCanStart(false);
+ setIsLoading(true);
+
+ try {
+ const sessionResponse = await fetch("/api/session", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
+ contextId: contextId,
+ }),
+ });
+ const sessionData = await sessionResponse.json();
+
+ if (!sessionData.success) {
+ throw new Error(sessionData.error || "Failed to create session");
}
- };
- initializeSession();
- }, [initialMessage]);
+ setContextId(sessionData.contextId);
+
+ agentStateRef.current = {
+ ...agentStateRef.current,
+ sessionId: sessionData.sessionId,
+ sessionUrl: sessionData.sessionUrl.replace(
+ "https://www.browserbase.com/devtools-fullscreen/inspector.html",
+ "https://www.browserbase.com/devtools-internal-compiled/index.html"
+ ),
+ };
+
+ setUiState({
+ sessionId: sessionData.sessionId,
+ sessionUrl: sessionData.sessionUrl.replace(
+ "https://www.browserbase.com/devtools-fullscreen/inspector.html",
+ "https://www.browserbase.com/devtools-internal-compiled/index.html"
+ ),
+ steps: [],
+ });
+
+ const response = await fetch("/api/agent", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ goal: initialMessage,
+ sessionId: sessionData.sessionId,
+ action: "START",
+ }),
+ });
+
+ const data = await response.json();
+ posthog.capture("agent_start", {
+ goal: initialMessage,
+ sessionId: sessionData.sessionId,
+ contextId: sessionData.contextId,
+ });
+
+ if (data.success) {
+ const newStep = {
+ text: data.result.text,
+ reasoning: data.result.reasoning,
+ tool: data.result.tool,
+ instruction: data.result.instruction,
+ stepNumber: 1,
+ };
+
+ agentStateRef.current = {
+ ...agentStateRef.current,
+ steps: [newStep],
+ };
+
+ setUiState((prev) => ({
+ ...prev,
+ steps: [newStep],
+ }));
+
+ // Enable the next step button
+ setCanExecuteNextStep(true);
+ }
+ } catch (error) {
+ console.error("Session initialization error:", error);
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ // Add new handler for next step
+ const handleNextStep = async () => {
+ setIsLoading(true);
+ setCanExecuteNextStep(false);
+
+ try {
+ // Get next step from LLM
+ const nextStepResponse = await fetch("/api/agent", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ goal: initialMessage,
+ sessionId: uiState.sessionId,
+ previousSteps: agentStateRef.current.steps,
+ action: "GET_NEXT_STEP",
+ }),
+ });
+
+ const nextStepData = await nextStepResponse.json();
+
+ if (!nextStepData.success) {
+ throw new Error("Failed to get next step");
+ }
+
+ // Add the next step to UI
+ const nextStep = {
+ ...nextStepData.result,
+ stepNumber: agentStateRef.current.steps.length + 1,
+ };
+
+ agentStateRef.current = {
+ ...agentStateRef.current,
+ steps: [...agentStateRef.current.steps, nextStep],
+ };
+
+ setUiState((prev) => ({
+ ...prev,
+ steps: agentStateRef.current.steps,
+ }));
+
+ // If not done, execute the step
+ if (!nextStepData.done && nextStepData.result.tool !== "CLOSE") {
+ const executeResponse = await fetch("/api/agent", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ sessionId: uiState.sessionId,
+ step: nextStepData.result,
+ action: "EXECUTE_STEP",
+ }),
+ });
+
+ const executeData = await executeResponse.json();
+
+ posthog.capture("agent_execute_step", {
+ goal: initialMessage,
+ sessionId: uiState.sessionId,
+ contextId: contextId,
+ step: nextStepData.result,
+ });
+
+ if (!executeData.success) {
+ throw new Error("Failed to execute step");
+ }
+
+ if (!executeData.done) {
+ setCanExecuteNextStep(true);
+ }
+ }
+ } catch (error) {
+ console.error("Error executing next step:", error);
+ } finally {
+ setIsLoading(false);
+ }
+ };
// Spring configuration for smoother animations
const springConfig = {
@@ -388,6 +394,16 @@ export default function ChatFeed({ initialMessage, onClose }: ChatFeedProps) {
>
Goal:
{initialMessage}
+ {canStart && (
+
+ Start Agent
+
+ )}
)}
@@ -412,6 +428,18 @@ export default function ChatFeed({ initialMessage, onClose }: ChatFeedProps) {
))}
+
+ {canExecuteNextStep && !isLoading && (
+
+ Next Step
+
+ )}
+
{isLoading && (
=18'}
peerDependencies:
zod: ^3.0.0
- '@ai-sdk/provider-utils@2.1.2':
- resolution: {integrity: sha512-ezpQT6kzy/2O4yyn/2YigMqynBYjZIOam3/EMNVzju+Ogj+Z+pf27c/Th78ce0A2ltgrXx6xN14sal/HHZNOOw==}
+ '@ai-sdk/groq@1.1.11':
+ resolution: {integrity: sha512-Y5WUyWuxkQarl4AVGeIMbNSp4/XiwW/mxp9SKeagfDhflVnQHd2ggISVD6HiOBQhznusITjWYYC66DJeBn0v6A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.0.0
+
+ '@ai-sdk/openai-compatible@0.1.12':
+ resolution: {integrity: sha512-2bMhAEeiRz4lbW5ixjGjbPhwyqjtujkjLVpqqtqWvvUDvtUM3cw1go9pqWFgaNKSBDaXRUfi8mkAVrn1yRuY2A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.0.0
+
+ '@ai-sdk/openai@1.1.14':
+ resolution: {integrity: sha512-r5oD+Sz7z8kfxnXfqR53fYQ1xbT/BeUGhQ26FWzs5gO4j52pGUpzCt0SBm3SH1ZSjFY5O/zoKRnsbrPeBe1sNA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.0.0
+
+ '@ai-sdk/provider-utils@2.1.10':
+ resolution: {integrity: sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
@@ -108,12 +138,12 @@ packages:
zod:
optional: true
- '@ai-sdk/provider@1.0.6':
- resolution: {integrity: sha512-hwj/gFNxpDgEfTaYzCYoslmw01IY9kWLKl/wf8xuPvHtQIzlfXWmmUwc8PnCwxyt8cKzIuV0dfUghCf68HQ0SA==}
+ '@ai-sdk/provider@1.0.9':
+ resolution: {integrity: sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA==}
engines: {node: '>=18'}
- '@ai-sdk/react@1.1.2':
- resolution: {integrity: sha512-bBcRsDaNHzCKSIBbPngMeqbnwZ1RFadXQo9XzHoGrvLANYRwuphGNB8XTXYVLC/eXjoaGVGw2wWf/TYigEnCuA==}
+ '@ai-sdk/react@1.1.18':
+ resolution: {integrity: sha512-2wlWug6NVAc8zh3pgqtvwPkSNTdA6Q4x9CmrNXCeHcXfJkJ+MuHFQz/I7Wb7mLRajf0DAxsFLIhHyBCEuTkDNw==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
@@ -124,8 +154,8 @@ packages:
zod:
optional: true
- '@ai-sdk/ui-utils@1.1.2':
- resolution: {integrity: sha512-+0kfBF4Y9jmlg1KlbNKIxchmXx9PzuReSpgRNWhpU10vfl1eeer4xK/XL2qHnzAWhsMFe/SVZXJIQObk44zNEQ==}
+ '@ai-sdk/ui-utils@1.1.16':
+ resolution: {integrity: sha512-jfblR2yZVISmNK2zyNzJZFtkgX57WDAUQXcmn3XUBJyo8LFsADu+/vYMn5AOyBi9qJT0RBk11PEtIxIqvByw3Q==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
@@ -140,11 +170,11 @@ packages:
'@anthropic-ai/sdk@0.27.3':
resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==}
- '@browserbasehq/sdk@2.0.0':
- resolution: {integrity: sha512-BdPlZyn0dpXlL70gNK4acpqWIRB+edo2z0/GalQdWghRq8iQjySd9fVIF3evKH1p2wCYekZJRK6tm29YfXB67g==}
+ '@browserbasehq/sdk@2.3.0':
+ resolution: {integrity: sha512-H2nu46C6ydWgHY+7yqaP8qpfRJMJFVGxVIgsuHe1cx9HkfJHqzkuIqaK/k8mU4ZeavQgV5ZrJa0UX6MDGYiT4w==}
- '@browserbasehq/stagehand@1.10.1':
- resolution: {integrity: sha512-A222TCseFvKNvBwav7ZrZmug0JnYvy1vFI1ReNOtcymjhrZQLfklq1gm/luUjr8aRTbTzsUV8iclt5r0kyaXbA==}
+ '@browserbasehq/stagehand@1.13.1':
+ resolution: {integrity: sha512-sty9bDiuuQJDOS+/uBfXpwYQY+mhFyqi6uT5wSOrazagZ5s8tgk3ryCIheB/BGS5iisc6ivAsKe9aC9n5WBTAg==}
peerDependencies:
'@playwright/test': ^1.42.1
deepmerge: ^4.3.1
@@ -165,28 +195,28 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/config-array@0.19.1':
- resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
+ '@eslint/config-array@0.19.2':
+ resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.10.0':
- resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==}
+ '@eslint/core@0.12.0':
+ resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/eslintrc@3.2.0':
- resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
+ '@eslint/eslintrc@3.3.0':
+ resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.18.0':
- resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==}
+ '@eslint/js@9.21.0':
+ resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/object-schema@2.1.5':
- resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
+ '@eslint/object-schema@2.1.6':
+ resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.2.5':
- resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==}
+ '@eslint/plugin-kit@0.2.7':
+ resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@humanfs/core@0.19.1':
@@ -205,8 +235,8 @@ packages:
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
- '@humanwhocodes/retry@0.4.1':
- resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
+ '@humanwhocodes/retry@0.4.2':
+ resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
engines: {node: '>=18.18'}
'@img/sharp-darwin-arm64@0.33.5':
@@ -414,11 +444,14 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@playwright/test@1.50.0':
- resolution: {integrity: sha512-ZGNXbt+d65EGjBORQHuYKj+XhCewlwpnSd/EDuLPZGSiEWmgOJB5RmMCCYGy5aMfTs9wx61RivfDKi8H/hcMvw==}
+ '@playwright/test@1.50.1':
+ resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==}
engines: {node: '>=18'}
hasBin: true
+ '@rrweb/types@2.0.0-alpha.17':
+ resolution: {integrity: sha512-AfDTVUuCyCaIG0lTSqYtrZqJX39ZEYzs4fYKnexhQ+id+kbZIpIJtaut5cto6dWZbB3SEe4fW0o90Po3LvTmfg==}
+
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
@@ -446,69 +479,69 @@ packages:
'@types/node-fetch@2.6.12':
resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==}
- '@types/node@18.19.74':
- resolution: {integrity: sha512-HMwEkkifei3L605gFdV+/UwtpxP6JSzM+xFk2Ia6DNFSwSVBRh9qp5Tgf4lNFOMfPVuU0WnkcWpXZpgn5ufO4A==}
+ '@types/node@18.19.76':
+ resolution: {integrity: sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw==}
- '@types/node@20.17.16':
- resolution: {integrity: sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==}
+ '@types/node@20.17.19':
+ resolution: {integrity: sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==}
- '@types/react-dom@19.0.3':
- resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==}
+ '@types/react-dom@19.0.4':
+ resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==}
peerDependencies:
'@types/react': ^19.0.0
- '@types/react@19.0.8':
- resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==}
+ '@types/react@19.0.10':
+ resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==}
- '@typescript-eslint/eslint-plugin@8.21.0':
- resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==}
+ '@typescript-eslint/eslint-plugin@8.25.0':
+ resolution: {integrity: sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/parser@8.21.0':
- resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==}
+ '@typescript-eslint/parser@8.25.0':
+ resolution: {integrity: sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/scope-manager@8.21.0':
- resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==}
+ '@typescript-eslint/scope-manager@8.25.0':
+ resolution: {integrity: sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/type-utils@8.21.0':
- resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==}
+ '@typescript-eslint/type-utils@8.25.0':
+ resolution: {integrity: sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/types@8.21.0':
- resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==}
+ '@typescript-eslint/types@8.25.0':
+ resolution: {integrity: sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.21.0':
- resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==}
+ '@typescript-eslint/typescript-estree@8.25.0':
+ resolution: {integrity: sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/utils@8.21.0':
- resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==}
+ '@typescript-eslint/utils@8.25.0':
+ resolution: {integrity: sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/visitor-keys@8.21.0':
- resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==}
+ '@typescript-eslint/visitor-keys@8.25.0':
+ resolution: {integrity: sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@vercel/analytics@1.4.1':
- resolution: {integrity: sha512-ekpL4ReX2TH3LnrRZTUKjHHNpNy9S1I7QmS+g/RQXoSUQ8ienzosuX7T9djZ/s8zPhBx1mpHP/Rw5875N+zQIQ==}
+ '@vercel/analytics@1.5.0':
+ resolution: {integrity: sha512-MYsBzfPki4gthY5HnYN7jgInhAZ7Ac1cYDoRWFomwGHWEX7odTEzbtg9kf/QSo7XEsEAqlQugA6gJ2WS2DEa3g==}
peerDependencies:
'@remix-run/react': ^2
'@sveltejs/kit': ^1 || ^2
@@ -551,8 +584,8 @@ packages:
resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
engines: {node: '>= 8.0.0'}
- ai@4.1.2:
- resolution: {integrity: sha512-11efhPorWFphIpeCgjW6r/jk4wB5RWUGjxayHblBXCq6YEc7o5ki7vlmSnESprsDkMEfmONBWb/xM8pWjR5O2g==}
+ ai@4.1.46:
+ resolution: {integrity: sha512-VTvAktT69IN1qcNAv7OlcOuR0q4HqUlhkVacrWmMlEoprYykF9EL5RY8IECD5d036Wqg0walwbSKZlA2noHm1A==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
@@ -674,8 +707,8 @@ packages:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
- call-bind-apply-helpers@1.0.1:
- resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
call-bind@1.0.8:
@@ -694,8 +727,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
- caniuse-lite@1.0.30001695:
- resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==}
+ caniuse-lite@1.0.30001700:
+ resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -841,8 +874,8 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- enhanced-resolve@5.18.0:
- resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==}
+ enhanced-resolve@5.18.1:
+ resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
engines: {node: '>=10.13.0'}
es-abstract@1.23.9:
@@ -869,8 +902,9 @@ packages:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- es-shim-unscopables@1.0.2:
- resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+ es-shim-unscopables@1.1.0:
+ resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
+ engines: {node: '>= 0.4'}
es-to-primitive@1.3.0:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
@@ -892,8 +926,8 @@ packages:
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- eslint-import-resolver-typescript@3.7.0:
- resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==}
+ eslint-import-resolver-typescript@3.8.3:
+ resolution: {integrity: sha512-A0bu4Ks2QqDWNpeEgTQMPTngaMhuDu4yv6xpftBMAf+1ziXnpx+eSR1WRfoPTe2BAiAjHFZ7kSNx1fvr5g5pmQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -966,8 +1000,8 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.18.0:
- resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==}
+ eslint@9.21.0:
+ resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -1021,8 +1055,16 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fastq@1.18.0:
- resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==}
+ fastq@1.19.0:
+ resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
+
+ fdir@6.4.3:
+ resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
fflate@0.4.8:
resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==}
@@ -1043,21 +1085,22 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
- flatted@3.3.2:
- resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
- for-each@0.3.3:
- resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
- foreground-child@3.3.0:
- resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
form-data-encoder@1.7.2:
resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
- form-data@4.0.1:
- resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
+ form-data@4.0.2:
+ resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
engines: {node: '>= 6'}
formdata-node@4.4.1:
@@ -1078,8 +1121,8 @@ packages:
react-dom:
optional: true
- framer-motion@12.0.3:
- resolution: {integrity: sha512-5yy1sAqOjBUo+8O+kOa6/rIJ1AQLME8vEpUwwMf9Gv6YktaeeTd4bf0sb89AWwDVX7GwwuLebH94bakGOqWQ/g==}
+ framer-motion@12.4.7:
+ resolution: {integrity: sha512-VhrcbtcAMXfxlrjeHPpWVu2+mkcoR31e02aNSR7OUS/hZAciKa8q6o3YN2mA1h+jjscRsSyKvX6E1CiY/7OLMw==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -1112,8 +1155,8 @@ packages:
functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
- get-intrinsic@1.2.7:
- resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
get-proto@1.0.1:
@@ -1191,8 +1234,8 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
- import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
imurmurhash@0.1.4:
@@ -1222,8 +1265,8 @@ packages:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
- is-boolean-object@1.2.1:
- resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==}
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
is-bun-module@1.3.0:
@@ -1305,8 +1348,8 @@ packages:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
- is-weakref@1.1.0:
- resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==}
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
engines: {node: '>= 0.4'}
is-weakset@2.0.4:
@@ -1330,8 +1373,8 @@ packages:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
hasBin: true
- jotai@2.11.1:
- resolution: {integrity: sha512-41Su098mpHIX29hF/XOpDb0SqF6EES7+HXfrhuBqVSzRkxX48hD5i8nGsEewWZNAsBWJCTTmuz8M946Ih2PfcQ==}
+ jotai@2.12.1:
+ resolution: {integrity: sha512-VUW0nMPYIru5g89tdxwr9ftiVdc/nGV9jvHISN8Ucx+m1vI9dBeHemfqYzEuw5XSkmYjD/MEyApN9k6yrATsZQ==}
engines: {node: '>=12.20.0'}
peerDependencies:
'@types/react': '>=17.0.0'
@@ -1449,8 +1492,8 @@ packages:
motion-dom@11.18.1:
resolution: {integrity: sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==}
- motion-dom@12.0.0:
- resolution: {integrity: sha512-CvYd15OeIR6kHgMdonCc1ihsaUG4MYh/wrkz8gZ3hBX/uamyZCXN9S9qJoYF03GqfTt7thTV/dxnHYX4+55vDg==}
+ motion-dom@12.4.5:
+ resolution: {integrity: sha512-Q2xmhuyYug1CGTo0jdsL05EQ4RhIYXlggFS/yPhQQRNzbrhjKQ1tbjThx5Plv68aX31LsUQRq4uIkuDxdO5vRQ==}
motion-utils@11.18.1:
resolution: {integrity: sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==}
@@ -1458,8 +1501,8 @@ packages:
motion-utils@12.0.0:
resolution: {integrity: sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA==}
- motion@12.0.3:
- resolution: {integrity: sha512-YGSC4jLQMmfIKafDHeK3E50hKF2YjGlrVuM94dwvT9IlSaIaoGe+K21G16TM9weIxjIEYc5l5mzYhuXXi1UN1A==}
+ motion@12.4.7:
+ resolution: {integrity: sha512-mhegHAbf1r80fr+ytC6OkjKvIUegRNXKLWNPrCN2+GnixlNSPwT03FtKqp9oDny1kNcLWZvwbmEr+JqVryFrcg==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -1532,8 +1575,8 @@ packages:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
- object-inspect@1.13.3:
- resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==}
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
object-keys@1.1.1:
@@ -1560,8 +1603,8 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
- openai@4.80.0:
- resolution: {integrity: sha512-5TqdNQgjOMxo3CkCvtjzuSwuznO/o3q5aak0MTy6IjRvPtvVA1wAFGJU3eZT1JHzhs2wFb/xtDG0o6Y/2KGCfw==}
+ openai@4.85.4:
+ resolution: {integrity: sha512-Nki51PBSu+Aryo7WKbdXvfm0X/iKkQS2fq3O0Uqb/O3b4exOZFid2te1BZ52bbO5UwxQZ5eeHJDCTqtrJLPw0w==}
hasBin: true
peerDependencies:
ws: ^8.18.0
@@ -1617,6 +1660,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
@@ -1625,18 +1672,18 @@ packages:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
- playwright-core@1.50.0:
- resolution: {integrity: sha512-CXkSSlr4JaZs2tZHI40DsZUN/NIwgaUPsyLuOAaIZp2CyF2sN5MM5NJsyB188lFSSozFxQ5fPT4qM+f0tH/6wQ==}
+ playwright-core@1.50.1:
+ resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==}
engines: {node: '>=18'}
hasBin: true
- playwright@1.50.0:
- resolution: {integrity: sha512-+GinGfGTrd2IfX1TA4N2gNmeIksSb+IAe589ZH+FlmpV3MYTx6+buChGIuDLQwrGNCw2lWibqV50fU510N7S+w==}
+ playwright@1.50.1:
+ resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==}
engines: {node: '>=18'}
hasBin: true
- possible-typed-array-names@1.0.0:
- resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
postcss-import@15.1.0:
@@ -1680,15 +1727,17 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
- postcss@8.5.1:
- resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
+ postcss@8.5.3:
+ resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
- posthog-js@1.209.3:
- resolution: {integrity: sha512-Q1VRWWfJ+k2lKV9UXBhyd5JkUJ+nf3LZHqvGF10XfC/jI/IEM1YgVXhbtMSo8cEgRJl7H+aFafoNcu82yNz0zw==}
+ posthog-js@1.223.4:
+ resolution: {integrity: sha512-dDyUcWJ+6gzaaVS0Ekjot30BeWb5EiWiU+RFI59/2PDoHsjcZ2RPyCb/TRh9b06WvNqJWvck7GdUJwwjhkSzRw==}
+ peerDependencies:
+ '@rrweb/types': 2.0.0-alpha.17
- preact@10.25.4:
- resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==}
+ preact@10.26.2:
+ resolution: {integrity: sha512-0gNmv4qpS9HaN3+40CLBAnKe0ZfyE4ZWo5xKlC1rVrr0ckkEvJvAQqKaHANdFKsGstoxrY4AItZ7kZSGVoVjgg==}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
@@ -1747,10 +1796,13 @@ packages:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
- reusify@1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rrweb-snapshot@2.0.0-alpha.18:
+ resolution: {integrity: sha512-hBHZL/NfgQX6wO1D9mpwqFu1NJPpim+moIcKhFEjVTZVRUfCln+LOugRc4teVTCISYHN8Cw5e2iNTWCSm+SkoA==}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -1776,8 +1828,8 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- semver@7.6.3:
- resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ semver@7.7.1:
+ resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
engines: {node: '>=10'}
hasBin: true
@@ -1912,8 +1964,8 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- swr@2.3.0:
- resolution: {integrity: sha512-NyZ76wA4yElZWBHzSgEJc28a0u6QZvhb6w0azeL2k7+Q1gAzVK+IqQYXhVOC/mzi+HZIozrZvBVeSeOZNR2bqA==}
+ swr@2.3.2:
+ resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==}
peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -1937,6 +1989,10 @@ packages:
resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==}
engines: {node: '>=18'}
+ tinyglobby@0.2.12:
+ resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
+ engines: {node: '>=12.0.0'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -1944,8 +2000,8 @@ packages:
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- ts-api-utils@2.0.0:
- resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==}
+ ts-api-utils@2.0.1:
+ resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
@@ -2057,8 +2113,8 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
- ws@8.18.0:
- resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ ws@8.18.1:
+ resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -2078,58 +2134,77 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- zod-to-json-schema@3.24.1:
- resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==}
+ zod-to-json-schema@3.24.3:
+ resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==}
peerDependencies:
zod: ^3.24.1
- zod@3.24.1:
- resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==}
+ zod@3.24.2:
+ resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==}
snapshots:
- '@ai-sdk/openai@1.1.2(zod@3.24.1)':
+ '@ai-sdk/cerebras@0.1.12(zod@3.24.2)':
+ dependencies:
+ '@ai-sdk/openai-compatible': 0.1.12(zod@3.24.2)
+ '@ai-sdk/provider': 1.0.9
+ '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2)
+ zod: 3.24.2
+
+ '@ai-sdk/groq@1.1.11(zod@3.24.2)':
+ dependencies:
+ '@ai-sdk/provider': 1.0.9
+ '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2)
+ zod: 3.24.2
+
+ '@ai-sdk/openai-compatible@0.1.12(zod@3.24.2)':
dependencies:
- '@ai-sdk/provider': 1.0.6
- '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1)
- zod: 3.24.1
+ '@ai-sdk/provider': 1.0.9
+ '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2)
+ zod: 3.24.2
- '@ai-sdk/provider-utils@2.1.2(zod@3.24.1)':
+ '@ai-sdk/openai@1.1.14(zod@3.24.2)':
dependencies:
- '@ai-sdk/provider': 1.0.6
+ '@ai-sdk/provider': 1.0.9
+ '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2)
+ zod: 3.24.2
+
+ '@ai-sdk/provider-utils@2.1.10(zod@3.24.2)':
+ dependencies:
+ '@ai-sdk/provider': 1.0.9
eventsource-parser: 3.0.0
nanoid: 3.3.8
secure-json-parse: 2.7.0
optionalDependencies:
- zod: 3.24.1
+ zod: 3.24.2
- '@ai-sdk/provider@1.0.6':
+ '@ai-sdk/provider@1.0.9':
dependencies:
json-schema: 0.4.0
- '@ai-sdk/react@1.1.2(react@19.0.0)(zod@3.24.1)':
+ '@ai-sdk/react@1.1.18(react@19.0.0)(zod@3.24.2)':
dependencies:
- '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1)
- '@ai-sdk/ui-utils': 1.1.2(zod@3.24.1)
- swr: 2.3.0(react@19.0.0)
+ '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2)
+ '@ai-sdk/ui-utils': 1.1.16(zod@3.24.2)
+ swr: 2.3.2(react@19.0.0)
throttleit: 2.1.0
optionalDependencies:
react: 19.0.0
- zod: 3.24.1
+ zod: 3.24.2
- '@ai-sdk/ui-utils@1.1.2(zod@3.24.1)':
+ '@ai-sdk/ui-utils@1.1.16(zod@3.24.2)':
dependencies:
- '@ai-sdk/provider': 1.0.6
- '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1)
- zod-to-json-schema: 3.24.1(zod@3.24.1)
+ '@ai-sdk/provider': 1.0.9
+ '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2)
+ zod-to-json-schema: 3.24.3(zod@3.24.2)
optionalDependencies:
- zod: 3.24.1
+ zod: 3.24.2
'@alloc/quick-lru@5.2.0': {}
'@anthropic-ai/sdk@0.27.3':
dependencies:
- '@types/node': 18.19.74
+ '@types/node': 18.19.76
'@types/node-fetch': 2.6.12
abort-controller: 3.0.0
agentkeepalive: 4.6.0
@@ -2139,9 +2214,9 @@ snapshots:
transitivePeerDependencies:
- encoding
- '@browserbasehq/sdk@2.0.0':
+ '@browserbasehq/sdk@2.3.0':
dependencies:
- '@types/node': 18.19.74
+ '@types/node': 18.19.76
'@types/node-fetch': 2.6.12
abort-controller: 3.0.0
agentkeepalive: 4.6.0
@@ -2151,18 +2226,17 @@ snapshots:
transitivePeerDependencies:
- encoding
- '@browserbasehq/stagehand@1.10.1(@playwright/test@1.50.0)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.80.0(ws@8.18.0)(zod@3.24.1))(zod@3.24.1)':
+ '@browserbasehq/stagehand@1.13.1(@playwright/test@1.50.1)(deepmerge@4.3.1)(dotenv@16.4.7)(openai@4.85.4(ws@8.18.1)(zod@3.24.2))(zod@3.24.2)':
dependencies:
'@anthropic-ai/sdk': 0.27.3
- '@browserbasehq/sdk': 2.0.0
- '@playwright/test': 1.50.0
+ '@browserbasehq/sdk': 2.3.0
+ '@playwright/test': 1.50.1
deepmerge: 4.3.1
dotenv: 16.4.7
- openai: 4.80.0(ws@8.18.0)(zod@3.24.1)
- sharp: 0.33.5
- ws: 8.18.0
- zod: 3.24.1
- zod-to-json-schema: 3.24.1(zod@3.24.1)
+ openai: 4.85.4(ws@8.18.1)(zod@3.24.2)
+ ws: 8.18.1
+ zod: 3.24.2
+ zod-to-json-schema: 3.24.3(zod@3.24.2)
transitivePeerDependencies:
- bufferutil
- encoding
@@ -2173,46 +2247,46 @@ snapshots:
tslib: 2.8.1
optional: true
- '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0(jiti@1.21.7))':
+ '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@1.21.7))':
dependencies:
- eslint: 9.18.0(jiti@1.21.7)
+ eslint: 9.21.0(jiti@1.21.7)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/config-array@0.19.1':
+ '@eslint/config-array@0.19.2':
dependencies:
- '@eslint/object-schema': 2.1.5
+ '@eslint/object-schema': 2.1.6
debug: 4.4.0
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
- '@eslint/core@0.10.0':
+ '@eslint/core@0.12.0':
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/eslintrc@3.2.0':
+ '@eslint/eslintrc@3.3.0':
dependencies:
ajv: 6.12.6
debug: 4.4.0
espree: 10.3.0
globals: 14.0.0
ignore: 5.3.2
- import-fresh: 3.3.0
+ import-fresh: 3.3.1
js-yaml: 4.1.0
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.18.0': {}
+ '@eslint/js@9.21.0': {}
- '@eslint/object-schema@2.1.5': {}
+ '@eslint/object-schema@2.1.6': {}
- '@eslint/plugin-kit@0.2.5':
+ '@eslint/plugin-kit@0.2.7':
dependencies:
- '@eslint/core': 0.10.0
+ '@eslint/core': 0.12.0
levn: 0.4.1
'@humanfs/core@0.19.1': {}
@@ -2226,7 +2300,7 @@ snapshots:
'@humanwhocodes/retry@0.3.1': {}
- '@humanwhocodes/retry@0.4.1': {}
+ '@humanwhocodes/retry@0.4.2': {}
'@img/sharp-darwin-arm64@0.33.5':
optionalDependencies:
@@ -2369,7 +2443,7 @@ snapshots:
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
- fastq: 1.18.0
+ fastq: 1.19.0
'@nolyfill/is-core-module@1.0.39': {}
@@ -2378,9 +2452,13 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
- '@playwright/test@1.50.0':
+ '@playwright/test@1.50.1':
+ dependencies:
+ playwright: 1.50.1
+
+ '@rrweb/types@2.0.0-alpha.17':
dependencies:
- playwright: 1.50.0
+ rrweb-snapshot: 2.0.0-alpha.18
'@rtsao/scc@1.1.0': {}
@@ -2402,105 +2480,105 @@ snapshots:
'@types/node-fetch@2.6.12':
dependencies:
- '@types/node': 20.17.16
- form-data: 4.0.1
+ '@types/node': 20.17.19
+ form-data: 4.0.2
- '@types/node@18.19.74':
+ '@types/node@18.19.76':
dependencies:
undici-types: 5.26.5
- '@types/node@20.17.16':
+ '@types/node@20.17.19':
dependencies:
undici-types: 6.19.8
- '@types/react-dom@19.0.3(@types/react@19.0.8)':
+ '@types/react-dom@19.0.4(@types/react@19.0.10)':
dependencies:
- '@types/react': 19.0.8
+ '@types/react': 19.0.10
- '@types/react@19.0.8':
+ '@types/react@19.0.10':
dependencies:
csstype: 3.1.3
- '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
+ '@typescript-eslint/eslint-plugin@8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
- '@typescript-eslint/scope-manager': 8.21.0
- '@typescript-eslint/type-utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
- '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
- '@typescript-eslint/visitor-keys': 8.21.0
- eslint: 9.18.0(jiti@1.21.7)
+ '@typescript-eslint/parser': 8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/scope-manager': 8.25.0
+ '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/visitor-keys': 8.25.0
+ eslint: 9.21.0(jiti@1.21.7)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
- ts-api-utils: 2.0.0(typescript@5.7.3)
+ ts-api-utils: 2.0.1(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
+ '@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.21.0
- '@typescript-eslint/types': 8.21.0
- '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3)
- '@typescript-eslint/visitor-keys': 8.21.0
+ '@typescript-eslint/scope-manager': 8.25.0
+ '@typescript-eslint/types': 8.25.0
+ '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3)
+ '@typescript-eslint/visitor-keys': 8.25.0
debug: 4.4.0
- eslint: 9.18.0(jiti@1.21.7)
+ eslint: 9.21.0(jiti@1.21.7)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.21.0':
+ '@typescript-eslint/scope-manager@8.25.0':
dependencies:
- '@typescript-eslint/types': 8.21.0
- '@typescript-eslint/visitor-keys': 8.21.0
+ '@typescript-eslint/types': 8.25.0
+ '@typescript-eslint/visitor-keys': 8.25.0
- '@typescript-eslint/type-utils@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
+ '@typescript-eslint/type-utils@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3)
- '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)
debug: 4.4.0
- eslint: 9.18.0(jiti@1.21.7)
- ts-api-utils: 2.0.0(typescript@5.7.3)
+ eslint: 9.21.0(jiti@1.21.7)
+ ts-api-utils: 2.0.1(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.21.0': {}
+ '@typescript-eslint/types@8.25.0': {}
- '@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)':
+ '@typescript-eslint/typescript-estree@8.25.0(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/types': 8.21.0
- '@typescript-eslint/visitor-keys': 8.21.0
+ '@typescript-eslint/types': 8.25.0
+ '@typescript-eslint/visitor-keys': 8.25.0
debug: 4.4.0
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
- semver: 7.6.3
- ts-api-utils: 2.0.0(typescript@5.7.3)
+ semver: 7.7.1
+ ts-api-utils: 2.0.1(typescript@5.7.3)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
+ '@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7))
- '@typescript-eslint/scope-manager': 8.21.0
- '@typescript-eslint/types': 8.21.0
- '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3)
- eslint: 9.18.0(jiti@1.21.7)
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@1.21.7))
+ '@typescript-eslint/scope-manager': 8.25.0
+ '@typescript-eslint/types': 8.25.0
+ '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3)
+ eslint: 9.21.0(jiti@1.21.7)
typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.21.0':
+ '@typescript-eslint/visitor-keys@8.25.0':
dependencies:
- '@typescript-eslint/types': 8.21.0
+ '@typescript-eslint/types': 8.25.0
eslint-visitor-keys: 4.2.0
- '@vercel/analytics@1.4.1(next@15.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
+ '@vercel/analytics@1.5.0(next@15.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
optionalDependencies:
- next: 15.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ next: 15.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react: 19.0.0
abort-controller@3.0.0:
@@ -2517,17 +2595,17 @@ snapshots:
dependencies:
humanize-ms: 1.2.1
- ai@4.1.2(react@19.0.0)(zod@3.24.1):
+ ai@4.1.46(react@19.0.0)(zod@3.24.2):
dependencies:
- '@ai-sdk/provider': 1.0.6
- '@ai-sdk/provider-utils': 2.1.2(zod@3.24.1)
- '@ai-sdk/react': 1.1.2(react@19.0.0)(zod@3.24.1)
- '@ai-sdk/ui-utils': 1.1.2(zod@3.24.1)
+ '@ai-sdk/provider': 1.0.9
+ '@ai-sdk/provider-utils': 2.1.10(zod@3.24.2)
+ '@ai-sdk/react': 1.1.18(react@19.0.0)(zod@3.24.2)
+ '@ai-sdk/ui-utils': 1.1.16(zod@3.24.2)
'@opentelemetry/api': 1.9.0
jsondiffpatch: 0.6.0
optionalDependencies:
react: 19.0.0
- zod: 3.24.1
+ zod: 3.24.2
ajv@6.12.6:
dependencies:
@@ -2570,7 +2648,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.9
es-object-atoms: 1.1.1
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
is-string: 1.1.1
array.prototype.findlast@1.2.5:
@@ -2580,7 +2658,7 @@ snapshots:
es-abstract: 1.23.9
es-errors: 1.3.0
es-object-atoms: 1.1.1
- es-shim-unscopables: 1.0.2
+ es-shim-unscopables: 1.1.0
array.prototype.findlastindex@1.2.5:
dependencies:
@@ -2589,21 +2667,21 @@ snapshots:
es-abstract: 1.23.9
es-errors: 1.3.0
es-object-atoms: 1.1.1
- es-shim-unscopables: 1.0.2
+ es-shim-unscopables: 1.1.0
array.prototype.flat@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
- es-shim-unscopables: 1.0.2
+ es-shim-unscopables: 1.1.0
array.prototype.flatmap@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
- es-shim-unscopables: 1.0.2
+ es-shim-unscopables: 1.1.0
array.prototype.tosorted@1.1.4:
dependencies:
@@ -2611,7 +2689,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
- es-shim-unscopables: 1.0.2
+ es-shim-unscopables: 1.1.0
arraybuffer.prototype.slice@1.0.4:
dependencies:
@@ -2620,7 +2698,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
ast-types-flow@0.0.8: {}
@@ -2631,7 +2709,7 @@ snapshots:
available-typed-arrays@1.0.7:
dependencies:
- possible-typed-array-names: 1.0.0
+ possible-typed-array-names: 1.1.0
axe-core@4.10.2: {}
@@ -2658,28 +2736,28 @@ snapshots:
dependencies:
streamsearch: 1.1.0
- call-bind-apply-helpers@1.0.1:
+ call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
call-bind@1.0.8:
dependencies:
- call-bind-apply-helpers: 1.0.1
+ call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
set-function-length: 1.2.2
call-bound@1.0.3:
dependencies:
- call-bind-apply-helpers: 1.0.1
- get-intrinsic: 1.2.7
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
callsites@3.1.0: {}
camelcase-css@2.0.1: {}
- caniuse-lite@1.0.30001695: {}
+ caniuse-lite@1.0.30001700: {}
chalk@4.1.2:
dependencies:
@@ -2802,7 +2880,7 @@ snapshots:
dunder-proto@1.0.1:
dependencies:
- call-bind-apply-helpers: 1.0.1
+ call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
@@ -2812,7 +2890,7 @@ snapshots:
emoji-regex@9.2.2: {}
- enhanced-resolve@5.18.0:
+ enhanced-resolve@5.18.1:
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.1
@@ -2833,7 +2911,7 @@ snapshots:
es-set-tostringtag: 2.1.0
es-to-primitive: 1.3.0
function.prototype.name: 1.1.8
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
get-proto: 1.0.1
get-symbol-description: 1.1.0
globalthis: 1.0.4
@@ -2850,9 +2928,9 @@ snapshots:
is-shared-array-buffer: 1.0.4
is-string: 1.1.1
is-typed-array: 1.1.15
- is-weakref: 1.1.0
+ is-weakref: 1.1.1
math-intrinsics: 1.1.0
- object-inspect: 1.13.3
+ object-inspect: 1.13.4
object-keys: 1.1.1
object.assign: 4.1.7
own-keys: 1.0.1
@@ -2884,7 +2962,7 @@ snapshots:
es-errors: 1.3.0
es-set-tostringtag: 2.1.0
function-bind: 1.1.2
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
globalthis: 1.0.4
gopd: 1.2.0
has-property-descriptors: 1.0.2
@@ -2901,11 +2979,11 @@ snapshots:
es-set-tostringtag@2.1.0:
dependencies:
es-errors: 1.3.0
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
has-tostringtag: 1.0.2
hasown: 2.0.2
- es-shim-unscopables@1.0.2:
+ es-shim-unscopables@1.1.0:
dependencies:
hasown: 2.0.2
@@ -2917,19 +2995,19 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-next@15.1.6(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3):
+ eslint-config-next@15.1.6(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3):
dependencies:
'@next/eslint-plugin-next': 15.1.6
'@rushstack/eslint-patch': 1.10.5
- '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
- '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
- eslint: 9.18.0(jiti@1.21.7)
+ '@typescript-eslint/eslint-plugin': 8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)
+ eslint: 9.21.0(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7))
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7))
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.18.0(jiti@1.21.7))
- eslint-plugin-react: 7.37.4(eslint@9.18.0(jiti@1.21.7))
- eslint-plugin-react-hooks: 5.1.0(eslint@9.18.0(jiti@1.21.7))
+ eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@1.21.7))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.3)(eslint@9.21.0(jiti@1.21.7))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0(jiti@1.21.7))
+ eslint-plugin-react: 7.37.4(eslint@9.21.0(jiti@1.21.7))
+ eslint-plugin-react-hooks: 5.1.0(eslint@9.21.0(jiti@1.21.7))
optionalDependencies:
typescript: 5.7.3
transitivePeerDependencies:
@@ -2945,34 +3023,33 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7)):
+ eslint-import-resolver-typescript@3.8.3(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@1.21.7)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0
- enhanced-resolve: 5.18.0
- eslint: 9.18.0(jiti@1.21.7)
- fast-glob: 3.3.3
+ enhanced-resolve: 5.18.1
+ eslint: 9.21.0(jiti@1.21.7)
get-tsconfig: 4.10.0
is-bun-module: 1.3.0
- is-glob: 4.0.3
stable-hash: 0.0.4
+ tinyglobby: 0.2.12
optionalDependencies:
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.3)(eslint@9.21.0(jiti@1.21.7))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3)(eslint@9.21.0(jiti@1.21.7)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
- eslint: 9.18.0(jiti@1.21.7)
+ '@typescript-eslint/parser': 8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)
+ eslint: 9.21.0(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.18.0(jiti@1.21.7))
+ eslint-import-resolver-typescript: 3.8.3(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@1.21.7))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7)):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.3)(eslint@9.21.0(jiti@1.21.7)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -2981,9 +3058,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.18.0(jiti@1.21.7)
+ eslint: 9.21.0(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.18.0(jiti@1.21.7))
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.3)(eslint@9.21.0(jiti@1.21.7))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -2995,13 +3072,13 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.25.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.18.0(jiti@1.21.7)):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.21.0(jiti@1.21.7)):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.8
@@ -3011,7 +3088,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.18.0(jiti@1.21.7)
+ eslint: 9.21.0(jiti@1.21.7)
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -3020,11 +3097,11 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
- eslint-plugin-react-hooks@5.1.0(eslint@9.18.0(jiti@1.21.7)):
+ eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@1.21.7)):
dependencies:
- eslint: 9.18.0(jiti@1.21.7)
+ eslint: 9.21.0(jiti@1.21.7)
- eslint-plugin-react@7.37.4(eslint@9.18.0(jiti@1.21.7)):
+ eslint-plugin-react@7.37.4(eslint@9.21.0(jiti@1.21.7)):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -3032,7 +3109,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 9.18.0(jiti@1.21.7)
+ eslint: 9.21.0(jiti@1.21.7)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -3055,18 +3132,18 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
- eslint@9.18.0(jiti@1.21.7):
+ eslint@9.21.0(jiti@1.21.7):
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7))
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@1.21.7))
'@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.19.1
- '@eslint/core': 0.10.0
- '@eslint/eslintrc': 3.2.0
- '@eslint/js': 9.18.0
- '@eslint/plugin-kit': 0.2.5
+ '@eslint/config-array': 0.19.2
+ '@eslint/core': 0.12.0
+ '@eslint/eslintrc': 3.3.0
+ '@eslint/js': 9.21.0
+ '@eslint/plugin-kit': 0.2.7
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
- '@humanwhocodes/retry': 0.4.1
+ '@humanwhocodes/retry': 0.4.2
'@types/estree': 1.0.6
'@types/json-schema': 7.0.15
ajv: 6.12.6
@@ -3140,9 +3217,13 @@ snapshots:
fast-levenshtein@2.0.6: {}
- fastq@1.18.0:
+ fastq@1.19.0:
dependencies:
- reusify: 1.0.4
+ reusify: 1.1.0
+
+ fdir@6.4.3(picomatch@4.0.2):
+ optionalDependencies:
+ picomatch: 4.0.2
fflate@0.4.8: {}
@@ -3161,26 +3242,27 @@ snapshots:
flat-cache@4.0.1:
dependencies:
- flatted: 3.3.2
+ flatted: 3.3.3
keyv: 4.5.4
- flatted@3.3.2: {}
+ flatted@3.3.3: {}
- for-each@0.3.3:
+ for-each@0.3.5:
dependencies:
is-callable: 1.2.7
- foreground-child@3.3.0:
+ foreground-child@3.3.1:
dependencies:
cross-spawn: 7.0.6
signal-exit: 4.1.0
form-data-encoder@1.7.2: {}
- form-data@4.0.1:
+ form-data@4.0.2:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
mime-types: 2.1.35
formdata-node@4.4.1:
@@ -3197,9 +3279,9 @@ snapshots:
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
- framer-motion@12.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ framer-motion@12.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
- motion-dom: 12.0.0
+ motion-dom: 12.4.5
motion-utils: 12.0.0
tslib: 2.8.1
optionalDependencies:
@@ -3225,9 +3307,9 @@ snapshots:
functions-have-names@1.2.3: {}
- get-intrinsic@1.2.7:
+ get-intrinsic@1.3.0:
dependencies:
- call-bind-apply-helpers: 1.0.1
+ call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
@@ -3247,7 +3329,7 @@ snapshots:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
get-tsconfig@4.10.0:
dependencies:
@@ -3263,7 +3345,7 @@ snapshots:
glob@10.4.5:
dependencies:
- foreground-child: 3.3.0
+ foreground-child: 3.3.1
jackspeak: 3.4.3
minimatch: 9.0.5
minipass: 7.1.2
@@ -3311,7 +3393,7 @@ snapshots:
ignore@5.3.2: {}
- import-fresh@3.3.0:
+ import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
@@ -3328,7 +3410,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
is-arrayish@0.3.2: {}
@@ -3348,14 +3430,14 @@ snapshots:
dependencies:
binary-extensions: 2.3.0
- is-boolean-object@1.2.1:
+ is-boolean-object@1.2.2:
dependencies:
call-bound: 1.0.3
has-tostringtag: 1.0.2
is-bun-module@1.3.0:
dependencies:
- semver: 7.6.3
+ semver: 7.7.1
is-callable@1.2.7: {}
@@ -3366,7 +3448,7 @@ snapshots:
is-data-view@1.0.2:
dependencies:
call-bound: 1.0.3
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
is-typed-array: 1.1.15
is-date-object@1.1.0:
@@ -3432,14 +3514,14 @@ snapshots:
is-weakmap@2.0.2: {}
- is-weakref@1.1.0:
+ is-weakref@1.1.1:
dependencies:
call-bound: 1.0.3
is-weakset@2.0.4:
dependencies:
call-bound: 1.0.3
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
isarray@2.0.5: {}
@@ -3449,7 +3531,7 @@ snapshots:
dependencies:
define-data-property: 1.1.4
es-object-atoms: 1.1.1
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
get-proto: 1.0.1
has-symbols: 1.1.0
set-function-name: 2.0.2
@@ -3462,9 +3544,9 @@ snapshots:
jiti@1.21.7: {}
- jotai@2.11.1(@types/react@19.0.8)(react@19.0.0):
+ jotai@2.12.1(@types/react@19.0.10)(react@19.0.0):
optionalDependencies:
- '@types/react': 19.0.8
+ '@types/react': 19.0.10
react: 19.0.0
js-tokens@4.0.0: {}
@@ -3562,7 +3644,7 @@ snapshots:
dependencies:
motion-utils: 11.18.1
- motion-dom@12.0.0:
+ motion-dom@12.4.5:
dependencies:
motion-utils: 12.0.0
@@ -3570,9 +3652,9 @@ snapshots:
motion-utils@12.0.0: {}
- motion@12.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ motion@12.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
- framer-motion: 12.0.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ framer-motion: 12.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
tslib: 2.8.1
optionalDependencies:
react: 19.0.0
@@ -3590,13 +3672,13 @@ snapshots:
natural-compare@1.4.0: {}
- next@15.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.50.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ next@15.1.6(@opentelemetry/api@1.9.0)(@playwright/test@1.50.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
'@next/env': 15.1.6
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
- caniuse-lite: 1.0.30001695
+ caniuse-lite: 1.0.30001700
postcss: 8.4.31
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
@@ -3611,7 +3693,7 @@ snapshots:
'@next/swc-win32-arm64-msvc': 15.1.6
'@next/swc-win32-x64-msvc': 15.1.6
'@opentelemetry/api': 1.9.0
- '@playwright/test': 1.50.0
+ '@playwright/test': 1.50.1
sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
@@ -3629,7 +3711,7 @@ snapshots:
object-hash@3.0.0: {}
- object-inspect@1.13.3: {}
+ object-inspect@1.13.4: {}
object-keys@1.1.1: {}
@@ -3668,9 +3750,9 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
- openai@4.80.0(ws@8.18.0)(zod@3.24.1):
+ openai@4.85.4(ws@8.18.1)(zod@3.24.2):
dependencies:
- '@types/node': 18.19.74
+ '@types/node': 18.19.76
'@types/node-fetch': 2.6.12
abort-controller: 3.0.0
agentkeepalive: 4.6.0
@@ -3678,8 +3760,8 @@ snapshots:
formdata-node: 4.4.1
node-fetch: 2.7.0
optionalDependencies:
- ws: 8.18.0
- zod: 3.24.1
+ ws: 8.18.1
+ zod: 3.24.2
transitivePeerDependencies:
- encoding
@@ -3694,7 +3776,7 @@ snapshots:
own-keys@1.0.1:
dependencies:
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
object-keys: 1.1.1
safe-push-apply: 1.0.0
@@ -3727,42 +3809,44 @@ snapshots:
picomatch@2.3.1: {}
+ picomatch@4.0.2: {}
+
pify@2.3.0: {}
pirates@4.0.6: {}
- playwright-core@1.50.0: {}
+ playwright-core@1.50.1: {}
- playwright@1.50.0:
+ playwright@1.50.1:
dependencies:
- playwright-core: 1.50.0
+ playwright-core: 1.50.1
optionalDependencies:
fsevents: 2.3.2
- possible-typed-array-names@1.0.0: {}
+ possible-typed-array-names@1.1.0: {}
- postcss-import@15.1.0(postcss@8.5.1):
+ postcss-import@15.1.0(postcss@8.5.3):
dependencies:
- postcss: 8.5.1
+ postcss: 8.5.3
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.10
- postcss-js@4.0.1(postcss@8.5.1):
+ postcss-js@4.0.1(postcss@8.5.3):
dependencies:
camelcase-css: 2.0.1
- postcss: 8.5.1
+ postcss: 8.5.3
- postcss-load-config@4.0.2(postcss@8.5.1):
+ postcss-load-config@4.0.2(postcss@8.5.3):
dependencies:
lilconfig: 3.1.3
yaml: 2.7.0
optionalDependencies:
- postcss: 8.5.1
+ postcss: 8.5.3
- postcss-nested@6.2.0(postcss@8.5.1):
+ postcss-nested@6.2.0(postcss@8.5.3):
dependencies:
- postcss: 8.5.1
+ postcss: 8.5.3
postcss-selector-parser: 6.1.2
postcss-selector-parser@6.1.2:
@@ -3778,20 +3862,21 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
- postcss@8.5.1:
+ postcss@8.5.3:
dependencies:
nanoid: 3.3.8
picocolors: 1.1.1
source-map-js: 1.2.1
- posthog-js@1.209.3:
+ posthog-js@1.223.4(@rrweb/types@2.0.0-alpha.17):
dependencies:
+ '@rrweb/types': 2.0.0-alpha.17
core-js: 3.40.0
fflate: 0.4.8
- preact: 10.25.4
+ preact: 10.26.2
web-vitals: 4.2.4
- preact@10.25.4: {}
+ preact@10.26.2: {}
prelude-ls@1.2.1: {}
@@ -3829,7 +3914,7 @@ snapshots:
es-abstract: 1.23.9
es-errors: 1.3.0
es-object-atoms: 1.1.1
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
get-proto: 1.0.1
which-builtin-type: 1.2.1
@@ -3858,7 +3943,11 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- reusify@1.0.4: {}
+ reusify@1.1.0: {}
+
+ rrweb-snapshot@2.0.0-alpha.18:
+ dependencies:
+ postcss: 8.5.3
run-parallel@1.2.0:
dependencies:
@@ -3868,7 +3957,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
has-symbols: 1.1.0
isarray: 2.0.5
@@ -3889,14 +3978,14 @@ snapshots:
semver@6.3.1: {}
- semver@7.6.3: {}
+ semver@7.7.1: {}
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
gopd: 1.2.0
has-property-descriptors: 1.0.2
@@ -3917,7 +4006,7 @@ snapshots:
dependencies:
color: 4.2.3
detect-libc: 2.0.3
- semver: 7.6.3
+ semver: 7.7.1
optionalDependencies:
'@img/sharp-darwin-arm64': 0.33.5
'@img/sharp-darwin-x64': 0.33.5
@@ -3948,27 +4037,27 @@ snapshots:
side-channel-list@1.0.0:
dependencies:
es-errors: 1.3.0
- object-inspect: 1.13.3
+ object-inspect: 1.13.4
side-channel-map@1.0.1:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.2.7
- object-inspect: 1.13.3
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.2.7
- object-inspect: 1.13.3
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
side-channel-map: 1.0.1
side-channel@1.1.0:
dependencies:
es-errors: 1.3.0
- object-inspect: 1.13.3
+ object-inspect: 1.13.4
side-channel-list: 1.0.0
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
@@ -4011,7 +4100,7 @@ snapshots:
es-abstract: 1.23.9
es-errors: 1.3.0
es-object-atoms: 1.1.1
- get-intrinsic: 1.2.7
+ get-intrinsic: 1.3.0
gopd: 1.2.0
has-symbols: 1.1.0
internal-slot: 1.1.0
@@ -4080,7 +4169,7 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- swr@2.3.0(react@19.0.0):
+ swr@2.3.2(react@19.0.0):
dependencies:
dequal: 2.0.3
react: 19.0.0
@@ -4102,11 +4191,11 @@ snapshots:
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.1.1
- postcss: 8.5.1
- postcss-import: 15.1.0(postcss@8.5.1)
- postcss-js: 4.0.1(postcss@8.5.1)
- postcss-load-config: 4.0.2(postcss@8.5.1)
- postcss-nested: 6.2.0(postcss@8.5.1)
+ postcss: 8.5.3
+ postcss-import: 15.1.0(postcss@8.5.3)
+ postcss-js: 4.0.1(postcss@8.5.3)
+ postcss-load-config: 4.0.2(postcss@8.5.3)
+ postcss-nested: 6.2.0(postcss@8.5.3)
postcss-selector-parser: 6.1.2
resolve: 1.22.10
sucrase: 3.35.0
@@ -4125,13 +4214,18 @@ snapshots:
throttleit@2.1.0: {}
+ tinyglobby@0.2.12:
+ dependencies:
+ fdir: 6.4.3(picomatch@4.0.2)
+ picomatch: 4.0.2
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
tr46@0.0.3: {}
- ts-api-utils@2.0.0(typescript@5.7.3):
+ ts-api-utils@2.0.1(typescript@5.7.3):
dependencies:
typescript: 5.7.3
@@ -4159,7 +4253,7 @@ snapshots:
typed-array-byte-length@1.0.3:
dependencies:
call-bind: 1.0.8
- for-each: 0.3.3
+ for-each: 0.3.5
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
@@ -4168,7 +4262,7 @@ snapshots:
dependencies:
available-typed-arrays: 1.0.7
call-bind: 1.0.8
- for-each: 0.3.3
+ for-each: 0.3.5
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
@@ -4177,10 +4271,10 @@ snapshots:
typed-array-length@1.0.7:
dependencies:
call-bind: 1.0.8
- for-each: 0.3.3
+ for-each: 0.3.5
gopd: 1.2.0
is-typed-array: 1.1.15
- possible-typed-array-names: 1.0.0
+ possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
typescript@5.7.3: {}
@@ -4225,7 +4319,7 @@ snapshots:
which-boxed-primitive@1.1.1:
dependencies:
is-bigint: 1.1.0
- is-boolean-object: 1.2.1
+ is-boolean-object: 1.2.2
is-number-object: 1.1.1
is-string: 1.1.1
is-symbol: 1.1.1
@@ -4240,7 +4334,7 @@ snapshots:
is-finalizationregistry: 1.1.1
is-generator-function: 1.1.0
is-regex: 1.2.1
- is-weakref: 1.1.0
+ is-weakref: 1.1.1
isarray: 2.0.5
which-boxed-primitive: 1.1.1
which-collection: 1.0.2
@@ -4258,7 +4352,7 @@ snapshots:
available-typed-arrays: 1.0.7
call-bind: 1.0.8
call-bound: 1.0.3
- for-each: 0.3.3
+ for-each: 0.3.5
gopd: 1.2.0
has-tostringtag: 1.0.2
@@ -4280,14 +4374,14 @@ snapshots:
string-width: 5.1.2
strip-ansi: 7.1.0
- ws@8.18.0: {}
+ ws@8.18.1: {}
yaml@2.7.0: {}
yocto-queue@0.1.0: {}
- zod-to-json-schema@3.24.1(zod@3.24.1):
+ zod-to-json-schema@3.24.3(zod@3.24.2):
dependencies:
- zod: 3.24.1
+ zod: 3.24.2
- zod@3.24.1: {}
+ zod@3.24.2: {}
diff --git a/stagehand.config.ts b/stagehand.config.ts
new file mode 100644
index 0000000..7d94d06
--- /dev/null
+++ b/stagehand.config.ts
@@ -0,0 +1,80 @@
+import { type ConstructorParams, type LogLine } from "@browserbasehq/stagehand";
+import { AISdkClient } from "./aisdk_client";
+import { cerebras } from "@ai-sdk/cerebras";
+
+export const LLMClient = cerebras("llama-3.3-70b");
+
+const StagehandConfig: ConstructorParams = {
+ env: "BROWSERBASE",
+ apiKey: process.env.BROWSERBASE_API_KEY /* API key for authentication */,
+ projectId: process.env.BROWSERBASE_PROJECT_ID /* Project identifier */,
+ debugDom: undefined /* Enable DOM debugging features */,
+ headless: false /* Run browser in headless mode */,
+ logger: () => {},
+ domSettleTimeoutMs: 30_000 /* Timeout for DOM to settle in milliseconds */,
+ browserbaseSessionCreateParams: {
+ projectId: process.env.BROWSERBASE_PROJECT_ID!,
+ },
+ enableCaching: undefined /* Enable caching functionality */,
+ browserbaseSessionID:
+ undefined /* Session ID for resuming Browserbase sessions */,
+
+ /**
+ * Configure the Vercel AI SDK client here
+ */
+ llmClient: new AISdkClient({
+ model: LLMClient,
+ }),
+};
+
+export default StagehandConfig;
+
+/**
+ * Custom logging function that you can use to filter logs.
+ *
+ * General pattern here is that `message` will always be unique with no params
+ * Any param you would put in a log is in `auxiliary`.
+ *
+ * For example, an error log looks like this:
+ *
+ * ```
+ * {
+ * category: "error",
+ * message: "Some specific error occurred",
+ * auxiliary: {
+ * message: { value: "Error message", type: "string" },
+ * trace: { value: "Error trace", type: "string" }
+ * }
+ * }
+ * ```
+ *
+ * You can then use `logLineToString` to filter for a specific log pattern like
+ *
+ * ```
+ * if (logLine.message === "Some specific error occurred") {
+ * console.log(logLineToString(logLine));
+ * }
+ * ```
+ */
+export function logLineToString(logLine: LogLine): string {
+ // If you want more detail, set this to false. However, this will make the logs
+ // more verbose and harder to read.
+ const HIDE_AUXILIARY = true;
+
+ try {
+ const timestamp = logLine.timestamp || new Date().toISOString();
+ if (logLine.auxiliary?.error) {
+ return `${timestamp}::[stagehand:${logLine.category}] ${logLine.message}\n ${logLine.auxiliary.error.value}\n ${logLine.auxiliary.trace.value}`;
+ }
+
+ // If we want to hide auxiliary information, we don't add it to the log
+ return `${timestamp}::[stagehand:${logLine.category}] ${logLine.message} ${
+ logLine.auxiliary && !HIDE_AUXILIARY
+ ? JSON.stringify(logLine.auxiliary)
+ : ""
+ }`;
+ } catch (error) {
+ console.error(`Error logging line:`, error);
+ return "error logging line";
+ }
+}