diff --git a/apps/agents/package.json b/apps/agents/package.json index b08aa640..e7afbd1d 100644 --- a/apps/agents/package.json +++ b/apps/agents/package.json @@ -12,7 +12,7 @@ "license": "MIT", "private": true, "scripts": { - "dev": "npx @langchain/langgraph-cli dev --port 54367 --config ../../langgraph.json", + "dev": "langgraphjs dev --port 54367 --config ../../langgraph.json --no-browser", "build": "yarn clean && tsc", "clean": "rm -rf ./dist .turbo || true", "format": "prettier --config .prettierrc --write \"src\"", @@ -41,6 +41,7 @@ "exa-js": "^1.4.10", "framer-motion": "^11.11.9", "groq-sdk": "^0.13.0", + "hono": "^4.7.6", "langchain": "^0.3.14", "langsmith": "^0.3.3", "lodash": "^4.17.21", @@ -52,6 +53,8 @@ "@eslint/js": "^9.12.0", "@types/eslint__js": "^8.42.3", "@types/lodash": "^4.17.12", + "@langchain/langgraph-api": "http://localhost:3123/18/@langchain/langgraph-api", + "@langchain/langgraph-cli": "http://localhost:3123/18/@langchain/langgraph-cli", "@types/node": "^20", "@types/pdf-parse": "^1.1.4", "@types/uuid": "^10.0.0", @@ -65,5 +68,8 @@ "typescript": "^5", "typescript-eslint": "^8.8.1", "vitest": "^3.0.4" + }, + "resolutions": { + "@langchain/langgraph-sdk": "http://localhost:3123/18/@langchain/langgraph-sdk" } } diff --git a/apps/agents/src/auth/index.ts b/apps/agents/src/auth/index.ts new file mode 100644 index 00000000..c95e44b1 --- /dev/null +++ b/apps/agents/src/auth/index.ts @@ -0,0 +1,118 @@ +import { Auth, HTTPException } from "@langchain/langgraph-sdk/auth"; +import { CONTEXT_DOCUMENTS_NAMESPACE } from "@opencanvas/shared/constants"; +import { createClient, UserResponse } from "@supabase/supabase-js"; + +const USER_PERMISSIONS = [ + "threads:create", + "threads:read", + "threads:update", + "threads:delete", + "threads:search", + "threads:create_run", + "assistants:create", + "assistants:read", + "assistants:update", + "assistants:delete", + "assistants:search", + "assistants:write", + "store:put", + "store:get", + "store:search", + "store:list_namespaces", + "store:delete", +]; + +const isContextDocumentNamespace = (namespace: string[]): boolean => { + return namespace.includes(CONTEXT_DOCUMENTS_NAMESPACE[0]); +}; + +export const auth = new Auth() + .authenticate(async (request) => { + const authorization = request.headers.get("Authorization"); + + const exc = new HTTPException(401, { + message: "Could not validate credentials", + headers: { "WWW-Authenticate": "Bearer" }, + }); + + if (!authorization?.toLocaleLowerCase().startsWith("bearer ")) { + console.log("authorization could not verify", authorization); + throw exc; + } + + const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL; + const supabaseKey = process.env.SUPABASE_SERVICE_ROLE; + if (!supabaseUrl || !supabaseKey) { + throw new HTTPException(555, { + message: + "SUPABASE_URL or SUPABASE_SERVICE_ROLE environment variables are not set", + }); + } + const supabaseClient = createClient(supabaseUrl, supabaseKey); + + let authRes: UserResponse | undefined; + + try { + authRes = await supabaseClient.auth.getUser(authorization?.split(" ")[1]); + } catch (error) { + throw new HTTPException(401, { + message: "Failed to verify JWT token", + cause: error, + }); + } + + if (!authRes.data.user) throw exc; + + const user = authRes.data.user; + if (!user) throw exc; + + return { + permissions: USER_PERMISSIONS, + is_authenticated: true, + display_name: user.user_metadata.display_name, + identity: user.id, + role: "user", + }; + }) + .on("*", ({ permissions }) => { + if (!permissions?.length) { + throw new HTTPException(403, { message: "Not authorized" }); + } + }) + .on("assistants:create", ({ value, user, permissions }) => { + if (!permissions?.includes("assistants:write")) { + throw new HTTPException(403, { message: "Not authorized" }); + } + + value.metadata ??= {}; + value.metadata["user_id"] = user.identity; + }) + .on("assistants:search", ({ user }) => { + return { user_id: user.identity }; + }) + .on(["threads", "assistants"], ({ action, value, user }) => { + const filters = { user_id: user.identity }; + if ( + action === "threads:create_run" || + action === "threads:update" || + action === "threads:create" || + action === "assistants:create" || + action === "assistants:update" + ) { + value.metadata ??= {}; + value.metadata["user_id"] = user.identity; + } + return filters; + }) + .on("store", ({ value, user }) => { + const identity = user.identity; + // Throw an error if their identity is undefined, or if the namespace does not include their identity and is not a context document namespace + // this is due to the legacy namespacing of the context documents which do not include the user identity + if ( + !identity || + (!value.namespace?.includes(identity) && + !isContextDocumentNamespace(value.namespace ?? [])) + ) { + throw new HTTPException(403, { message: "Not authorized" }); + } + }); diff --git a/apps/agents/src/open-canvas/nodes/customAction.ts b/apps/agents/src/open-canvas/nodes/customAction.ts index 2d52c105..44ae867a 100644 --- a/apps/agents/src/open-canvas/nodes/customAction.ts +++ b/apps/agents/src/open-canvas/nodes/customAction.ts @@ -8,14 +8,8 @@ import { ArtifactCodeV3, ArtifactMarkdownV3, ArtifactV3, - CustomQuickAction, - Reflections, } from "@opencanvas/shared/types"; -import { - ensureStoreInConfig, - formatReflections, - getModelFromConfig, -} from "../../utils.js"; +import { getModelFromConfig } from "../../utils.js"; import { CUSTOM_QUICK_ACTION_ARTIFACT_CONTENT_PROMPT, CUSTOM_QUICK_ACTION_ARTIFACT_PROMPT_PREFIX, @@ -26,6 +20,8 @@ import { OpenCanvasGraphAnnotation, OpenCanvasGraphReturnType, } from "../state.js"; +import { getReflections } from "../../stores/reflections.js"; +import { getCustomActions } from "../../stores/custom-actions.js"; const formatMessages = (messages: BaseMessage[]): string => messages @@ -47,47 +43,26 @@ export const customAction = async ( temperature: 0.5, }); - const store = ensureStoreInConfig(config); - const assistantId = config.configurable?.assistant_id; - const userId = config.configurable?.supabase_user_id; - if (!assistantId) { - throw new Error("`assistant_id` not found in configurable"); - } - if (!userId) { - throw new Error("`user.id` not found in configurable"); - } - const customActionsNamespace = ["custom_actions", userId]; - const actionsKey = "actions"; - - const memoryNamespace = ["memories", assistantId]; - const memoryKey = "reflection"; - - const [customActionsItem, memories] = await Promise.all([ - store.get(customActionsNamespace, actionsKey), - store.get(memoryNamespace, memoryKey), + const [customQuickAction, reflections] = await Promise.all([ + getCustomActions(config.store, { + userId: config.configurable?.user_id, + customQuickActionId: state.customQuickActionId, + }), + getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }), ]); - if (!customActionsItem?.value) { - throw new Error("No custom actions found."); - } - const customQuickAction = customActionsItem.value[ - state.customQuickActionId - ] as CustomQuickAction | undefined; - if (!customQuickAction) { - throw new Error( - `No custom quick action found from ID ${state.customQuickActionId}` - ); - } const currentArtifactContent = state.artifact ? getArtifactContent(state.artifact) : undefined; let formattedPrompt = `\n${customQuickAction.prompt}\n`; - if (customQuickAction.includeReflections && memories?.value) { - const memoriesAsString = formatReflections(memories.value as Reflections); + if (customQuickAction.includeReflections && reflections) { const reflectionsPrompt = REFLECTIONS_QUICK_ACTION_PROMPT.replace( "{reflections}", - memoriesAsString + reflections ); formattedPrompt += `\n\n${reflectionsPrompt}`; } diff --git a/apps/agents/src/open-canvas/nodes/generate-artifact/index.ts b/apps/agents/src/open-canvas/nodes/generate-artifact/index.ts index 100031fd..7d0f0324 100644 --- a/apps/agents/src/open-canvas/nodes/generate-artifact/index.ts +++ b/apps/agents/src/open-canvas/nodes/generate-artifact/index.ts @@ -1,6 +1,5 @@ import { createContextDocumentMessages, - getFormattedReflections, getModelConfig, getModelFromConfig, isUsingO1MiniModel, @@ -15,6 +14,7 @@ import { import { ARTIFACT_TOOL_SCHEMA } from "./schemas.js"; import { createArtifactContent, formatNewArtifactPrompt } from "./utils.js"; import { z } from "zod"; +import { getReflections } from "../../../stores/reflections.js"; /** * Generate a new artifact based on the user's query. @@ -44,9 +44,13 @@ export const generateArtifact = async ( } ); - const memoriesAsString = await getFormattedReflections(config); + const reflections = await getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }); + const formattedNewArtifactPrompt = formatNewArtifactPrompt( - memoriesAsString, + reflections, modelName ); diff --git a/apps/agents/src/open-canvas/nodes/generateFollowup.ts b/apps/agents/src/open-canvas/nodes/generateFollowup.ts index 092c50a8..29f35f8a 100644 --- a/apps/agents/src/open-canvas/nodes/generateFollowup.ts +++ b/apps/agents/src/open-canvas/nodes/generateFollowup.ts @@ -4,13 +4,12 @@ import { getArtifactContent, isArtifactMarkdownContent, } from "@opencanvas/shared/utils/artifacts"; -import { Reflections } from "@opencanvas/shared/types"; -import { ensureStoreInConfig, formatReflections } from "../../utils.js"; import { FOLLOWUP_ARTIFACT_PROMPT } from "../prompts.js"; import { OpenCanvasGraphAnnotation, OpenCanvasGraphReturnType, } from "../state.js"; +import { getReflections } from "../../stores/reflections.js"; /** * Generate a followup message after generating or updating an artifact. @@ -25,19 +24,10 @@ export const generateFollowup = async ( isToolCalling: true, }); - const store = ensureStoreInConfig(config); - const assistantId = config.configurable?.assistant_id; - if (!assistantId) { - throw new Error("`assistant_id` not found in configurable"); - } - const memoryNamespace = ["memories", assistantId]; - const memoryKey = "reflection"; - const memories = await store.get(memoryNamespace, memoryKey); - const memoriesAsString = memories?.value - ? formatReflections(memories.value as Reflections, { - onlyContent: true, - }) - : "No reflections found."; + const reflections = await getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }); const currentArtifactContent = state.artifact ? getArtifactContent(state.artifact) @@ -53,7 +43,7 @@ export const generateFollowup = async ( "{artifactContent}", artifactContent || "No artifacts generated yet." ) - .replace("{reflections}", memoriesAsString) + .replace("{reflections}", reflections) .replace( "{conversation}", state._messages diff --git a/apps/agents/src/open-canvas/nodes/replyToGeneralInput.ts b/apps/agents/src/open-canvas/nodes/replyToGeneralInput.ts index 11dfd1e7..c3af970d 100644 --- a/apps/agents/src/open-canvas/nodes/replyToGeneralInput.ts +++ b/apps/agents/src/open-canvas/nodes/replyToGeneralInput.ts @@ -1,11 +1,8 @@ import { LangGraphRunnableConfig } from "@langchain/langgraph"; import { getArtifactContent } from "@opencanvas/shared/utils/artifacts"; -import { Reflections } from "@opencanvas/shared/types"; import { createContextDocumentMessages, - ensureStoreInConfig, formatArtifactContentWithTemplate, - formatReflections, getModelFromConfig, isUsingO1MiniModel, } from "../../utils.js"; @@ -14,6 +11,7 @@ import { OpenCanvasGraphAnnotation, OpenCanvasGraphReturnType, } from "../state.js"; +import { getReflections } from "../../stores/reflections.js"; /** * Generate responses to questions. Does not generate artifacts. @@ -39,20 +37,13 @@ You also have the following reflections on style guidelines and general memories ? getArtifactContent(state.artifact) : undefined; - const store = ensureStoreInConfig(config); - const assistantId = config.configurable?.assistant_id; - if (!assistantId) { - throw new Error("`assistant_id` not found in configurable"); - } - const memoryNamespace = ["memories", assistantId]; - const memoryKey = "reflection"; - const memories = await store.get(memoryNamespace, memoryKey); - const memoriesAsString = memories?.value - ? formatReflections(memories.value as Reflections) - : "No reflections found."; + const reflections = await getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }); const formattedPrompt = prompt - .replace("{reflections}", memoriesAsString) + .replace("{reflections}", reflections) .replace( "{currentArtifactPrompt}", currentArtifactContent diff --git a/apps/agents/src/open-canvas/nodes/rewrite-artifact/index.ts b/apps/agents/src/open-canvas/nodes/rewrite-artifact/index.ts index 4d2bea27..f3bbb58e 100644 --- a/apps/agents/src/open-canvas/nodes/rewrite-artifact/index.ts +++ b/apps/agents/src/open-canvas/nodes/rewrite-artifact/index.ts @@ -12,7 +12,6 @@ import { } from "./utils.js"; import { createContextDocumentMessages, - getFormattedReflections, getModelConfig, getModelFromConfig, isUsingO1MiniModel, @@ -24,6 +23,7 @@ import { extractThinkingAndResponseTokens, isThinkingModel, } from "@opencanvas/shared/utils/thinking"; +import { getReflections } from "../../../stores/reflections.js"; export const rewriteArtifact = async ( state: typeof OpenCanvasGraphAnnotation.State, @@ -33,7 +33,11 @@ export const rewriteArtifact = async ( const smallModelWithConfig = (await getModelFromConfig(config)).withConfig({ runName: "rewrite_artifact_model_call", }); - const memoriesAsString = await getFormattedReflections(config); + + const reflections = await getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }); const { currentArtifactContent, recentHumanMessage } = validateState(state); const artifactMetaToolCall = await optionallyUpdateArtifactMeta( @@ -49,7 +53,7 @@ export const rewriteArtifact = async ( const formattedPrompt = buildPrompt({ artifactContent, - memoriesAsString, + reflections, isNewType, artifactMetaToolCall, }); diff --git a/apps/agents/src/open-canvas/nodes/rewrite-artifact/update-meta.ts b/apps/agents/src/open-canvas/nodes/rewrite-artifact/update-meta.ts index 1dcdc27a..3812e30a 100644 --- a/apps/agents/src/open-canvas/nodes/rewrite-artifact/update-meta.ts +++ b/apps/agents/src/open-canvas/nodes/rewrite-artifact/update-meta.ts @@ -8,8 +8,8 @@ import { import { getArtifactContent } from "@opencanvas/shared/utils/artifacts"; import { GET_TITLE_TYPE_REWRITE_ARTIFACT } from "../../prompts.js"; import { OPTIONALLY_UPDATE_ARTIFACT_META_SCHEMA } from "./schemas.js"; -import { getFormattedReflections } from "../../../utils.js"; import { z } from "zod"; +import { getReflections } from "../../../stores/reflections.js"; export async function optionallyUpdateArtifactMeta( state: typeof OpenCanvasGraphAnnotation.State, @@ -29,7 +29,10 @@ export async function optionallyUpdateArtifactMeta( ) .withConfig({ runName: "optionally_update_artifact_meta" }); - const memoriesAsString = await getFormattedReflections(config); + const reflections = await getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }); const currentArtifactContent = state.artifact ? getArtifactContent(state.artifact) @@ -42,7 +45,7 @@ export async function optionallyUpdateArtifactMeta( GET_TITLE_TYPE_REWRITE_ARTIFACT.replace( "{artifact}", formatArtifactContent(currentArtifactContent, true) - ).replace("{reflections}", memoriesAsString); + ).replace("{reflections}", reflections); const recentHumanMessage = state._messages.findLast( (message) => message.getType() === "human" diff --git a/apps/agents/src/open-canvas/nodes/rewrite-artifact/utils.ts b/apps/agents/src/open-canvas/nodes/rewrite-artifact/utils.ts index 736ac0bb..af6b6c23 100644 --- a/apps/agents/src/open-canvas/nodes/rewrite-artifact/utils.ts +++ b/apps/agents/src/open-canvas/nodes/rewrite-artifact/utils.ts @@ -51,14 +51,14 @@ const buildMetaPrompt = ( interface BuildPromptArgs { artifactContent: string; - memoriesAsString: string; + reflections: string; isNewType: boolean; artifactMetaToolCall: z.infer; } export const buildPrompt = ({ artifactContent, - memoriesAsString, + reflections, isNewType, artifactMetaToolCall, }: BuildPromptArgs) => { @@ -68,7 +68,7 @@ export const buildPrompt = ({ "{artifactContent}", artifactContent ) - .replace("{reflections}", memoriesAsString) + .replace("{reflections}", reflections) .replace("{updateMetaPrompt}", metaPrompt); }; diff --git a/apps/agents/src/open-canvas/nodes/rewriteArtifactTheme.ts b/apps/agents/src/open-canvas/nodes/rewriteArtifactTheme.ts index 08c461a0..14c0c758 100644 --- a/apps/agents/src/open-canvas/nodes/rewriteArtifactTheme.ts +++ b/apps/agents/src/open-canvas/nodes/rewriteArtifactTheme.ts @@ -8,13 +8,8 @@ import { isArtifactMarkdownContent, getArtifactContent, } from "@opencanvas/shared/utils/artifacts"; -import { ArtifactV3, Reflections } from "@opencanvas/shared/types"; -import { - ensureStoreInConfig, - formatReflections, - getModelConfig, - getModelFromConfig, -} from "../../utils.js"; +import { ArtifactV3 } from "@opencanvas/shared/types"; +import { getModelConfig, getModelFromConfig } from "../../utils.js"; import { ADD_EMOJIS_TO_ARTIFACT_PROMPT, CHANGE_ARTIFACT_LANGUAGE_PROMPT, @@ -27,6 +22,7 @@ import { OpenCanvasGraphReturnType, } from "../state.js"; import { AIMessage } from "@langchain/core/messages"; +import { getReflections } from "src/stores/reflections.js"; export const rewriteArtifactTheme = async ( state: typeof OpenCanvasGraphAnnotation.State, @@ -35,17 +31,10 @@ export const rewriteArtifactTheme = async ( const { modelName } = getModelConfig(config); const smallModel = await getModelFromConfig(config); - const store = ensureStoreInConfig(config); - const assistantId = config.configurable?.assistant_id; - if (!assistantId) { - throw new Error("`assistant_id` not found in configurable"); - } - const memoryNamespace = ["memories", assistantId]; - const memoryKey = "reflection"; - const memories = await store.get(memoryNamespace, memoryKey); - const memoriesAsString = memories?.value - ? formatReflections(memories.value as Reflections) - : "No reflections found."; + const reflections = await getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }); const currentArtifactContent = state.artifact ? getArtifactContent(state.artifact) @@ -117,7 +106,7 @@ export const rewriteArtifactTheme = async ( throw new Error("No theme selected"); } - formattedPrompt = formattedPrompt.replace("{reflections}", memoriesAsString); + formattedPrompt = formattedPrompt.replace("{reflections}", reflections); const newArtifactValues = await smallModel.invoke([ { role: "user", content: formattedPrompt }, diff --git a/apps/agents/src/open-canvas/nodes/updateArtifact.ts b/apps/agents/src/open-canvas/nodes/updateArtifact.ts index 2feabcab..955a0f5a 100644 --- a/apps/agents/src/open-canvas/nodes/updateArtifact.ts +++ b/apps/agents/src/open-canvas/nodes/updateArtifact.ts @@ -3,15 +3,9 @@ import { getArtifactContent, isArtifactCodeContent, } from "@opencanvas/shared/utils/artifacts"; -import { - ArtifactCodeV3, - ArtifactV3, - Reflections, -} from "@opencanvas/shared/types"; +import { ArtifactCodeV3, ArtifactV3 } from "@opencanvas/shared/types"; import { createContextDocumentMessages, - ensureStoreInConfig, - formatReflections, getModelConfig, getModelFromConfig, isUsingO1MiniModel, @@ -21,6 +15,7 @@ import { OpenCanvasGraphAnnotation, OpenCanvasGraphReturnType, } from "../state.js"; +import { getReflections } from "../../stores/reflections.js"; /** * Update an existing artifact based on the user's query. @@ -51,17 +46,10 @@ export const updateArtifact = async ( ); } - const store = ensureStoreInConfig(config); - const assistantId = config.configurable?.assistant_id; - if (!assistantId) { - throw new Error("`assistant_id` not found in configurable"); - } - const memoryNamespace = ["memories", assistantId]; - const memoryKey = "reflection"; - const memories = await store.get(memoryNamespace, memoryKey); - const memoriesAsString = memories?.value - ? formatReflections(memories.value as Reflections) - : "No reflections found."; + const reflections = await getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }); const currentArtifactContent = state.artifact ? getArtifactContent(state.artifact) @@ -105,7 +93,7 @@ export const updateArtifact = async ( ) .replace("{beforeHighlight}", beforeHighlight) .replace("{afterHighlight}", afterHighlight) - .replace("{reflections}", memoriesAsString); + .replace("{reflections}", reflections); const recentHumanMessage = state._messages.findLast( (message) => message.getType() === "human" diff --git a/apps/agents/src/reflection/index.ts b/apps/agents/src/reflection/index.ts index 6c8958db..13007a96 100644 --- a/apps/agents/src/reflection/index.ts +++ b/apps/agents/src/reflection/index.ts @@ -8,31 +8,23 @@ import { ReflectionGraphAnnotation, ReflectionGraphReturnType, } from "./state.js"; -import { Reflections } from "@opencanvas/shared/types"; import { REFLECT_SYSTEM_PROMPT, REFLECT_USER_PROMPT } from "./prompts.js"; import { z } from "zod"; -import { ensureStoreInConfig, formatReflections } from "../utils.js"; import { getArtifactContent, isArtifactMarkdownContent, } from "@opencanvas/shared/utils/artifacts"; +import { getReflections, setReflections } from "../stores/reflections.js"; +import { Reflections } from "@opencanvas/shared/types"; export const reflect = async ( state: typeof ReflectionGraphAnnotation.State, config: LangGraphRunnableConfig ): Promise => { - const store = ensureStoreInConfig(config); - const assistantId = config.configurable?.open_canvas_assistant_id; - if (!assistantId) { - throw new Error("`open_canvas_assistant_id` not found in configurable"); - } - const memoryNamespace = ["memories", assistantId]; - const memoryKey = "reflection"; - const memories = await store.get(memoryNamespace, memoryKey); - - const memoriesAsString = memories?.value - ? formatReflections(memories.value as Reflections) - : "No reflections found."; + const reflections = await getReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + }); const generateReflectionTool = { name: "generate_reflections", @@ -67,7 +59,7 @@ export const reflect = async ( const formattedSystemPrompt = REFLECT_SYSTEM_PROMPT.replace( "{artifact}", artifactContent ?? "No artifact found." - ).replace("{reflections}", memoriesAsString); + ).replace("{reflections}", reflections); const formattedUserPrompt = REFLECT_USER_PROMPT.replace( "{conversation}", @@ -92,12 +84,16 @@ export const reflect = async ( throw new Error("Reflection tool call failed."); } - const newMemories = { + const newMemories: Reflections = { styleRules: reflectionToolCall.args.styleRules, content: reflectionToolCall.args.content, }; - await store.put(memoryNamespace, memoryKey, newMemories); + await setReflections(config.store, { + assistantId: config.configurable?.assistant_id, + userId: config.configurable?.user_id, + reflections: newMemories, + }); return {}; }; diff --git a/apps/agents/src/stores/context-documents.ts b/apps/agents/src/stores/context-documents.ts new file mode 100644 index 00000000..d05f3c5c --- /dev/null +++ b/apps/agents/src/stores/context-documents.ts @@ -0,0 +1,59 @@ +import { BaseStore } from "@langchain/langgraph"; +import { ContextDocument } from "@opencanvas/shared/types"; +import { traceable } from "langsmith/traceable"; +import { constructContextDocumentsFields } from "@opencanvas/shared/stores/context-documents"; + +async function getContextDocumentsFunc( + store: BaseStore | undefined, + inputs: { + assistantId: string | undefined; + } +): Promise { + if (!store) { + throw new Error("No store found."); + } + const assistantId = inputs.assistantId; + if (!assistantId) { + throw new Error("`user_id` not found in configurable"); + } + + const { namespace, key } = constructContextDocumentsFields({ + assistantId, + }); + + const item = await store.get(namespace, key); + if (!item?.value?.documents) { + return []; + } + return item.value.documents; +} + +export const getContextDocuments = traceable(getContextDocumentsFunc, { + name: "get_context_documents", +}); + +async function setContextDocumentsFunc( + store: BaseStore | undefined, + inputs: { + assistantId: string | undefined; + documents: ContextDocument[]; + } +): Promise { + if (!store) { + throw new Error("No store found."); + } + const assistantId = inputs.assistantId; + if (!assistantId) { + throw new Error("`assistant_id` not found in configurable"); + } + + const { namespace, key } = constructContextDocumentsFields({ + assistantId, + }); + + await store.put(namespace, key, { documents: inputs.documents }); +} + +export const setContextDocuments = traceable(setContextDocumentsFunc, { + name: "set_context_documents", +}); diff --git a/apps/agents/src/stores/custom-actions.ts b/apps/agents/src/stores/custom-actions.ts new file mode 100644 index 00000000..e4f9ae3a --- /dev/null +++ b/apps/agents/src/stores/custom-actions.ts @@ -0,0 +1,60 @@ +import { BaseStore } from "@langchain/langgraph"; +import { CustomQuickAction } from "@opencanvas/shared/types"; +import { traceable } from "langsmith/traceable"; + +async function getCustomActionsFunc( + store: BaseStore | undefined, + inputs: { + userId: string | undefined; + customQuickActionId: string; + } +): Promise { + if (!store) { + throw new Error("No store found."); + } + const userId = inputs.userId; + if (!userId) { + throw new Error("`user_id` not found in configurable"); + } + + const customActionsNamespace = ["custom_actions", userId]; + const actionsKey = "actions"; + const actions = await store.get(customActionsNamespace, actionsKey); + const customQuickAction = actions?.value[inputs.customQuickActionId] as + | CustomQuickAction + | undefined; + if (!customQuickAction) { + throw new Error( + `No custom quick action found from ID ${inputs.customQuickActionId}` + ); + } + return customQuickAction; +} + +export const getCustomActions = traceable(getCustomActionsFunc, { + name: "get_custom_actions", +}); + +async function setCustomActionsFunc( + store: BaseStore | undefined, + inputs: { + userId: string | undefined; + customQuickAction: CustomQuickAction; + } +): Promise { + if (!store) { + throw new Error("No store found."); + } + const userId = inputs.userId; + if (!userId) { + throw new Error("`user_id` not found in configurable"); + } + + const customActionsNamespace = ["custom_actions", userId]; + const actionsKey = "actions"; + await store.put(customActionsNamespace, actionsKey, inputs.customQuickAction); +} + +export const setCustomActions = traceable(setCustomActionsFunc, { + name: "set_custom_actions", +}); diff --git a/apps/agents/src/stores/reflections.ts b/apps/agents/src/stores/reflections.ts new file mode 100644 index 00000000..5c881482 --- /dev/null +++ b/apps/agents/src/stores/reflections.ts @@ -0,0 +1,72 @@ +import { BaseStore } from "@langchain/langgraph"; +import { formatReflections } from "../utils.js"; +import { Reflections } from "@opencanvas/shared/types"; +import { traceable } from "langsmith/traceable"; +import { constructReflectionFields } from "@opencanvas/shared/stores/reflection"; + +async function getReflectionsFunc( + store: BaseStore | undefined, + inputs: { + assistantId: string | undefined; + userId: string | undefined; + } +): Promise { + if (!store) { + throw new Error("No store found."); + } + const assistantId = inputs.assistantId; + if (!assistantId) { + throw new Error("`assistant_id` not found in configurable"); + } + const userId = inputs.userId; + if (!userId) { + throw new Error("`user_id` not found in configurable"); + } + + const { namespace, key } = constructReflectionFields({ + userId, + assistantId, + }); + + const memories = await store.get(namespace, key); + const memoriesAsString = memories?.value + ? formatReflections(memories.value as Reflections) + : "No reflections found."; + + return memoriesAsString; +} + +export const getReflections = traceable(getReflectionsFunc, { + name: "get_reflections", +}); + +async function setReflectionsFunc( + store: BaseStore | undefined, + inputs: { + assistantId: string | undefined; + userId: string | undefined; + reflections: Reflections; + } +): Promise { + if (!store) { + throw new Error("No store found."); + } + const assistantId = inputs.assistantId; + if (!assistantId) { + throw new Error("`assistant_id` not found in configurable"); + } + const userId = inputs.userId; + if (!userId) { + throw new Error("`user_id` not found in configurable"); + } + + const { namespace, key } = constructReflectionFields({ + userId, + assistantId, + }); + await store.put(namespace, key, inputs.reflections); +} + +export const setReflections = traceable(setReflectionsFunc, { + name: "set_reflections", +}); diff --git a/apps/agents/src/utils.ts b/apps/agents/src/utils.ts index fe3c8c2c..42a7bbdc 100644 --- a/apps/agents/src/utils.ts +++ b/apps/agents/src/utils.ts @@ -18,15 +18,13 @@ import { MessageContentComplex, MessageFieldWithRole, } from "@langchain/core/messages"; -import { - CONTEXT_DOCUMENTS_NAMESPACE, - OC_WEB_SEARCH_RESULTS_MESSAGE_KEY, -} from "@opencanvas/shared/constants"; +import { OC_WEB_SEARCH_RESULTS_MESSAGE_KEY } from "@opencanvas/shared/constants"; import { TEMPERATURE_EXCLUDED_MODELS, LANGCHAIN_USER_ONLY_MODELS, } from "@opencanvas/shared/models"; import { createClient, Session, User } from "@supabase/supabase-js"; +import { getContextDocuments } from "./stores/context-documents.js"; export const formatReflections = ( reflections: Reflections, @@ -109,27 +107,6 @@ export const ensureStoreInConfig = ( return config.store; }; -export async function getFormattedReflections( - config: LangGraphRunnableConfig -): Promise { - if (!config.store) { - return "No reflections found."; - } - const store = ensureStoreInConfig(config); - const assistantId = config.configurable?.assistant_id; - if (!assistantId) { - throw new Error("`assistant_id` not found in configurable"); - } - const memoryNamespace = ["memories", assistantId]; - const memoryKey = "reflection"; - const memories = await store.get(memoryNamespace, memoryKey); - const memoriesAsString = memories?.value - ? formatReflections(memories.value as Reflections) - : "No reflections found."; - - return memoriesAsString; -} - export const formatArtifactContent = ( content: ArtifactMarkdownV3 | ArtifactCodeV3, shortenContent?: boolean @@ -512,19 +489,6 @@ export async function createContextDocumentMessagesOpenAI( return await Promise.all(messagesPromises); } -async function getContextDocuments( - config: LangGraphRunnableConfig -): Promise { - const store = config.store; - const assistantId = config.configurable?.assistant_id; - if (!store || !assistantId) { - return []; - } - - const result = await store.get(CONTEXT_DOCUMENTS_NAMESPACE, assistantId); - return result?.value?.documents || []; -} - export async function createContextDocumentMessages( config: LangGraphRunnableConfig, contextDocuments?: ContextDocument[] @@ -533,7 +497,9 @@ export async function createContextDocumentMessages( const documents: ContextDocument[] = contextDocuments || []; if (!documents.length && config) { - const docs = await getContextDocuments(config); + const docs = await getContextDocuments(config.store, { + assistantId: config.configurable?.assistant_id, + }); documents.push(...docs); } diff --git a/apps/web/src/app/api/[..._path]/route.ts b/apps/web/src/app/api/[..._path]/route.ts deleted file mode 100644 index 3e062a0e..00000000 --- a/apps/web/src/app/api/[..._path]/route.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { LANGGRAPH_API_URL } from "../../../constants"; -import { NextRequest, NextResponse } from "next/server"; -import { Session, User } from "@supabase/supabase-js"; -import { verifyUserAuthenticated } from "../../../lib/supabase/verify_user_server"; - -function getCorsHeaders() { - return { - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Headers": "*", - }; -} - -async function handleRequest(req: NextRequest, method: string) { - let session: Session | undefined; - let user: User | undefined; - try { - const authRes = await verifyUserAuthenticated(); - session = authRes?.session; - user = authRes?.user; - if (!session || !user) { - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - } catch (e) { - console.error("Failed to fetch user", e); - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - - try { - const path = req.nextUrl.pathname.replace(/^\/?api\//, ""); - const url = new URL(req.url); - const searchParams = new URLSearchParams(url.search); - searchParams.delete("_path"); - searchParams.delete("nxtP_path"); - const queryString = searchParams.toString() - ? `?${searchParams.toString()}` - : ""; - - const options: RequestInit = { - method, - headers: { - "x-api-key": process.env.LANGCHAIN_API_KEY || "", - }, - }; - - if (["POST", "PUT", "PATCH"].includes(method)) { - options.headers = { - ...options.headers, - "Content-Type": "application/json", - }; - const bodyText = await req.text(); - - if (typeof bodyText === "string" && bodyText.length > 0) { - const parsedBody = JSON.parse(bodyText); - parsedBody.config = parsedBody.config || {}; - parsedBody.config.configurable = { - ...parsedBody.config.configurable, - supabase_session: session, - supabase_user_id: user.id, - }; - options.body = JSON.stringify(parsedBody); - } else { - options.body = bodyText; - } - } - - const res = await fetch( - `${LANGGRAPH_API_URL}/${path}${queryString}`, - options - ); - - if (res.status >= 400) { - console.error( - "ERROR IN PROXY", - `${LANGGRAPH_API_URL}/${path}${queryString}`, - res.status, - res.statusText - ); - return new Response(res.body, { - status: res.status, - statusText: res.statusText, - }); - } - - const headers = new Headers({ - ...getCorsHeaders(), - }); - // Safely add headers from the original response - res.headers.forEach((value, key) => { - try { - headers.set(key, value); - } catch (error) { - console.warn(`Failed to set header: ${key}`, error); - } - }); - - return new Response(res.body, { - status: res.status, - statusText: res.statusText, - headers, - }); - } catch (e: any) { - console.error("Error in proxy"); - console.error(e); - console.error("\n\n\nEND ERROR\n\n"); - return NextResponse.json({ error: e.message }, { status: e.status ?? 500 }); - } -} - -export const GET = (req: NextRequest) => handleRequest(req, "GET"); -export const POST = (req: NextRequest) => handleRequest(req, "POST"); -export const PUT = (req: NextRequest) => handleRequest(req, "PUT"); -export const PATCH = (req: NextRequest) => handleRequest(req, "PATCH"); -export const DELETE = (req: NextRequest) => handleRequest(req, "DELETE"); - -// Add a new OPTIONS handler -export const OPTIONS = () => { - return new NextResponse(null, { - status: 204, - headers: { - ...getCorsHeaders(), - }, - }); -}; diff --git a/apps/web/src/app/api/runs/share/route.ts b/apps/web/src/app/api/runs/share/route.ts index 5e9709e1..c281315d 100644 --- a/apps/web/src/app/api/runs/share/route.ts +++ b/apps/web/src/app/api/runs/share/route.ts @@ -43,24 +43,10 @@ export async function POST(req: NextRequest) { apiKey: process.env.LANGCHAIN_API_KEY, }); - try { - const sharedRunURL = await shareRunWithRetry(lsClient, runId); + const sharedRunURL = await shareRunWithRetry(lsClient, runId); - return new NextResponse(JSON.stringify({ sharedRunURL }), { - status: 200, - headers: { "Content-Type": "application/json" }, - }); - } catch (error) { - console.error( - `Failed to share run with id ${runId} after ${MAX_RETRIES} attempts:\n`, - error - ); - return new NextResponse( - JSON.stringify({ error: "Failed to share run after multiple attempts." }), - { - status: 500, - headers: { "Content-Type": "application/json" }, - } - ); - } + return new NextResponse(JSON.stringify({ sharedRunURL }), { + status: 200, + headers: { "Content-Type": "application/json" }, + }); } diff --git a/apps/web/src/app/api/store/delete/id/route.ts b/apps/web/src/app/api/store/delete/id/route.ts deleted file mode 100644 index c2a8cb43..00000000 --- a/apps/web/src/app/api/store/delete/id/route.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { Client } from "@langchain/langgraph-sdk"; -import { LANGGRAPH_API_URL } from "@/constants"; -import { verifyUserAuthenticated } from "../../../../../lib/supabase/verify_user_server"; - -export async function POST(req: NextRequest) { - try { - const authRes = await verifyUserAuthenticated(); - if (!authRes?.user) { - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - } catch (e) { - console.error("Failed to fetch user", e); - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - - const { namespace, key, id } = await req.json(); - - const lgClient = new Client({ - apiKey: process.env.LANGCHAIN_API_KEY, - apiUrl: LANGGRAPH_API_URL, - }); - - try { - const currentItems = await lgClient.store.getItem(namespace, key); - if (!currentItems?.value) { - return new NextResponse( - JSON.stringify({ - error: "Item not found", - success: false, - }), - { - status: 404, - headers: { "Content-Type": "application/json" }, - } - ); - } - - const newValues = Object.fromEntries( - Object.entries(currentItems.value).filter(([k]) => k !== id) - ); - - await lgClient.store.putItem(namespace, key, newValues); - - return new NextResponse(JSON.stringify({ success: true }), { - status: 200, - headers: { "Content-Type": "application/json" }, - }); - } catch (_) { - return new NextResponse( - JSON.stringify({ error: "Failed to share run after multiple attempts." }), - { - status: 500, - headers: { "Content-Type": "application/json" }, - } - ); - } -} diff --git a/apps/web/src/app/api/store/delete/route.ts b/apps/web/src/app/api/store/delete/route.ts deleted file mode 100644 index 9505381e..00000000 --- a/apps/web/src/app/api/store/delete/route.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { Client } from "@langchain/langgraph-sdk"; -import { LANGGRAPH_API_URL } from "@/constants"; -import { verifyUserAuthenticated } from "../../../../lib/supabase/verify_user_server"; - -export async function POST(req: NextRequest) { - try { - const authRes = await verifyUserAuthenticated(); - if (!authRes?.user) { - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - } catch (e) { - console.error("Failed to fetch user", e); - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - - const { namespace, key } = await req.json(); - - const lgClient = new Client({ - apiKey: process.env.LANGCHAIN_API_KEY, - apiUrl: LANGGRAPH_API_URL, - }); - - try { - await lgClient.store.deleteItem(namespace, key); - - return new NextResponse(JSON.stringify({ success: true }), { - status: 200, - headers: { "Content-Type": "application/json" }, - }); - } catch (_) { - return new NextResponse( - JSON.stringify({ error: "Failed to share run after multiple attempts." }), - { - status: 500, - headers: { "Content-Type": "application/json" }, - } - ); - } -} diff --git a/apps/web/src/app/api/store/get/route.ts b/apps/web/src/app/api/store/get/route.ts deleted file mode 100644 index 19d3c4d8..00000000 --- a/apps/web/src/app/api/store/get/route.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { Client } from "@langchain/langgraph-sdk"; -import { LANGGRAPH_API_URL } from "@/constants"; -import { verifyUserAuthenticated } from "../../../../lib/supabase/verify_user_server"; - -export async function POST(req: NextRequest) { - try { - const authRes = await verifyUserAuthenticated(); - if (!authRes?.user) { - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - } catch (e) { - console.error("Failed to fetch user", e); - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - - const { namespace, key } = await req.json(); - - const lgClient = new Client({ - apiKey: process.env.LANGCHAIN_API_KEY, - apiUrl: LANGGRAPH_API_URL, - }); - - try { - const item = await lgClient.store.getItem(namespace, key); - - return new NextResponse(JSON.stringify({ item }), { - status: 200, - headers: { "Content-Type": "application/json" }, - }); - } catch (_) { - return new NextResponse( - JSON.stringify({ error: "Failed to share run after multiple attempts." }), - { - status: 500, - headers: { "Content-Type": "application/json" }, - } - ); - } -} diff --git a/apps/web/src/app/api/store/put/route.ts b/apps/web/src/app/api/store/put/route.ts deleted file mode 100644 index 9a394c31..00000000 --- a/apps/web/src/app/api/store/put/route.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NextRequest, NextResponse } from "next/server"; -import { Client } from "@langchain/langgraph-sdk"; -import { LANGGRAPH_API_URL } from "@/constants"; -import { verifyUserAuthenticated } from "../../../../lib/supabase/verify_user_server"; - -export async function POST(req: NextRequest) { - try { - const authRes = await verifyUserAuthenticated(); - if (!authRes?.user) { - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - } catch (e) { - console.error("Failed to fetch user", e); - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - - const { namespace, key, value } = await req.json(); - - const lgClient = new Client({ - apiKey: process.env.LANGCHAIN_API_KEY, - apiUrl: LANGGRAPH_API_URL, - }); - - try { - await lgClient.store.putItem(namespace, key, value); - - return new NextResponse(JSON.stringify({ success: true }), { - status: 200, - headers: { "Content-Type": "application/json" }, - }); - } catch (_) { - return new NextResponse( - JSON.stringify({ error: "Failed to share run after multiple attempts." }), - { - status: 500, - headers: { "Content-Type": "application/json" }, - } - ); - } -} diff --git a/apps/web/src/constants.ts b/apps/web/src/constants.ts index 0f4fa5bb..7155445a 100644 --- a/apps/web/src/constants.ts +++ b/apps/web/src/constants.ts @@ -1,5 +1,6 @@ export const LANGGRAPH_API_URL = - process.env.LANGGRAPH_API_URL ?? "http://localhost:54367"; + process.env.NEXT_PUBLIC_LANGGRAPH_API_URL ?? "http://localhost:54367"; +// process.env.LANGGRAPH_API_URL ?? "http://localhost:54367"; // v2 is tied to the 'open-canvas-prod' deployment. export const ASSISTANT_ID_COOKIE = "oc_assistant_id_v2"; // export const ASSISTANT_ID_COOKIE = "oc_assistant_id"; diff --git a/apps/web/src/contexts/AssistantContext.tsx b/apps/web/src/contexts/AssistantContext.tsx index bd101079..920f63d4 100644 --- a/apps/web/src/contexts/AssistantContext.tsx +++ b/apps/web/src/contexts/AssistantContext.tsx @@ -110,7 +110,7 @@ export function AssistantProvider({ children }: { children: ReactNode }) { const getAssistants = async (userId: string): Promise => { setIsLoadingAllAssistants(true); try { - const client = createClient(); + const client = await createClient(); const response = await client.assistants.search({ metadata: { user_id: userId, @@ -134,7 +134,7 @@ export function AssistantProvider({ children }: { children: ReactNode }) { const deleteAssistant = async (assistantId: string): Promise => { setIsDeletingAssistant(true); try { - const client = createClient(); + const client = await createClient(); await client.assistants.delete(assistantId); if (selectedAssistant?.assistant_id === assistantId) { @@ -167,7 +167,7 @@ export function AssistantProvider({ children }: { children: ReactNode }) { }: CreateCustomAssistantArgs): Promise => { setIsCreatingAssistant(true); try { - const client = createClient(); + const client = await createClient(); const { tools, systemPrompt, name, documents, ...metadata } = newAssistant; const createdAssistant = await client.assistants.create({ @@ -210,7 +210,7 @@ export function AssistantProvider({ children }: { children: ReactNode }) { }: EditCustomAssistantArgs): Promise => { setIsEditingAssistant(true); try { - const client = createClient(); + const client = await createClient(); const { tools, systemPrompt, name, documents, ...metadata } = editedAssistant; const response = await client.assistants.update(assistantId, { @@ -308,7 +308,7 @@ export function AssistantProvider({ children }: { children: ReactNode }) { return; } setIsLoadingAllAssistants(true); - const client = createClient(); + const client = await createClient(); let userAssistants: Assistant[] = []; const assistantIdCookie = getCookie(ASSISTANT_ID_COOKIE); diff --git a/apps/web/src/contexts/GraphContext.tsx b/apps/web/src/contexts/GraphContext.tsx index 645d5b28..5e7f770d 100644 --- a/apps/web/src/contexts/GraphContext.tsx +++ b/apps/web/src/contexts/GraphContext.tsx @@ -62,6 +62,7 @@ import { useThreadContext } from "./ThreadProvider"; import { useAssistantContext } from "./AssistantContext"; import { StreamWorkerService } from "@/workers/graph-stream/streamWorker"; import { useQueryState } from "nuqs"; +import { createSupabaseClient } from "@/lib/supabase/client"; interface GraphData { runId: string | undefined; @@ -92,6 +93,15 @@ interface GraphData { setUpdateRenderedArtifactRequired: Dispatch>; } +async function getSession() { + const supabaseClient = createSupabaseClient(); + const session = await supabaseClient.auth.getSession(); + if (!session.data.session) { + throw new Error("Failed to access session."); + } + return session.data.session; +} + type GraphContentType = { graphData: GraphData; }; @@ -245,7 +255,7 @@ export function GraphProvider({ children }: { children: ReactNode }) { if (isStreaming) return; try { - const client = createClient(); + const client = await createClient(); await client.threads.updateState(threadId, { values: { artifact: artifactToUpdate, @@ -347,12 +357,14 @@ export function GraphProvider({ children }: { children: ReactNode }) { try { const workerService = new StreamWorkerService(); + const session = await getSession(); const stream = workerService.streamData({ threadId: newThread.thread_id, assistantId: assistantsData.selectedAssistant.assistant_id, input, modelName: threadData.modelName, modelConfigs: threadData.modelConfigs, + session, }); // Variables to keep track of content specific to this stream diff --git a/apps/web/src/contexts/ThreadProvider.tsx b/apps/web/src/contexts/ThreadProvider.tsx index b4128a42..8c161426 100644 --- a/apps/web/src/contexts/ThreadProvider.tsx +++ b/apps/web/src/contexts/ThreadProvider.tsx @@ -146,7 +146,7 @@ export function ThreadProvider({ children }: { children: ReactNode }) { }); return; } - const client = createClient(); + const client = await createClient(); setCreateThreadLoading(true); try { @@ -194,7 +194,7 @@ export function ThreadProvider({ children }: { children: ReactNode }) { setIsUserThreadsLoading(true); try { - const client = createClient(); + const client = await createClient(); const userThreads = await client.threads.search({ metadata: { @@ -230,7 +230,7 @@ export function ThreadProvider({ children }: { children: ReactNode }) { // threads to update UI. void createThread(); } - const client = createClient(); + const client = await createClient(); try { await client.threads.delete(id); } catch (e) { @@ -240,7 +240,7 @@ export function ThreadProvider({ children }: { children: ReactNode }) { const getThread = async (id: string): Promise => { try { - const client = createClient(); + const client = await createClient(); return client.threads.get(id); } catch (e) { console.error("Failed to get thread by ID.", id, e); diff --git a/apps/web/src/hooks/useStore.tsx b/apps/web/src/hooks/useStore.tsx index 07ea40ac..6bbed193 100644 --- a/apps/web/src/hooks/useStore.tsx +++ b/apps/web/src/hooks/useStore.tsx @@ -5,8 +5,21 @@ import { } from "@opencanvas/shared/types"; import { useState } from "react"; import { useToast } from "./use-toast"; -import { Item } from "@langchain/langgraph"; -import { CONTEXT_DOCUMENTS_NAMESPACE } from "@opencanvas/shared/constants"; +import { createClient } from "./utils"; +import { createSupabaseClient } from "@/lib/supabase/client"; +import { constructReflectionFields } from "@opencanvas/shared/stores/reflection"; +import { constructContextDocumentsFields } from "@opencanvas/shared/stores/context-documents"; + +async function getUserId(): Promise { + const supabaseClient = createSupabaseClient(); + let userId: string | undefined; + try { + userId = (await supabaseClient.auth.getUser()).data.user?.id; + } catch (e) { + console.error("Failed to get user ID", e); + } + return userId; +} export function useStore() { const { toast } = useToast(); @@ -18,22 +31,23 @@ export function useStore() { const getReflections = async (assistantId: string): Promise => { setIsLoadingReflections(true); - const res = await fetch("/api/store/get", { - method: "POST", - body: JSON.stringify({ - namespace: ["memories", assistantId], - key: "reflection", - }), - headers: { - "Content-Type": "application/json", - }, - }); - if (!res.ok) { + const client = await createClient(); + const userId = await getUserId(); + if (!userId) { + toast({ + title: "Failed to get user ID", + description: "Please try again later.", + }); return; } - const { item } = await res.json(); + const { namespace, key } = constructReflectionFields({ + userId, + assistantId, + }); + + const item = await client.store.getItem(namespace, key); if (!item?.value) { setIsLoadingReflections(false); @@ -65,31 +79,34 @@ export function useStore() { }; const deleteReflections = async (assistantId: string): Promise => { - const res = await fetch("/api/store/delete", { - method: "POST", - body: JSON.stringify({ - namespace: ["memories", assistantId], - key: "reflection", - }), - headers: { - "Content-Type": "application/json", - }, - }); + try { + const client = await createClient(); + const userId = await getUserId(); + if (!userId) { + toast({ + title: "Failed to get user ID", + description: "Please try again later.", + }); + return false; + } - if (!res.ok) { - return false; - } + const { namespace, key } = constructReflectionFields({ + userId, + assistantId, + }); + + await client.store.deleteItem(namespace, key); - const { success } = await res.json(); - if (success) { setReflections(undefined); - } else { + return true; + } catch (e) { + console.error(e); toast({ title: "Failed to delete reflections", description: "Please try again later.", }); + return false; } - return success; }; const getCustomQuickActions = async ( @@ -97,22 +114,14 @@ export function useStore() { ): Promise => { setIsLoadingQuickActions(true); try { - const res = await fetch("/api/store/get", { - method: "POST", - body: JSON.stringify({ - namespace: ["custom_actions", userId], - key: "actions", - }), - headers: { - "Content-Type": "application/json", - }, - }); - - if (!res.ok) { - return undefined; - } + const client = await createClient(); + const customActionsNamespace = ["custom_actions", userId]; + const actionsKey = "actions"; + const item = await client.store.getItem( + customActionsNamespace, + actionsKey + ); - const { item } = await res.json(); if (!item?.value) { return undefined; } @@ -127,34 +136,33 @@ export function useStore() { rest: CustomQuickAction[], userId: string ): Promise => { - const valuesWithoutDeleted = rest.reduce>( - (acc, action) => { + try { + const valuesWithoutDeleted = rest.reduce< + Record + >((acc, action) => { if (action.id !== id) { acc[action.id] = action; } return acc; - }, - {} - ); - - const res = await fetch("/api/store/put", { - method: "POST", - body: JSON.stringify({ - namespace: ["custom_actions", userId], - key: "actions", - value: valuesWithoutDeleted, - }), - headers: { - "Content-Type": "application/json", - }, - }); - - if (!res.ok) { + }, {}); + + const client = await createClient(); + const customActionsNamespace = ["custom_actions", userId]; + const actionsKey = "actions"; + await client.store.putItem( + customActionsNamespace, + actionsKey, + valuesWithoutDeleted + ); + return true; + } catch (e) { + console.error(e); + toast({ + title: "Failed to delete custom quick action", + description: "Please try again later.", + }); return false; } - - const { success } = await res.json(); - return success; }; const createCustomQuickAction = async ( @@ -162,33 +170,32 @@ export function useStore() { rest: CustomQuickAction[], userId: string ): Promise => { - const newValue = rest.reduce>( - (acc, action) => { - acc[action.id] = action; - return acc; - }, - {} - ); - - newValue[newAction.id] = newAction; - const res = await fetch("/api/store/put", { - method: "POST", - body: JSON.stringify({ - namespace: ["custom_actions", userId], - key: "actions", - value: newValue, - }), - headers: { - "Content-Type": "application/json", - }, - }); + try { + const client = await createClient(); - if (!res.ok) { + const customActionsNamespace = ["custom_actions", userId]; + const actionsKey = "actions"; + + const newValue = rest.reduce>( + (acc, action) => { + acc[action.id] = action; + return acc; + }, + {} + ); + + newValue[newAction.id] = newAction; + + await client.store.putItem(customActionsNamespace, actionsKey, newValue); + return true; + } catch (e) { + console.error(e); + toast({ + title: "Failed to create custom quick action", + description: "Please try again later.", + }); return false; } - - const { success } = await res.json(); - return success; }; const editCustomQuickAction = async ( @@ -196,33 +203,31 @@ export function useStore() { rest: CustomQuickAction[], userId: string ): Promise => { - const newValue = rest.reduce>( - (acc, action) => { - acc[action.id] = action; - return acc; - }, - {} - ); - - newValue[editedAction.id] = editedAction; - const res = await fetch("/api/store/put", { - method: "POST", - body: JSON.stringify({ - namespace: ["custom_actions", userId], - key: "actions", - value: newValue, - }), - headers: { - "Content-Type": "application/json", - }, - }); + try { + const client = await createClient(); - if (!res.ok) { + const customActionsNamespace = ["custom_actions", userId]; + const actionsKey = "actions"; + + const newValue = rest.reduce>( + (acc, action) => { + acc[action.id] = action; + return acc; + }, + {} + ); + + newValue[editedAction.id] = editedAction; + await client.store.putItem(customActionsNamespace, actionsKey, newValue); + return true; + } catch (e) { + console.error(e); + toast({ + title: "Failed to edit custom quick action", + description: "Please try again later.", + }); return false; } - - const { success } = await res.json(); - return success; }; const putContextDocuments = async ({ @@ -233,59 +238,45 @@ export function useStore() { documents: ContextDocument[]; }): Promise => { try { - const res = await fetch("/api/store/put", { - method: "POST", - body: JSON.stringify({ - namespace: CONTEXT_DOCUMENTS_NAMESPACE, - key: assistantId, - value: { - documents, - }, - }), - headers: { - "Content-Type": "application/json", - }, + const client = await createClient(); + const { namespace, key } = constructContextDocumentsFields({ + assistantId, }); - if (!res.ok) { - throw new Error( - "Failed to put context documents" + res.statusText + res.status - ); - } + await client.store.putItem(namespace, key, { + documents, + }); } catch (e) { - console.error("Failed to put context documents.\n", e); + console.error(e); + toast({ + title: "Failed to set context documents.", + description: "Please try again later.", + }); } }; const getContextDocuments = async ( assistantId: string ): Promise => { - const res = await fetch("/api/store/get", { - method: "POST", - body: JSON.stringify({ - namespace: CONTEXT_DOCUMENTS_NAMESPACE, - key: assistantId, - }), - headers: { - "Content-Type": "application/json", - }, - }); + try { + const client = await createClient(); + const { namespace, key } = constructContextDocumentsFields({ + assistantId, + }); - if (!res.ok) { - console.error( - "Failed to get context documents", - res.statusText, - res.status - ); - return undefined; - } + const item = await client.store.getItem(namespace, key); + if (!item?.value?.documents) { + return undefined; + } - const { item }: { item: Item | null } = await res.json(); - if (!item?.value?.documents) { - return undefined; + return item.value.documents; + } catch (e) { + console.error(e); + toast({ + title: "Failed to get context documents.", + description: "Please try again later.", + }); } - - return item?.value?.documents; }; return { diff --git a/apps/web/src/hooks/utils.ts b/apps/web/src/hooks/utils.ts index b355ae1e..09309020 100644 --- a/apps/web/src/hooks/utils.ts +++ b/apps/web/src/hooks/utils.ts @@ -1,8 +1,24 @@ +import { LANGGRAPH_API_URL } from "@/constants"; +import { createSupabaseClient } from "@/lib/supabase/client"; import { Client } from "@langchain/langgraph-sdk"; +import { Session } from "@supabase/supabase-js"; + +export const createClient = async (session?: Session) => { + let bearerToken: string | undefined = session?.access_token; + + if (!bearerToken) { + const supabaseClient = createSupabaseClient(); + const { + data: { session }, + } = await supabaseClient.auth.getSession(); + bearerToken = session?.access_token; + } + if (!bearerToken) { + throw new Error("Failed to access JWT token."); + } -export const createClient = () => { - const apiUrl = process.env.NEXT_PUBLIC_API_URL ?? "http://localhost:3000/api"; return new Client({ - apiUrl, + apiUrl: LANGGRAPH_API_URL, + defaultHeaders: { Authorization: `Bearer ${bearerToken}` }, }); }; diff --git a/apps/web/src/lib/supabase/client.ts b/apps/web/src/lib/supabase/client.ts index 0f2fb747..7369a86e 100644 --- a/apps/web/src/lib/supabase/client.ts +++ b/apps/web/src/lib/supabase/client.ts @@ -10,6 +10,12 @@ export function createSupabaseClient() { return createBrowserClient( process.env.NEXT_PUBLIC_SUPABASE_URL, - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY, + { + auth: { + detectSessionInUrl: false, + persistSession: false, + }, + } ); } diff --git a/apps/web/src/lib/supabase/verify_user_server.ts b/apps/web/src/lib/supabase/verify_user_server.ts deleted file mode 100644 index f85cad59..00000000 --- a/apps/web/src/lib/supabase/verify_user_server.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Session, User } from "@supabase/supabase-js"; -import { createClient } from "./server"; - -export async function verifyUserAuthenticated(): Promise< - { user: User; session: Session } | undefined -> { - const supabase = createClient(); - const { - data: { user }, - } = await supabase.auth.getUser(); - const { - data: { session }, - } = await supabase.auth.getSession(); - if (!user || !session) { - return undefined; - } - return { user, session }; -} diff --git a/apps/web/src/workers/graph-stream/stream.worker.ts b/apps/web/src/workers/graph-stream/stream.worker.ts index 8d95b788..479b6f1c 100644 --- a/apps/web/src/workers/graph-stream/stream.worker.ts +++ b/apps/web/src/workers/graph-stream/stream.worker.ts @@ -6,10 +6,10 @@ const ctx: Worker = self as any; ctx.addEventListener("message", async (event: MessageEvent) => { try { - const { threadId, assistantId, input, modelName, modelConfigs } = + const { threadId, assistantId, input, modelName, modelConfigs, session } = event.data; - const client = createClient(); + const client = await createClient(session); const stream = client.runs.stream(threadId, assistantId, { input: input as Record, @@ -18,6 +18,8 @@ ctx.addEventListener("message", async (event: MessageEvent) => { configurable: { customModelName: modelName, modelConfig: modelConfigs[modelName as keyof typeof modelConfigs], + supabase_session: session, + supabase_user_id: session?.user.id, }, }, }); diff --git a/apps/web/src/workers/graph-stream/streamWorker.types.ts b/apps/web/src/workers/graph-stream/streamWorker.types.ts index b16fc844..bff490dc 100644 --- a/apps/web/src/workers/graph-stream/streamWorker.types.ts +++ b/apps/web/src/workers/graph-stream/streamWorker.types.ts @@ -1,5 +1,6 @@ import { ALL_MODEL_NAMES } from "@opencanvas/shared/models"; import { CustomModelConfig, GraphInput } from "@opencanvas/shared/types"; +import { Session } from "@supabase/supabase-js"; export interface StreamWorkerMessage { type: "chunk" | "done" | "error"; @@ -13,4 +14,5 @@ export interface StreamConfig { input: GraphInput; modelName: ALL_MODEL_NAMES; modelConfigs: Record; + session: Session; } diff --git a/langgraph.json b/langgraph.json index 897ca701..bdf09a9b 100644 --- a/langgraph.json +++ b/langgraph.json @@ -10,5 +10,8 @@ "summarizer": "./apps/agents/src/summarizer/index.ts:graph", "web_search": "./apps/agents/src/web-search/index.ts:graph" }, - "env": ".env" + "env": ".env", + "auth": { + "path": "./apps/agents/src/auth/index.ts:auth" + } } \ No newline at end of file diff --git a/package.json b/package.json index f9ed6305..59f0c8d4 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,9 @@ "prettier": "^3.3.3" }, "resolutions": { - "@langchain/core": "^0.3.38" + "@langchain/core": "^0.3.38", + "@langchain/langgraph-api": "http://localhost:3123/18/@langchain/langgraph-api", + "@langchain/langgraph-cli": "http://localhost:3123/18/@langchain/langgraph-cli", + "@langchain/langgraph-sdk": "http://localhost:3123/18/@langchain/langgraph-sdk" } } diff --git a/packages/shared/src/stores/context-documents.ts b/packages/shared/src/stores/context-documents.ts new file mode 100644 index 00000000..bff0e153 --- /dev/null +++ b/packages/shared/src/stores/context-documents.ts @@ -0,0 +1,17 @@ +import { CONTEXT_DOCUMENTS_NAMESPACE } from "../constants.js"; +import { StoreFields } from "./types.js"; + +/** + * Constructs the store fields for context documents. + * + * @param inputs The inputs for the store fields. + * @returns The store fields for context documents. + */ +export function constructContextDocumentsFields(inputs: { + assistantId: string; +}): StoreFields { + return { + namespace: CONTEXT_DOCUMENTS_NAMESPACE, + key: inputs.assistantId, + }; +} diff --git a/packages/shared/src/stores/custom-actions.ts b/packages/shared/src/stores/custom-actions.ts new file mode 100644 index 00000000..904c700a --- /dev/null +++ b/packages/shared/src/stores/custom-actions.ts @@ -0,0 +1,16 @@ +import { StoreFields } from "./types.js"; + +/** + * Constructs the store fields for custom actions. + * + * @param inputs The inputs for the store fields. + * @returns The store fields for custom actions. + */ +export function constructCustomActionsFields(inputs: { + userId: string; +}): StoreFields { + return { + namespace: ["custom_actions", inputs.userId], + key: "actions", + }; +} diff --git a/packages/shared/src/stores/reflection.ts b/packages/shared/src/stores/reflection.ts new file mode 100644 index 00000000..5cb274c9 --- /dev/null +++ b/packages/shared/src/stores/reflection.ts @@ -0,0 +1,17 @@ +import { StoreFields } from "./types.js"; + +/** + * Constructs the store fields for reflections. + * + * @param inputs The inputs for the store fields. + * @returns The store fields for reflections. + */ +export function constructReflectionFields(inputs: { + userId: string; + assistantId: string; +}): StoreFields { + return { + namespace: ["memories", inputs.userId, inputs.assistantId], + key: "reflection", + }; +} diff --git a/packages/shared/src/stores/types.ts b/packages/shared/src/stores/types.ts new file mode 100644 index 00000000..a5249e0a --- /dev/null +++ b/packages/shared/src/stores/types.ts @@ -0,0 +1,10 @@ +export type StoreFields = { + /** + * The namespace for the store item. + */ + namespace: string[]; + /** + * The key for the store item. + */ + key: string; +}; diff --git a/yarn.lock b/yarn.lock index f5653816..84580caa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -73,6 +73,20 @@ zod-to-json-schema "^3.24.1" zustand "^5.0.3" +"@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.6", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.3.1": version "7.26.7" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.7.tgz#f4e7fe527cd710f8dc0618610b61b4b060c3c341" @@ -382,6 +396,25 @@ style-mod "^4.1.0" w3c-keyname "^2.2.4" +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== + +"@commander-js/extra-typings@^13.0.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@commander-js/extra-typings/-/extra-typings-13.1.0.tgz#026e29b04401c92fc4307223fbaadf1ff3e5551e" + integrity sha512-q5P52BYb1hwVWE6dtID7VvuJWrlfbCv4klj7BjUUOqMz4jbSZD4C9fJ9lRjL2jnBGTg+gDDlaXN51rkWcLk4fg== + +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + "@emoji-mart/data@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@emoji-mart/data/-/data-1.2.1.tgz#0ad70c662e3bc603e23e7d98413bd1e64c4fcb6c" @@ -397,6 +430,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== +"@esbuild/aix-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8" + integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag== + "@esbuild/android-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" @@ -407,6 +445,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== +"@esbuild/android-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196" + integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w== + "@esbuild/android-arm@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" @@ -417,6 +460,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== +"@esbuild/android-arm@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee" + integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA== + "@esbuild/android-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" @@ -427,6 +475,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== +"@esbuild/android-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2" + integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg== + "@esbuild/darwin-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" @@ -437,6 +490,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== +"@esbuild/darwin-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423" + integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA== + "@esbuild/darwin-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" @@ -447,6 +505,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== +"@esbuild/darwin-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374" + integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA== + "@esbuild/freebsd-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" @@ -457,6 +520,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== +"@esbuild/freebsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6" + integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w== + "@esbuild/freebsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" @@ -467,6 +535,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== +"@esbuild/freebsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809" + integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ== + "@esbuild/linux-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" @@ -477,6 +550,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== +"@esbuild/linux-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058" + integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g== + "@esbuild/linux-arm@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" @@ -487,6 +565,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== +"@esbuild/linux-arm@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6" + integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g== + "@esbuild/linux-ia32@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" @@ -497,6 +580,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== +"@esbuild/linux-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737" + integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ== + "@esbuild/linux-loong64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" @@ -507,6 +595,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== +"@esbuild/linux-loong64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a" + integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w== + "@esbuild/linux-mips64el@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" @@ -517,6 +610,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== +"@esbuild/linux-mips64el@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30" + integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q== + "@esbuild/linux-ppc64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" @@ -527,6 +625,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== +"@esbuild/linux-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067" + integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g== + "@esbuild/linux-riscv64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" @@ -537,6 +640,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== +"@esbuild/linux-riscv64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3" + integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw== + "@esbuild/linux-s390x@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" @@ -547,6 +655,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== +"@esbuild/linux-s390x@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602" + integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q== + "@esbuild/linux-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" @@ -557,11 +670,21 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== +"@esbuild/linux-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb" + integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg== + "@esbuild/netbsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== +"@esbuild/netbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac" + integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw== + "@esbuild/netbsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" @@ -572,6 +695,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== +"@esbuild/netbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f" + integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg== + "@esbuild/openbsd-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" @@ -582,6 +710,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== +"@esbuild/openbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f" + integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg== + "@esbuild/openbsd-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" @@ -592,6 +725,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== +"@esbuild/openbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768" + integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw== + "@esbuild/sunos-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" @@ -602,6 +740,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== +"@esbuild/sunos-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb" + integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA== + "@esbuild/win32-arm64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" @@ -612,6 +755,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== +"@esbuild/win32-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf" + integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q== + "@esbuild/win32-ia32@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" @@ -622,6 +770,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== +"@esbuild/win32-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f" + integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg== + "@esbuild/win32-x64@0.23.1": version "0.23.1" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" @@ -632,6 +785,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== +"@esbuild/win32-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d" + integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.1" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" @@ -742,6 +900,16 @@ resolved "https://registry.yarnpkg.com/@google/generative-ai/-/generative-ai-0.21.0.tgz#a5011aab9e6082e706937b26ef23445933fa0d15" integrity sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg== +"@hono/node-server@^1.12.0": + version "1.14.0" + resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.14.0.tgz#b64f7e6b10dbc0fa0642e8a0a1c03c2abf2b391c" + integrity sha512-YUCxJwgHRKSqjrdTk9e4VMGKN27MK5r4+MGPyZTgKH+IYbK+KtYbHeOcPGJ91KGGD6RIQiz2dAHxvjauNhOS8g== + +"@hono/zod-validator@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@hono/zod-validator/-/zod-validator-0.2.2.tgz#929a1c40aee5eac1ed9c84094d6d977e0b70187a" + integrity sha512-dSDxaPV70Py8wuIU2QNpoVEIOSzSXZ/6/B/h4xA7eOMz7+AarKTSGV8E6QwrdcCbBLkpqfJ4Q2TmBO0eP1tCBQ== + "@hookform/resolvers@^3.6.0": version "3.10.0" resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.10.0.tgz#7bfd18113daca4e57e27e1205b7d5a2d371aa59a" @@ -778,6 +946,13 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + "@jridgewell/gen-mapping@^0.3.2": version "0.3.8" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" @@ -879,6 +1054,30 @@ zod "^3.22.4" zod-to-json-schema "^3.22.5" +"@langchain/langgraph-api@0.0.20", "@langchain/langgraph-api@http://localhost:3123/18/@langchain/langgraph-api": + version "0.0.20" + resolved "http://localhost:3123/18/@langchain/langgraph-api#a22992e1ec1c43d7db319f9565cd142745e70b48" + dependencies: + "@babel/code-frame" "^7.26.2" + "@hono/node-server" "^1.12.0" + "@hono/zod-validator" "^0.2.2" + "@langchain/langgraph-ui" "0.0.20" + "@types/json-schema" "^7.0.15" + "@typescript/vfs" "^1.6.0" + dedent "^1.5.3" + dotenv "^16.4.7" + exit-hook "^4.0.0" + hono "^4.5.4" + langsmith "^0.2.15" + open "^10.1.0" + stacktrace-parser "^0.1.10" + superjson "^2.2.2" + tsx "^4.19.3" + uuid "^10.0.0" + winston "^3.17.0" + winston-console-format "^1.0.8" + zod "^3.23.8" + "@langchain/langgraph-checkpoint@~0.0.15": version "0.0.15" resolved "https://registry.yarnpkg.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.0.15.tgz#90aaf1782f5ada4efd4d38444ba92aaae0a1988c" @@ -886,35 +1085,48 @@ dependencies: uuid "^10.0.0" -"@langchain/langgraph-sdk@^0.0.37": - version "0.0.37" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.37.tgz#c510e30a90a5d4725b36f533df72c660563b03fc" - integrity sha512-+6aTfUQZsAQBrz2DuKyMt6SrCElJvNWm8Iw8gYZhlHFVwJHrpu0cvn5leOzWrG2gO1DDH9aR4Zi2AzJ95gT0ig== +"@langchain/langgraph-cli@http://localhost:3123/18/@langchain/langgraph-cli": + version "0.0.20" + resolved "http://localhost:3123/18/@langchain/langgraph-cli#05098282eb62320c8b605903ce120d9114d5c297" dependencies: - "@types/json-schema" "^7.0.15" - p-queue "^6.6.2" - p-retry "4" - uuid "^9.0.0" + "@babel/code-frame" "^7.26.2" + "@commander-js/extra-typings" "^13.0.0" + "@langchain/langgraph-api" "0.0.20" + chokidar "^4.0.3" + commander "^13.0.0" + dedent "^1.5.3" + dotenv "^16.4.7" + execa "^9.5.2" + exit-hook "^4.0.0" + extract-zip "^2.0.1" + langsmith "^0.2.15" + open "^10.1.0" + stacktrace-parser "^0.1.10" + tar "^7.4.3" + winston "^3.17.0" + winston-console-format "^1.0.8" + yaml "^2.7.0" + zod "^3.23.8" -"@langchain/langgraph-sdk@^0.0.40": - version "0.0.40" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.40.tgz#c270d23c992fb77c877fa379b79920c84c99d99b" - integrity sha512-zntl+Iaa4Ym1JChbsFvqL84bF2lkZqeRhGbDtOSsdwABBfr3KNiPBbCueGqLFQ9l0sA55bYUbMcMvh4zXpdygA== +"@langchain/langgraph-sdk@^0.0.37", "@langchain/langgraph-sdk@^0.0.40", "@langchain/langgraph-sdk@http://localhost:3123/18/@langchain/langgraph-sdk", "@langchain/langgraph-sdk@~0.0.32": + version "0.0.65" + resolved "http://localhost:3123/18/@langchain/langgraph-sdk#8c452f6fd6e372174f1871855ddc0e81652044ff" dependencies: "@types/json-schema" "^7.0.15" p-queue "^6.6.2" p-retry "4" uuid "^9.0.0" -"@langchain/langgraph-sdk@~0.0.32": - version "0.0.36" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.36.tgz#b375884552ae3f1c7bf68a0248104786754d04cd" - integrity sha512-KkAZM0uXBaMcD/dpGTBppOhbvNX6gz+Y1zFAC898OblegFkSvICrkd0oRQ5Ro/GWK/NAoDymnMUDXeZDdUkSuw== +"@langchain/langgraph-ui@0.0.20": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@langchain/langgraph-ui/-/langgraph-ui-0.0.20.tgz#9075acef91c287cfafa81d4eef34a6a51ba1a4d1" + integrity sha512-x6fF6STKx0gsCAtEqEwyIib6klwLboqvpXsobHVeFOx6qGqOGsVKbq6rgCIKxQz8tZeSQVXslas4/20SFUjwKA== dependencies: - "@types/json-schema" "^7.0.15" - p-queue "^6.6.2" - p-retry "4" - uuid "^9.0.0" + "@commander-js/extra-typings" "^13.0.0" + commander "^13.0.0" + esbuild "^0.25.0" + esbuild-plugin-tailwindcss "^2.0.1" + zod "^3.23.8" "@langchain/langgraph@^0.2.41": version "0.2.44" @@ -1952,6 +2164,16 @@ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.5.tgz#3a1c12c959010a55c17d46b395ed3047b545c246" integrity sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + +"@sindresorhus/merge-streams@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" + integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== + "@supabase/auth-js@2.67.3": version "2.67.3" resolved "https://registry.yarnpkg.com/@supabase/auth-js/-/auth-js-2.67.3.tgz#a1f5eb22440b0cdbf87fe2ecae662a8dd8bb2028" @@ -2030,6 +2252,99 @@ "@swc/counter" "^0.1.3" tslib "^2.4.0" +"@tailwindcss/node@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.3.tgz#f290886582ce8eb1978853d07ca4da45f2d43fdb" + integrity sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA== + dependencies: + enhanced-resolve "^5.18.1" + jiti "^2.4.2" + lightningcss "1.29.2" + tailwindcss "4.1.3" + +"@tailwindcss/oxide-android-arm64@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.3.tgz#6c1834e7de84aa5544f4c8aacb380e00e019a11f" + integrity sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g== + +"@tailwindcss/oxide-darwin-arm64@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.3.tgz#ed3abd4a59f05a1ac58337b63d6fe82bb9903462" + integrity sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw== + +"@tailwindcss/oxide-darwin-x64@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.3.tgz#d8a0786f4eae8203f8345fcf5b03f3284eee82af" + integrity sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg== + +"@tailwindcss/oxide-freebsd-x64@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.3.tgz#e76520e5341c3a44959901b8fefee78d4fc2f074" + integrity sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w== + +"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.3.tgz#130c276e590b6ba621c443ac7faa702a709620c7" + integrity sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg== + +"@tailwindcss/oxide-linux-arm64-gnu@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.3.tgz#55e736a89d8547835026df3c5d6ce50467d71241" + integrity sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg== + +"@tailwindcss/oxide-linux-arm64-musl@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.3.tgz#4ff54e4a40fede7a66e209b07f9b5da432d96678" + integrity sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ== + +"@tailwindcss/oxide-linux-x64-gnu@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.3.tgz#66477a71fbaad552be882e8b7a56bb7519b47838" + integrity sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA== + +"@tailwindcss/oxide-linux-x64-musl@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.3.tgz#403145ce43361e7d63886c878fdb09cd868920da" + integrity sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw== + +"@tailwindcss/oxide-win32-arm64-msvc@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.3.tgz#0cc2bc59c228ce1d64156089af21acc4302081da" + integrity sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg== + +"@tailwindcss/oxide-win32-x64-msvc@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.3.tgz#9bd5108b95b03dace8a2e5e738b1b2389f8a6d09" + integrity sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA== + +"@tailwindcss/oxide@4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.3.tgz#d01162137fcefe7d4c2a34500b9ed5c142388352" + integrity sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ== + optionalDependencies: + "@tailwindcss/oxide-android-arm64" "4.1.3" + "@tailwindcss/oxide-darwin-arm64" "4.1.3" + "@tailwindcss/oxide-darwin-x64" "4.1.3" + "@tailwindcss/oxide-freebsd-x64" "4.1.3" + "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.3" + "@tailwindcss/oxide-linux-arm64-gnu" "4.1.3" + "@tailwindcss/oxide-linux-arm64-musl" "4.1.3" + "@tailwindcss/oxide-linux-x64-gnu" "4.1.3" + "@tailwindcss/oxide-linux-x64-musl" "4.1.3" + "@tailwindcss/oxide-win32-arm64-msvc" "4.1.3" + "@tailwindcss/oxide-win32-x64-msvc" "4.1.3" + +"@tailwindcss/postcss@^4.0.5": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.3.tgz#82bf8b90c134f89f70d8d0293b5b14f234918faf" + integrity sha512-6s5nJODm98F++QT49qn8xJKHQRamhYHfMi3X7/ltxiSQ9dyRsaFSfFkfaMsanWzf+TMYQtbk8mt5f6cCVXJwfg== + dependencies: + "@alloc/quick-lru" "^5.2.0" + "@tailwindcss/node" "4.1.3" + "@tailwindcss/oxide" "4.1.3" + postcss "^8.4.41" + tailwindcss "4.1.3" + "@tiptap/core@^2.7.1": version "2.11.5" resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.11.5.tgz#2bf1b08c4ca2467778d0a109634c45ab475522f4" @@ -2392,6 +2707,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + "@types/unist@*", "@types/unist@^3.0.0": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" @@ -2419,6 +2739,13 @@ dependencies: "@types/node" "*" +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + "@typescript-eslint/eslint-plugin@8.23.0", "@typescript-eslint/eslint-plugin@^8.12.2": version "8.23.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.23.0.tgz#7745f4e3e4a7ae5f6f73fefcd856fd6a074189b7" @@ -2751,6 +3078,13 @@ "@typescript-eslint/types" "8.23.0" eslint-visitor-keys "^4.2.0" +"@typescript/vfs@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@typescript/vfs/-/vfs-1.6.1.tgz#fe7087d5a43715754f7ea9bf6e0b905176c9eebd" + integrity sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA== + dependencies: + debug "^4.1.1" + "@uiw/codemirror-extensions-basic-setup@4.23.8": version "4.23.8" resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.23.8.tgz#874b4f79497cfac91946df8bc394977415b7516e" @@ -3105,6 +3439,11 @@ async-function@^1.0.0: resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -3122,6 +3461,18 @@ autoprefixer@^10.4.19: picocolors "^1.0.1" postcss-value-parser "^4.2.0" +autoprefixer@^10.4.20: + version "10.4.21" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" + integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== + dependencies: + browserslist "^4.24.4" + caniuse-lite "^1.0.30001702" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.1.1" + postcss-value-parser "^4.2.0" + available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" @@ -3205,7 +3556,7 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.23.3: +browserslist@^4.23.3, browserslist@^4.24.4: version "4.24.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== @@ -3215,6 +3566,18 @@ browserslist@^4.23.3: node-releases "^2.0.19" update-browserslist-db "^1.1.1" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + busboy@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -3273,6 +3636,11 @@ caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.300016 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001697.tgz#040bbbb54463c4b4b3377c716b34a322d16e6fc7" integrity sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ== +caniuse-lite@^1.0.30001702: + version "1.0.30001712" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz#41ee150f12de11b5f57c5889d4f30deb451deedf" + integrity sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig== + ccount@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" @@ -3352,6 +3720,18 @@ chokidar@^3.6.0: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + class-variance-authority@^0.7.0, class-variance-authority@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.1.tgz#4008a798a0e4553a781a57ac5177c9fb5d043787" @@ -3395,6 +3775,13 @@ codemirror@^6.0.0: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" +color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -3402,11 +3789,45 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3424,6 +3845,16 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^13.0.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -3451,6 +3882,13 @@ cookie@^0.7.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== +copy-anything@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.5.tgz#2d92dce8c498f790fa7ad16b01a1ae5a45b020a0" + integrity sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== + dependencies: + is-what "^4.1.8" + crelt@^1.0.0, crelt@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" @@ -3470,7 +3908,7 @@ cross-fetch@^4.0.0: dependencies: node-fetch "^2.7.0" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -3543,7 +3981,7 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.7, debug@^4.4.0: +debug@^4.0.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.7, debug@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== @@ -3562,6 +4000,11 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" +dedent@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + deep-eql@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" @@ -3572,6 +4015,19 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -3581,6 +4037,11 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -3600,6 +4061,11 @@ dequal@^2.0.0: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +detect-libc@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + detect-node-es@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" @@ -3692,7 +4158,19 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -enhanced-resolve@^5.15.0: +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.15.0, enhanced-resolve@^5.18.1: version "5.18.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== @@ -3832,6 +4310,16 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" +esbuild-plugin-tailwindcss@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esbuild-plugin-tailwindcss/-/esbuild-plugin-tailwindcss-2.0.1.tgz#74ca9c8bcd183e9596db077423d7566c2ce5ba62" + integrity sha512-62CPYzyfcRE7OowGmWGKs9sz43QhCa/dZ5h6ruZhDg65B5Zsn++4EA4NKIwEMbAio9JV8+FJZNXzejNX/RjSkg== + dependencies: + "@tailwindcss/postcss" "^4.0.5" + autoprefixer "^10.4.20" + postcss "^8.5.1" + postcss-modules "^6.0.1" + esbuild@^0.24.2: version "0.24.2" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" @@ -3863,6 +4351,37 @@ esbuild@^0.24.2: "@esbuild/win32-ia32" "0.24.2" "@esbuild/win32-x64" "0.24.2" +esbuild@^0.25.0, esbuild@~0.25.0: + version "0.25.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b" + integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.2" + "@esbuild/android-arm" "0.25.2" + "@esbuild/android-arm64" "0.25.2" + "@esbuild/android-x64" "0.25.2" + "@esbuild/darwin-arm64" "0.25.2" + "@esbuild/darwin-x64" "0.25.2" + "@esbuild/freebsd-arm64" "0.25.2" + "@esbuild/freebsd-x64" "0.25.2" + "@esbuild/linux-arm" "0.25.2" + "@esbuild/linux-arm64" "0.25.2" + "@esbuild/linux-ia32" "0.25.2" + "@esbuild/linux-loong64" "0.25.2" + "@esbuild/linux-mips64el" "0.25.2" + "@esbuild/linux-ppc64" "0.25.2" + "@esbuild/linux-riscv64" "0.25.2" + "@esbuild/linux-s390x" "0.25.2" + "@esbuild/linux-x64" "0.25.2" + "@esbuild/netbsd-arm64" "0.25.2" + "@esbuild/netbsd-x64" "0.25.2" + "@esbuild/openbsd-arm64" "0.25.2" + "@esbuild/openbsd-x64" "0.25.2" + "@esbuild/sunos-x64" "0.25.2" + "@esbuild/win32-arm64" "0.25.2" + "@esbuild/win32-ia32" "0.25.2" + "@esbuild/win32-x64" "0.25.2" + esbuild@~0.23.0: version "0.23.1" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" @@ -4198,6 +4717,29 @@ exa-js@^1.0.12, exa-js@^1.4.10: cross-fetch "^4.0.0" dotenv "^16.4.7" +execa@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.5.2.tgz#a4551034ee0795e241025d2f987dab3f4242dff2" + integrity sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q== + dependencies: + "@sindresorhus/merge-streams" "^4.0.0" + cross-spawn "^7.0.3" + figures "^6.1.0" + get-stream "^9.0.0" + human-signals "^8.0.0" + is-plain-obj "^4.1.0" + is-stream "^4.0.1" + npm-run-path "^6.0.0" + pretty-ms "^9.0.0" + signal-exit "^4.1.0" + strip-final-newline "^4.0.0" + yoctocolors "^2.0.0" + +exit-hook@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-4.0.0.tgz#c1e16ebd03d3166f837b1502dac755bb5c460d58" + integrity sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ== + expect-type@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" @@ -4213,6 +4755,17 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + fast-deep-equal@^3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -4290,6 +4843,25 @@ fbjs@^3.0.0, fbjs@^3.0.1: setimmediate "^1.0.5" ua-parser-js "^1.0.35" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +figures@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" + integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== + dependencies: + is-unicode-supported "^2.0.0" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -4339,6 +4911,11 @@ flux@^4.0.1: fbemitter "^3.0.0" fbjs "^3.0.1" +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + follow-redirects@^1.15.6: version "1.15.9" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" @@ -4432,6 +5009,13 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +generic-names@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3" + integrity sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A== + dependencies: + loader-utils "^3.2.0" + get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" @@ -4461,6 +5045,21 @@ get-proto@^1.0.0, get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + get-symbol-description@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" @@ -5084,6 +5683,11 @@ highlightjs-vue@^1.0.0: resolved "https://registry.yarnpkg.com/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz#fdfe97fbea6354e70ee44e3a955875e114db086d" integrity sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA== +hono@^4.5.4, hono@^4.7.6: + version "4.7.6" + resolved "https://registry.yarnpkg.com/hono/-/hono-4.7.6.tgz#3b577a825de3bf97b27705d918890a660726835e" + integrity sha512-564rVzELU+9BRqqx5k8sT2NFwGD3I3Vifdb6P7CmM6FiarOSY+fDC+6B+k9wcCb86ReoayteZP2ki0cRLN1jbw== + html-url-attributes@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz#83b052cd5e437071b756cd74ae70f708870c2d87" @@ -5104,6 +5708,11 @@ html-whitespace-sensitive-tag-names@^3.0.0: resolved "https://registry.yarnpkg.com/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.1.tgz#c35edd28205f3bf8c1fd03274608d60b923de5b2" integrity sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA== +human-signals@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.1.tgz#f08bb593b6d1db353933d06156cedec90abe51fb" + integrity sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -5111,6 +5720,11 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -5137,7 +5751,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5191,6 +5805,11 @@ is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: call-bound "^1.0.3" get-intrinsic "^1.2.6" +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-async-function@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" @@ -5275,6 +5894,11 @@ is-decimal@^2.0.0: resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -5319,6 +5943,13 @@ is-hexadecimal@^2.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" @@ -5342,7 +5973,7 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^4.0.0: +is-plain-obj@^4.0.0, is-plain-obj@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== @@ -5369,6 +6000,16 @@ is-shared-array-buffer@^1.0.4: dependencies: call-bound "^1.0.3" +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + is-string@^1.0.7, is-string@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" @@ -5393,6 +6034,11 @@ is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: dependencies: which-typed-array "^1.1.16" +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + is-weakmap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" @@ -5413,6 +6059,18 @@ is-weakset@^2.0.3: call-bound "^1.0.3" get-intrinsic "^1.2.6" +is-what@^4.1.8: + version "4.1.16" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" + integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -5468,6 +6126,11 @@ jiti@^1.21.6: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== +jiti@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560" + integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== + js-cookie@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" @@ -5480,7 +6143,7 @@ js-tiktoken@^1.0.12: dependencies: base64-js "^1.5.1" -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -5553,6 +6216,11 @@ kleur@^4.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + "langchain@>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", langchain@^0.3.14: version "0.3.15" resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.3.15.tgz#c6c8b17bf20c870795e31515f48abde7d13ccc9d" @@ -5584,6 +6252,18 @@ kleur@^4.0.3: semver "^7.6.3" uuid "^10.0.0" +langsmith@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.2.15.tgz#0692a00fc310817cb9b5939488468c93d4ba2c9d" + integrity sha512-homtJU41iitqIZVuuLW7iarCzD4f39KcfP9RTBWav9jifhrsDa1Ez89Ejr+4qi72iuBu8Y5xykchsGVgiEZ93w== + dependencies: + "@types/uuid" "^10.0.0" + commander "^10.0.1" + p-queue "^6.6.2" + p-retry "4" + semver "^7.6.3" + uuid "^10.0.0" + language-subtag-registry@^0.3.20: version "0.3.23" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" @@ -5611,6 +6291,74 @@ lib0@^0.2.42, lib0@^0.2.85, lib0@^0.2.99: dependencies: isomorphic.js "^0.2.4" +lightningcss-darwin-arm64@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz#6ceff38b01134af48e859394e1ca21e5d49faae6" + integrity sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA== + +lightningcss-darwin-x64@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz#891b6f9e57682d794223c33463ca66d3af3fb038" + integrity sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w== + +lightningcss-freebsd-x64@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz#8a95f9ab73b2b2b0beefe1599fafa8b058938495" + integrity sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg== + +lightningcss-linux-arm-gnueabihf@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz#5c60bbf92b39d7ed51e363f7b98a7111bf5914a1" + integrity sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg== + +lightningcss-linux-arm64-gnu@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz#e73d7608c4cce034c3654e5e8b53be74846224de" + integrity sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ== + +lightningcss-linux-arm64-musl@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz#a95a18d5a909831c092e0a8d2de4b9ac1a8db151" + integrity sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ== + +lightningcss-linux-x64-gnu@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz#551ca07e565394928642edee92acc042e546cb78" + integrity sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg== + +lightningcss-linux-x64-musl@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz#2fd164554340831bce50285b57101817850dd258" + integrity sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w== + +lightningcss-win32-arm64-msvc@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz#da43ea49fafc5d2de38e016f1a8539d5eed98318" + integrity sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw== + +lightningcss-win32-x64-msvc@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz#ddefaa099a39b725b2f5bbdcb9fc718435cc9797" + integrity sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA== + +lightningcss@1.29.2: + version "1.29.2" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.29.2.tgz#f5f0fd6e63292a232697e6fe709da5b47624def3" + integrity sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.29.2" + lightningcss-darwin-x64 "1.29.2" + lightningcss-freebsd-x64 "1.29.2" + lightningcss-linux-arm-gnueabihf "1.29.2" + lightningcss-linux-arm64-gnu "1.29.2" + lightningcss-linux-arm64-musl "1.29.2" + lightningcss-linux-x64-gnu "1.29.2" + lightningcss-linux-x64-musl "1.29.2" + lightningcss-win32-arm64-msvc "1.29.2" + lightningcss-win32-x64-msvc "1.29.2" + lilconfig@^3.0.0, lilconfig@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" @@ -5633,6 +6381,11 @@ linkifyjs@^4.2.0: resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.2.0.tgz#9dd30222b9cbabec9c950e725ec00031c7fa3f08" integrity sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw== +loader-utils@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" + integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -5640,6 +6393,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.curry@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" @@ -5660,6 +6418,18 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +logform@^2.2.0, logform@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1" + integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + longest-streak@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" @@ -6680,16 +7450,28 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +minizlib@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.2.tgz#f33d638eb279f664439aa38dc5f91607468cb574" + integrity sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA== + dependencies: + minipass "^7.1.2" + mitt@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + motion-dom@^11.18.1: version "11.18.1" resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-11.18.1.tgz#e7fed7b7dc6ae1223ef1cce29ee54bec826dc3f2" @@ -6801,6 +7583,14 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== +npm-run-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" + integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== + dependencies: + path-key "^4.0.0" + unicorn-magic "^0.3.0" + nth-check@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -6892,13 +7682,30 @@ ollama@^0.5.9: dependencies: whatwg-fetch "^3.6.20" -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +open@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + openai@^4.77.0: version "4.83.0" resolved "https://registry.yarnpkg.com/openai/-/openai-4.83.0.tgz#87edfebecf8a4dc2317269dd704cf0ebd9f11979" @@ -7022,6 +7829,11 @@ parse-entities@^4.0.0: is-decimal "^2.0.0" is-hexadecimal "^2.0.0" +parse-ms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" + integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + parse-numeric-range@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" @@ -7054,6 +7866,11 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -7090,6 +7907,11 @@ pdf-parse@^1.1.1: debug "^3.1.0" node-ensure "^0.0.0" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -7139,6 +7961,48 @@ postcss-load-config@^4.0.2: lilconfig "^3.0.0" yaml "^2.3.4" +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== + +postcss-modules-local-by-default@^4.0.5: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" + integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-modules@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-6.0.1.tgz#e3e895918c060c14fa6a22f84ba14a4286f436a5" + integrity sha512-zyo2sAkVvuZFFy0gc2+4O+xar5dYlaVy/ebO24KT0ftk/iJevSNyPyQellsBLlnccwh7f6V6Y4GvuKRYToNgpQ== + dependencies: + generic-names "^4.0.0" + icss-utils "^5.1.0" + lodash.camelcase "^4.3.0" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" + postcss-modules-values "^4.0.0" + string-hash "^1.1.3" + postcss-nested@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" @@ -7154,7 +8018,15 @@ postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: +postcss-selector-parser@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" + integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== @@ -7177,6 +8049,15 @@ postcss@^8, postcss@^8.4.38, postcss@^8.4.47, postcss@^8.5.1: picocolors "^1.1.1" source-map-js "^1.2.1" +postcss@^8.4.41: + version "8.5.3" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb" + integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== + dependencies: + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -7194,6 +8075,13 @@ prettier@^3.3.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== +pretty-ms@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.2.0.tgz#e14c0aad6493b69ed63114442a84133d7e560ef0" + integrity sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg== + dependencies: + parse-ms "^4.0.0" + prismjs@^1.27.0: version "1.29.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" @@ -7391,6 +8279,14 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode.js@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" @@ -7577,6 +8473,20 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" +readable-stream@^3.4.0, readable-stream@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -7969,6 +8879,11 @@ rope-sequence@^1.3.0: resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.4.tgz#df85711aaecd32f1e756f76e43a415171235d425" integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -7994,6 +8909,11 @@ safe-array-concat@^1.1.3: has-symbols "^1.1.0" isarray "^2.0.5" +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-push-apply@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" @@ -8011,6 +8931,11 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" +safe-stable-stringify@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" @@ -8126,11 +9051,18 @@ siginfo@^2.0.0: resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + simple-wcswidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" @@ -8161,11 +9093,23 @@ stable-hash@^0.0.4: resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.4.tgz#55ae7dadc13e4b3faed13601587cec41859b42f7" integrity sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g== +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + stackback@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== +stacktrace-parser@^0.1.10: + version "0.1.11" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz#c7c08f9b29ef566b9a6f7b255d7db572f66fabc4" + integrity sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg== + dependencies: + type-fest "^0.7.1" + std-env@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" @@ -8176,6 +9120,11 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +string-hash@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A== + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -8271,6 +9220,13 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + stringify-entities@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" @@ -8305,6 +9261,11 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-final-newline@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" + integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== + strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -8347,6 +9308,13 @@ sucrase@^3.35.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" +superjson@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.2.tgz#9d52bf0bf6b5751a3c3472f1292e714782ba3173" + integrity sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q== + dependencies: + copy-anything "^3.0.2" + supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -8384,6 +9352,11 @@ tailwindcss-animate@^1.0.7: resolved "https://registry.yarnpkg.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz#318b692c4c42676cc9e67b19b78775742388bef4" integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== +tailwindcss@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.3.tgz#f5a6b4451295c06e213013697f7193be1630fa46" + integrity sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g== + tailwindcss@^3.4.1, tailwindcss@^3.4.3: version "3.4.17" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" @@ -8417,6 +9390,23 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar@^7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" + integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.0.1" + mkdirp "^3.0.1" + yallist "^5.0.0" + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -8490,6 +9480,11 @@ trim-trailing-lines@^2.0.0: resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz#9aac7e89b09cb35badf663de7133c6de164f86df" integrity sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg== +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + trough@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" @@ -8547,6 +9542,16 @@ tsx@^4.19.1: optionalDependencies: fsevents "~2.3.3" +tsx@^4.19.3: + version "4.19.3" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.3.tgz#2bdbcb87089374d933596f8645615142ed727666" + integrity sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ== + dependencies: + esbuild "~0.25.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + turbo-darwin-64@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/turbo-darwin-64/-/turbo-darwin-64-2.4.0.tgz#45bd92a119f0365d7aedd61e5aadabb589a23e44" @@ -8601,6 +9606,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + type-fest@^4.27.0: version "4.33.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.33.0.tgz#2da0c135b9afa76cf8b18ecfd4f260ecd414a432" @@ -8705,6 +9715,11 @@ undici-types@~6.20.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + unified@^10.0.0, unified@^10.1.2: version "10.1.2" resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" @@ -8897,7 +9912,7 @@ use-sync-external-store@^1: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== -util-deprecate@^1.0.2: +util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -9130,6 +10145,41 @@ why-is-node-running@^2.3.0: siginfo "^2.0.0" stackback "0.0.2" +winston-console-format@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/winston-console-format/-/winston-console-format-1.0.8.tgz#591adc8e9567c3397a3fa2e29e596d56e48db840" + integrity sha512-dq7t/E0D0QRi4XIOwu6HM1+5e//WPqylH88GVjKEhQVrzGFg34MCz+G7pMJcXFBen9C0kBsu5GYgbYsE2LDwKw== + dependencies: + colors "^1.4.0" + logform "^2.2.0" + triple-beam "^1.3.0" + +winston-transport@^4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9" + integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A== + dependencies: + logform "^2.7.0" + readable-stream "^3.6.2" + triple-beam "^1.3.0" + +winston@^3.17.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.17.0.tgz#74b8665ce9b4ea7b29d0922cfccf852a08a11423" + integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw== + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.7.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.9.0" + word-wrap@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" @@ -9182,11 +10232,29 @@ y-protocols@^1.0.6: dependencies: lib0 "^0.2.85" +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + yaml@^2.2.1, yaml@^2.3.4: version "2.7.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== +yaml@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6" + integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yjs@^13.6.15: version "13.6.23" resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.6.23.tgz#62358dfa52e92dc870b8a0bedcf0d4cbd4c5ffa8" @@ -9199,6 +10267,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.1.tgz#e0167474e9fbb9e8b3ecca738deaa61dd12e56fc" + integrity sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ== + zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.4, zod-to-json-schema@^3.22.5, zod-to-json-schema@^3.23.0, zod-to-json-schema@^3.24.1: version "3.24.1" resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.1.tgz#f08c6725091aadabffa820ba8d50c7ab527f227a"