diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4bce35a..c173c5b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: - name: Use Node.js 18.x uses: actions/setup-node@v3 with: - node-version: 18.x + node-version-file: .nvmrc cache: "yarn" - name: Install dependencies run: yarn install --immutable --mode=skip-build @@ -46,7 +46,7 @@ jobs: - name: Use Node.js 18.x uses: actions/setup-node@v3 with: - node-version: 18.x + node-version-file: .nvmrc cache: "yarn" - name: Install dependencies run: yarn install --immutable --mode=skip-build @@ -63,7 +63,7 @@ jobs: - name: Use Node.js 18.x uses: actions/setup-node@v3 with: - node-version: 18.x + node-version-file: .nvmrc cache: "yarn" - name: Install dependencies run: yarn install --immutable --mode=skip-build @@ -80,7 +80,7 @@ jobs: - name: Use Node.js 18.x uses: actions/setup-node@v3 with: - node-version: 18.x + node-version-file: .nvmrc cache: "yarn" - name: Install dependencies run: yarn install --immutable --mode=skip-build diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index d8bff89..4a49882 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -21,14 +21,14 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [18.x, 20.x] + node-version: [22.x, 24.x] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Enable Corepack run: corepack enable - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: "yarn" diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..5610068 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v22.x \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..44d795a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + } +} diff --git a/README.md b/README.md index 3982644..8b07229 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# πŸ§ πŸ€–Deep Agents +# πŸ§ πŸ€– Deep Agents Using an LLM to call tools in a loop is the simplest form of an agent. This architecture, however, can yield agents that are "shallow" and fail to plan and act over longer, more complex tasks. Applications like "Deep Research", "Manus", and "Claude Code" have gotten around this limitation by implementing a combination of four things: a planning tool, sub agents, access to a file system, and a detailed prompt. @@ -10,7 +10,48 @@ Using an LLM to call tools in a loop is the simplest form of an agent. This arch ## Installation ```bash -yarn add deepagents +npm install deepagents +``` + +## Usage + +You can find a full example for how to use this agent in [research-agent.ts](/examples/research/research-agent.ts): + +```ts +const agent = createDeepAgent({ + model: new ChatAnthropic({ + model: "claude-3-5-sonnet-20240620", + temperature: 0, + }), + tools: [internetSearch], + instructions: researchInstructions, + subagents: [critiqueSubAgent, researchSubAgent], +}); + +// Invoke the agent +const result = await agent.invoke({ + messages: [{ role: "user", content: "what is langgraph?" }], +}, { recursionLimit: 1000 }); + +console.log("πŸŽ‰ Finished!") +console.log(`\n\nAgent ToDo List:\n${result.todos.map((todo) => ` - ${todo.content} (${todo.status})`).join("\n")}`); +console.log(`\n\nAgent Files:\n${Object.entries(result.files).map(([key, value]) => ` - ${key}: ${value}`).join("\n")}`); +``` + +Which will return: + +``` +πŸŽ‰ Finished! + +Agent ToDo List: + - Research LangGraph using the research-agent (completed) + - Write a comprehensive report on LangGraph (completed) + - Review and critique the report using the critique-agent (completed) + - Make necessary revisions to the report (completed) + +Agent Files: + - /question.txt: What is LangGraph? + - /final_report.md: # What is LangGraph? ... ``` ## Learn more diff --git a/examples/research/research-agent.ts b/examples/research/research-agent.ts index f309cc6..658705c 100644 --- a/examples/research/research-agent.ts +++ b/examples/research/research-agent.ts @@ -1,9 +1,11 @@ /* eslint-disable no-console */ -import { createDeepAgent, type SubAgent } from "../../src/index.js"; -import { tool } from "@langchain/core/tools"; -import { z } from "zod"; import "dotenv/config"; +import { z } from "zod"; +import { tool, HumanMessage } from "langchain"; import { TavilySearch } from "@langchain/tavily"; +import { ChatAnthropic } from "@langchain/anthropic"; + +import { createDeepAgent, type SubAgent } from "../../src/index.js"; type Topic = "general" | "news" | "finance"; @@ -32,7 +34,9 @@ const internetSearch = tool( includeRawContent, topic, }); - const tavilyResponse = await tavilySearch.invoke({ query }); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore - Type instantiation is excessively deep and possibly infinite. + const tavilyResponse = await tavilySearch._call({ query }); return tavilyResponse; }, @@ -57,7 +61,7 @@ const internetSearch = tool( .default(false) .describe("Whether to include raw content"), }), - }, + } ); const subResearchPrompt = `You are a dedicated researcher. Your job is to conduct research based on the users questions. @@ -195,21 +199,35 @@ Use this to run an internet search for a given query. You can specify the number // Create the agent const agent = createDeepAgent({ + model: new ChatAnthropic({ + model: "claude-sonnet-4-20250514", + temperature: 0, + }), tools: [internetSearch], instructions: researchInstructions, subagents: [critiqueSubAgent, researchSubAgent], -}).withConfig({ recursionLimit: 1000 }); +}); // Invoke the agent async function main() { - const result = await agent.invoke({ - messages: [{ role: "user", content: "what is langgraph?" }], - }); - console.log(result); + const result = await agent.invoke( + { + messages: [new HumanMessage("what is langgraph?")], + }, + { recursionLimit: 1000 } + ); + + console.log("πŸŽ‰ Finished!"); + console.log( + `\n\nAgent ToDo List:\n${result.todos.map((todo) => ` - ${todo.content} (${todo.status})`).join("\n")}` + ); + console.log( + `\n\nAgent Files:\n${Object.entries(result.files) + .map(([key, value]) => ` - ${key}: ${value}`) + .join("\n")}` + ); } -export { agent, internetSearch }; - // Run if this file is executed directly if (import.meta.url === `file://${process.argv[1]}`) { main(); diff --git a/package.json b/package.json index edd1e80..61743cc 100644 --- a/package.json +++ b/package.json @@ -39,16 +39,17 @@ }, "homepage": "https://github.com/langchain-ai/deepagentsjs#readme", "dependencies": { - "@langchain/anthropic": "^0.3.25", - "@langchain/core": "^0.3.66", - "@langchain/langgraph": "^0.4.6", - "zod": "^3.25.32" + "@langchain/anthropic": "alpha", + "@langchain/core": "alpha", + "@langchain/langgraph": "next", + "langchain": "alpha", + "zod": "^4.1.11" }, "devDependencies": { "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.19.0", "@langchain/tavily": "^0.1.4", - "@tsconfig/recommended": "^1.0.8", + "@tsconfig/recommended": "^1.0.10", "@types/node": "^22.13.5", "dotenv": "^17.2.1", "eslint": "^9.19.0", @@ -58,13 +59,10 @@ "eslint-plugin-prettier": "^4.2.1", "globals": "^15.0.0", "prettier": "^3.6.2", - "typescript": "^5", + "tsx": "^4.20.5", + "typescript": "^5.9.2", "typescript-eslint": "^8.22.0" }, - "resolutions": { - "@langchain/langgraph": ">=0.2.53", - "@langchain/core": ">=0.3.0" - }, "files": [ "dist/**/*" ], diff --git a/src/graph.ts b/src/agent.ts similarity index 50% rename from src/graph.ts rename to src/agent.ts index 2451be5..b727c74 100644 --- a/src/graph.ts +++ b/src/agent.ts @@ -7,21 +7,30 @@ * with proper configuration. Ensures exact parameter matching and behavior with Python version. */ -// import "@langchain/anthropic/zod"; -import { createReactAgent } from "@langchain/langgraph/prebuilt"; -import { createTaskTool } from "./subAgent.js"; -import { getDefaultModel } from "./model.js"; -import { writeTodos, readFile, writeFile, editFile, ls } from "./tools.js"; -import { InteropZodObject } from "@langchain/core/utils/types"; -import type { - PostModelHook, +import { createAgent } from "langchain"; +import { + humanInTheLoopMiddleware, + anthropicPromptCachingMiddleware, + ResponseFormatUndefined, AnyAnnotationRoot, - CreateDeepAgentParams, -} from "./types.js"; + AgentMiddleware, + ReactAgent, +} from "langchain"; import type { StructuredTool } from "@langchain/core/tools"; -import { z } from "zod"; -import { DeepAgentState } from "./state.js"; -import { createInterruptHook } from "./interrupt.js"; + +import { createTaskTool } from "./subAgent.js"; +import type { CreateDeepAgentParams } from "./types.js"; +import { fsMiddleware, todoMiddleware } from "./middleware/index.js"; + +/** + * This needs to be exported to types can be inferred properly + */ +export type { + ResponseFormatUndefined, + AnyAnnotationRoot, + AgentMiddleware, + ReactAgent, +}; /** * Base prompt that provides instructions about available tools @@ -39,17 +48,6 @@ It is critical that you mark todos as completed as soon as you are done with a t - When doing web search, prefer to use the \`task\` tool in order to reduce context usage.`; -/** - * Built-in tools that are always available in Deep Agents - */ -const BUILTIN_TOOLS: StructuredTool[] = [ - writeTodos, - readFile, - writeFile, - editFile, - ls, -]; - /** * Create a Deep Agent with TypeScript types for all parameters. * Combines built-in tools with provided tools, creates task tool using createTaskTool(), @@ -57,41 +55,28 @@ const BUILTIN_TOOLS: StructuredTool[] = [ * Ensures exact parameter matching and behavior with Python version. * */ -export function createDeepAgent< - StateSchema extends z.ZodObject, - ContextSchema extends - | AnyAnnotationRoot - | InteropZodObject = AnyAnnotationRoot, ->(params: CreateDeepAgentParams = {}) { +export function createDeepAgent( + params: CreateDeepAgentParams = {} as CreateDeepAgentParams +) { const { - tools = [], - instructions, - model = getDefaultModel(), subagents = [], - postModelHook, - contextSchema, + tools = [], + model = "openai:gpt-4o-mini", interruptConfig = {}, - builtinTools, + instructions, } = params; - const stateSchema = params.stateSchema - ? DeepAgentState.extend(params.stateSchema.shape) - : DeepAgentState; - - // Filter built-in tools if builtinTools parameter is provided - const selectedBuiltinTools = builtinTools - ? BUILTIN_TOOLS.filter((tool) => - builtinTools.some((bt) => bt === tool.name), - ) - : BUILTIN_TOOLS; + // Combine instructions with base prompt like Python implementation + const finalInstructions = instructions + ? instructions + BASE_PROMPT + : BASE_PROMPT; - // Combine built-in tools with provided tools - const allTools: StructuredTool[] = [...selectedBuiltinTools, ...tools]; // Create task tool using createTaskTool() if subagents are provided + const allTools: StructuredTool[] = [...tools]; if (subagents.length > 0) { // Create tools map for task tool creation const toolsMap: Record = {}; - for (const tool of allTools) { + for (const tool of tools) { if (tool.name) { toolsMap[tool.name] = tool; } @@ -101,44 +86,23 @@ export function createDeepAgent< subagents, tools: toolsMap, model, - stateSchema, }); allTools.push(taskTool); } - // Combine instructions with base prompt like Python implementation - const finalInstructions = instructions - ? instructions + BASE_PROMPT - : BASE_PROMPT; - - // Should never be the case that both are specified - if (postModelHook && Object.keys(interruptConfig).length > 0) { - throw new Error( - "Cannot specify both postModelHook and interruptConfig together. " + - "Use either interruptConfig for tool interrupts or postModelHook for custom post-processing.", - ); - } - - let selectedPostModelHook: PostModelHook | undefined; - if (postModelHook !== undefined) { - selectedPostModelHook = postModelHook; - } else if (Object.keys(interruptConfig).length > 0) { - selectedPostModelHook = createInterruptHook(interruptConfig); - } else { - selectedPostModelHook = undefined; - } - - // Return createReactAgent with proper configuration - return createReactAgent< - typeof stateSchema, - Record, - ContextSchema - >({ - llm: model, + return createAgent({ + model, + systemPrompt: finalInstructions, tools: allTools, - stateSchema, - messageModifier: finalInstructions, - contextSchema, - postModelHook: selectedPostModelHook, + middleware: [ + fsMiddleware, + todoMiddleware, + anthropicPromptCachingMiddleware({ + unsupportedModelBehavior: "ignore", + }), + humanInTheLoopMiddleware({ + interruptOn: interruptConfig, + }), + ] as const, }); } diff --git a/src/index.ts b/src/index.ts index c8fb3b2..b093a48 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,11 +5,8 @@ * This implementation maintains 1:1 compatibility with the Python version. */ -export { createDeepAgent } from "./graph.js"; -export { getDefaultModel } from "./model.js"; +export { createDeepAgent } from "./agent.js"; export { createTaskTool } from "./subAgent.js"; -export { writeTodos, readFile, writeFile, editFile, ls } from "./tools.js"; -export { DeepAgentState, fileReducer } from "./state.js"; export { WRITE_TODOS_DESCRIPTION, TASK_DESCRIPTION_PREFIX, @@ -19,9 +16,6 @@ export { } from "./prompts.js"; export type { SubAgent, - Todo, - DeepAgentStateType, CreateDeepAgentParams, CreateTaskToolParams, - TodoStatus, } from "./types.js"; diff --git a/src/interrupt.ts b/src/interrupt.ts deleted file mode 100644 index 32a79cc..0000000 --- a/src/interrupt.ts +++ /dev/null @@ -1,137 +0,0 @@ -import type { DeepAgentStateType, ToolInterruptConfig } from "./types.js"; -import { interrupt } from "@langchain/langgraph"; -import { isAIMessage, AIMessage, ToolMessage } from "@langchain/core/messages"; -import type { ToolCall } from "@langchain/core/messages/tool"; -import { - HumanInterrupt, - HumanResponse, - ActionRequest, - HumanInterruptConfig, -} from "@langchain/langgraph/prebuilt"; - -export function createInterruptHook( - toolConfigs: ToolInterruptConfig, - messagePrefix: string = "Tool execution requires approval", -): (state: DeepAgentStateType) => Promise | void> { - /** - * Create a post model hook that handles interrupts using native LangGraph schemas. - * - * Args: - * toolConfigs: Record mapping tool names to HumanInterruptConfig objects - * messagePrefix: Optional message prefix for interrupt descriptions - */ - - Object.entries(toolConfigs).forEach(([tool, interruptConfig]) => { - if ( - interruptConfig && - typeof interruptConfig === "object" && - interruptConfig.allow_ignore - ) { - throw new Error( - `For ${tool} we get allow_ignore = true - we currently don't support ignore.`, - ); - } - }); - - return async function interruptHook( - state: DeepAgentStateType, - ): Promise | void> { - const messages = state.messages || []; - if (!messages.length) { - return; - } - - const lastMessage = messages[messages.length - 1]; - if ( - !isAIMessage(lastMessage) || - !lastMessage.tool_calls || - !lastMessage.tool_calls.length - ) { - return; - } - - const interruptToolCalls: ToolCall[] = []; - const autoApprovedToolCalls: ToolCall[] = []; - - for (const toolCall of lastMessage.tool_calls) { - const toolName = toolCall.name; - if (toolName in toolConfigs) { - interruptToolCalls.push(toolCall); - } else { - autoApprovedToolCalls.push(toolCall); - } - } - - if (!interruptToolCalls.length) { - return; - } - - const approvedToolCalls = [...autoApprovedToolCalls]; - - if (interruptToolCalls.length > 1) { - throw new Error( - "Right now, interrupt hook only works when one tool requires interrupts", - ); - } - - const toolCall = interruptToolCalls[0]; - const toolName = toolCall.name; - const toolArgs = toolCall.args; - const description = `${messagePrefix}\n\nTool: ${toolName}\nArgs: ${JSON.stringify(toolArgs, null, 2)}`; - const toolConfig = toolConfigs[toolName]; - - const defaultToolConfig: HumanInterruptConfig = { - allow_accept: true, - allow_edit: true, - allow_respond: true, - allow_ignore: false, - }; - - const request: HumanInterrupt = { - action_request: { - action: toolName, - args: toolArgs, - }, - config: typeof toolConfig === "object" ? toolConfig : defaultToolConfig, - description: description, - }; - - const res: HumanResponse | HumanResponse[] = await interrupt([request]); - const responses = Array.isArray(res) ? res : [res]; - if (responses.length !== 1) { - throw new Error(`Expected a list of one response, got ${responses}`); - } - - const response = responses[0]; - - if (response.type === "accept") { - approvedToolCalls.push(toolCall); - } else if (response.type === "edit") { - const edited = response.args as ActionRequest; - const newToolCall = { - name: edited.action, - args: edited.args, - id: toolCall.id, - }; - approvedToolCalls.push(newToolCall); - } else if (response.type === "response") { - if (!toolCall.id) { - throw new Error("Tool call must have an ID for response type"); - } - const responseMessage = new ToolMessage({ - tool_call_id: toolCall.id, - content: response.args as string, - }); - return { messages: [responseMessage] }; - } else { - throw new Error(`Unknown response type: ${response.type}`); - } - - const updatedLastMessage = new AIMessage({ - ...lastMessage, - tool_calls: approvedToolCalls, - }); - - return { messages: [updatedLastMessage] }; - }; -} diff --git a/src/tools.ts b/src/middleware/fs.ts similarity index 78% rename from src/tools.ts rename to src/middleware/fs.ts index 1d87c3e..c7ea790 100644 --- a/src/tools.ts +++ b/src/middleware/fs.ts @@ -6,60 +6,38 @@ * Implements mock filesystem operations using state.files similar to Python version. */ -import { tool, ToolRunnableConfig } from "@langchain/core/tools"; -import { ToolMessage } from "@langchain/core/messages"; +import { + createMiddleware, + AgentMiddleware, + tool, + ToolMessage, +} from "langchain"; import { Command, getCurrentTaskInput } from "@langchain/langgraph"; import { z } from "zod"; -import { - WRITE_TODOS_DESCRIPTION, - EDIT_DESCRIPTION, - TOOL_DESCRIPTION, -} from "./prompts.js"; -import { DeepAgentStateType } from "./types.js"; +import { EDIT_DESCRIPTION, TOOL_DESCRIPTION } from "../prompts.js"; -/** - * Write todos tool - manages todo list with Command return - * Uses getCurrentTaskInput() instead of Python's InjectedState - */ -export const writeTodos = tool( - (input, config: ToolRunnableConfig) => { - return new Command({ - update: { - todos: input.todos, - messages: [ - new ToolMessage({ - content: `Updated todo list to ${JSON.stringify(input.todos)}`, - tool_call_id: config.toolCall?.id as string, - }), - ], - }, - }); - }, - { - name: "write_todos", - description: WRITE_TODOS_DESCRIPTION, - schema: z.object({ - todos: z - .array( - z.object({ - content: z.string().describe("Content of the todo item"), - status: z - .enum(["pending", "in_progress", "completed"]) - .describe("Status of the todo"), - }), - ) - .describe("List of todo items to update"), - }), - }, -); +export type { AgentMiddleware }; + +const systemPrompt = `## Filesystem Tools \`ls\`, \`read_file\`, \`write_file\`, \`edit_file\` + +You have access to a local, private filesystem which you can interact with using these tools. +- ls: list all files in the local filesystem +- read_file: read a file from the local filesystem +- write_file: write to a file in the local filesystem +- edit_file: edit a file in the local filesystem`; + +const stateSchema = z.object({ + files: z.record(z.string(), z.string()).default({}), +}); +export type FsMiddlewareState = z.infer; /** * List files tool - returns list of files from state.files * Equivalent to Python's ls function */ -export const ls = tool( +const ls = tool( () => { - const state = getCurrentTaskInput(); + const state = getCurrentTaskInput(); const files = state.files || {}; return Object.keys(files); }, @@ -74,9 +52,9 @@ export const ls = tool( * Read file tool - reads from mock filesystem in state.files * Matches Python read_file function behavior exactly */ -export const readFile = tool( +const readFile = tool( (input: { file_path: string; offset?: number; limit?: number }) => { - const state = getCurrentTaskInput(); + const state = getCurrentTaskInput(); const mockFilesystem = state.files || {}; const { file_path, offset = 0, limit = 2000 } = input; @@ -144,12 +122,9 @@ export const readFile = tool( * Write file tool - writes to mock filesystem with Command return * Matches Python write_file function behavior exactly */ -export const writeFile = tool( - ( - input: { file_path: string; content: string }, - config: ToolRunnableConfig, - ) => { - const state = getCurrentTaskInput(); +const writeFile = tool( + (input: { file_path: string; content: string }, config) => { + const state = getCurrentTaskInput(); const files = { ...(state.files || {}) }; files[input.file_path] = input.content; @@ -160,6 +135,7 @@ export const writeFile = tool( new ToolMessage({ content: `Updated file ${input.file_path}`, tool_call_id: config.toolCall?.id as string, + name: "write_file", }), ], }, @@ -179,7 +155,7 @@ export const writeFile = tool( * Edit file tool - edits files in mock filesystem with Command return * Matches Python edit_file function behavior exactly */ -export const editFile = tool( +const editFile = tool( ( input: { file_path: string; @@ -187,9 +163,9 @@ export const editFile = tool( new_string: string; replace_all?: boolean; }, - config: ToolRunnableConfig, + config, ) => { - const state = getCurrentTaskInput(); + const state = getCurrentTaskInput(); const mockFilesystem = { ...(state.files || {}) }; const { file_path, old_string, new_string, replace_all = false } = input; @@ -248,6 +224,7 @@ export const editFile = tool( new ToolMessage({ content: `Updated file ${file_path}`, tool_call_id: config.toolCall?.id as string, + name: "edit_file", }), ], }, @@ -270,3 +247,15 @@ export const editFile = tool( }), }, ); + +export const fsMiddleware = createMiddleware({ + name: "fsMiddleware", + stateSchema, + tools: [ls, readFile, writeFile, editFile], + modifyModelRequest: (request) => { + return { + ...request, + systemPrompt: request.systemPrompt + systemPrompt, + }; + }, +}); diff --git a/src/middleware/index.ts b/src/middleware/index.ts new file mode 100644 index 0000000..9b23cca --- /dev/null +++ b/src/middleware/index.ts @@ -0,0 +1,2 @@ +export { fsMiddleware } from "./fs.js"; +export { todoMiddleware } from "./todo.js"; diff --git a/src/middleware/todo.ts b/src/middleware/todo.ts new file mode 100644 index 0000000..1514f73 --- /dev/null +++ b/src/middleware/todo.ts @@ -0,0 +1,75 @@ +import { z } from "zod"; +import { + createMiddleware, + tool, + ToolMessage, + AgentMiddleware, +} from "langchain"; +import { Command } from "@langchain/langgraph"; +import { WRITE_TODOS_DESCRIPTION } from "../prompts.js"; + +export type { AgentMiddleware }; + +const systemPrompt = `## \`write_todos\` + +You have access to the \`write_todos\` tool to help you manage and plan complex objectives. +Use this tool for complex objectives to ensure that you are tracking each necessary step and giving the user visibility into your progress. +This tool is very helpful for planning complex objectives, and for breaking down these larger complex objectives into smaller steps. + +It is critical that you mark todos as completed as soon as you are done with a step. Do not batch up multiple steps before marking them as completed. +For simple objectives that only require a few steps, it is better to just complete the objective directly and NOT use this tool. +Writing todos takes time and tokens, use it when it is helpful for managing complex many-step problems! But not for simple few-step requests. + +## Important To-Do List Usage Notes to Remember +- The \`write_todos\` tool should never be called multiple times in parallel. +- Don't be afraid to revise the To-Do list as you go. New information may reveal new tasks that need to be done, or old tasks that are irrelevant.`; + +export const TodoStatus = z.enum(["pending", "in_progress", "completed"]); +export const TodoSchema = z.object({ + content: z.string(), + status: TodoStatus, +}); +export const TodoMiddlewareState = z.object({ + todos: z.array(TodoSchema).default([]), +}); +export type TodoMiddlewareState = z.infer; + +/** + * Write todos tool - manages todo list with Command return + * Uses getCurrentTaskInput() instead of Python's InjectedState + */ +const writeTodos = tool( + ({ todos }, config) => { + return new Command({ + update: { + todos, + messages: [ + new ToolMessage({ + content: `Updated todo list to ${JSON.stringify(todos)}`, + tool_call_id: config.toolCall?.id as string, + name: "write_todos", + }), + ], + }, + }); + }, + { + name: "write_todos", + description: WRITE_TODOS_DESCRIPTION, + schema: z.object({ + todos: z.array(TodoSchema).describe("List of todo items to update"), + }), + }, +); + +export const todoMiddleware = createMiddleware({ + name: "todoMiddleware", + stateSchema: TodoMiddlewareState, + tools: [writeTodos], + modifyModelRequest: (request) => { + return { + ...request, + systemPrompt: request.systemPrompt + systemPrompt, + }; + }, +}); diff --git a/src/model.ts b/src/model.ts deleted file mode 100644 index e1a2104..0000000 --- a/src/model.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Model configuration for Deep Agents - * - * Default model configuration matching the Python implementation exactly. - * Returns a ChatAnthropic instance configured with claude-sonnet-4-20250514 and maxTokens: 4096. - */ - -import { ChatAnthropic } from "@langchain/anthropic"; -import { LanguageModelLike } from "./types.js"; - -/** - * Get the default model for Deep Agents - * - * Returns a ChatAnthropic instance configured exactly like the Python version: - * - model: "claude-sonnet-4-20250514" - * - maxTokens: 4096 - * - * @returns ChatAnthropic instance with default configuration - */ -export function getDefaultModel(): LanguageModelLike { - return new ChatAnthropic({ - model: "claude-sonnet-4-20250514", - maxTokens: 4096, - }); -} diff --git a/src/state.ts b/src/state.ts deleted file mode 100644 index bf0233b..0000000 --- a/src/state.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * State definitions for Deep Agents - * - * TypeScript equivalents of the Python state classes using LangGraph's Annotation.Root() pattern. - * Defines Todo interface and DeepAgentState using MessagesAnnotation as base with proper reducer functions. - */ - -import "@langchain/langgraph/zod"; -import { MessagesZodState } from "@langchain/langgraph"; -import type { Todo } from "./types.js"; -import { withLangGraph } from "@langchain/langgraph/zod"; -import { z } from "zod"; - -/** - * File reducer function that merges file dictionaries - * Matches the Python file_reducer function behavior exactly - */ -export function fileReducer( - left: Record | null | undefined, - right: Record | null | undefined, -): Record { - if (left == null) { - return right || {}; - } else if (right == null) { - return left; - } else { - return { ...left, ...right }; - } -} - -/** - * Todo reducer function that replaces the entire todo list - * This matches the Python behavior where todos are completely replaced - */ -export function todoReducer( - left: Todo[] | null | undefined, - right: Todo[] | null | undefined, -): Todo[] { - if (right != null) { - return right; - } - return left || []; -} - -/** - * DeepAgentState using LangGraph's Annotation.Root() pattern - * Extends MessagesAnnotation (equivalent to Python's AgentState) with todos and files channels - */ -export const DeepAgentState = MessagesZodState.extend({ - todos: withLangGraph(z.custom(), { - reducer: { - schema: z.custom(), - fn: todoReducer, - }, - }), - - files: withLangGraph(z.custom>(), { - reducer: { - schema: z.custom>(), - fn: fileReducer, - }, - }), -}); diff --git a/src/subAgent.ts b/src/subAgent.ts index e50512e..0475fb9 100644 --- a/src/subAgent.ts +++ b/src/subAgent.ts @@ -7,51 +7,27 @@ * and returns a tool function that uses createReactAgent for sub-agents. */ -import { tool, StructuredTool } from "@langchain/core/tools"; -import { ToolMessage } from "@langchain/core/messages"; -import { Command, getCurrentTaskInput } from "@langchain/langgraph"; -import { ToolRunnableConfig } from "@langchain/core/tools"; -import { createReactAgent } from "@langchain/langgraph/prebuilt"; import { z } from "zod"; -import type { LanguageModelLike, SubAgent } from "./types.js"; -import { getDefaultModel } from "./model.js"; -import { writeTodos, readFile, writeFile, editFile, ls } from "./tools.js"; -import { TASK_DESCRIPTION_PREFIX, TASK_DESCRIPTION_SUFFIX } from "./prompts.js"; +import { createAgent, ToolMessage, tool } from "langchain"; +import type { StructuredTool } from "@langchain/core/tools"; +import type { LanguageModelLike } from "@langchain/core/language_models/base"; +import { Command, getCurrentTaskInput } from "@langchain/langgraph"; -/** - * Built-in tools map for tool resolution by name - */ -const BUILTIN_TOOLS: Record = { - write_todos: writeTodos, - read_file: readFile, - write_file: writeFile, - edit_file: editFile, - ls: ls, -}; +import { TASK_DESCRIPTION_PREFIX, TASK_DESCRIPTION_SUFFIX } from "./prompts.js"; +import { fsMiddleware, todoMiddleware } from "./middleware/index.js"; +import type { SubAgent } from "./types.js"; /** * Create task tool function that creates agents map, handles tool resolution by name, * and returns a tool function that uses createReactAgent for sub-agents. * Uses Command for state updates and navigation between agents. */ -export function createTaskTool< - StateSchema extends z.ZodObject, ->(inputs: { +export function createTaskTool(inputs: { subagents: SubAgent[]; tools: Record; - model: LanguageModelLike; - stateSchema: StateSchema; -}) { - const { - subagents, - tools = {}, - model = getDefaultModel(), - stateSchema, - } = inputs; - - // Combine built-in tools with provided tools for tool resolution - const allTools = { ...BUILTIN_TOOLS, ...tools }; - + model: LanguageModelLike | string; +}): StructuredTool { + const { subagents, tools = {}, model = "openai:gpt-4o-mini" } = inputs; // Pre-create all agents like Python does const agentsMap = new Map(); for (const subagent of subagents) { @@ -59,37 +35,38 @@ export function createTaskTool< const subagentTools: StructuredTool[] = []; if (subagent.tools) { for (const toolName of subagent.tools) { - const resolvedTool = allTools[toolName]; + const resolvedTool = tools[toolName]; if (resolvedTool) { subagentTools.push(resolvedTool); } else { // eslint-disable-next-line no-console console.warn( - `Warning: Tool '${toolName}' not found for agent '${subagent.name}'`, + `Warning: Tool '${toolName}' not found for agent '${subagent.name}'` ); } } } else { // If no tools specified, use all tools like Python does - subagentTools.push(...Object.values(allTools)); + subagentTools.push(...Object.values(tools)); } // Create react agent for the subagent (pre-create like Python) - const reactAgent = createReactAgent({ - llm: model, + const reactAgent = createAgent({ + model: subagent.model ?? model, tools: subagentTools, - stateSchema, - messageModifier: subagent.prompt, + systemPrompt: subagent.prompt, + middleware: [ + fsMiddleware, + todoMiddleware, + ...(subagent.middleware ?? []), + ], }); agentsMap.set(subagent.name, reactAgent); } return tool( - async ( - input: { description: string; subagent_type: string }, - config: ToolRunnableConfig, - ) => { + async (input: { description: string; subagent_type: string }, config) => { const { description, subagent_type } = input; // Get the pre-created agent @@ -100,7 +77,7 @@ export function createTaskTool< try { // Get current state for context - const currentState = getCurrentTaskInput>(); + const currentState = getCurrentTaskInput(); // Modify state messages like Python does const modifiedState = { @@ -126,6 +103,7 @@ export function createTaskTool< content: result.messages?.slice(-1)[0]?.content || "Task completed", tool_call_id: config.toolCall?.id as string, + name: "task", }), ], }, @@ -140,6 +118,7 @@ export function createTaskTool< new ToolMessage({ content: `Error executing task '${description}' with agent '${subagent_type}': ${errorMessage}`, tool_call_id: config.toolCall?.id as string, + name: "task", }), ], }, @@ -151,7 +130,7 @@ export function createTaskTool< description: TASK_DESCRIPTION_PREFIX.replace( "{other_agents}", - subagents.map((a) => `- ${a.name}: ${a.description}`).join("\n"), + subagents.map((a) => `- ${a.name}: ${a.description}`).join("\n") ) + TASK_DESCRIPTION_SUFFIX, schema: z.object({ description: z @@ -160,9 +139,9 @@ export function createTaskTool< subagent_type: z .string() .describe( - `Name of the agent to use. Available: ${subagents.map((a) => a.name).join(", ")}`, + `Name of the agent to use. Available: ${subagents.map((a) => a.name).join(", ")}` ), }), - }, + } ); } diff --git a/src/types.ts b/src/types.ts index 247ff35..b6608b0 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,78 +6,37 @@ * TypeScript interfaces and types including StateSchemaType, SubAgent, Todo, * and proper generic types for state schemas. */ - -import type { - BaseLanguageModelInput, - LanguageModelOutput, -} from "@langchain/core/language_models/base"; -import type { StructuredTool } from "@langchain/core/tools"; -import type { DeepAgentState } from "./state.js"; import { z } from "zod"; -import { Runnable } from "@langchain/core/runnables"; -import { AnnotationRoot } from "@langchain/langgraph"; -import { InteropZodObject } from "@langchain/core/utils/types"; -import type { HumanInterruptConfig } from "@langchain/langgraph/prebuilt"; - -export type AnyAnnotationRoot = AnnotationRoot; - -export type InferZodObjectShape = - T extends z.ZodObject ? Shape : never; +import type { AgentMiddleware } from "langchain"; +import type { HumanInTheLoopMiddlewareConfig } from "langchain/middleware"; +import type { StructuredTool } from "@langchain/core/tools"; +import type { LanguageModelLike } from "@langchain/core/language_models/base"; +import type { InferInteropZodInput } from "@langchain/core/utils/types"; /** * SubAgent interface matching Python's TypedDict structure */ -export interface SubAgent { - name: string; - description: string; - prompt: string; - tools?: string[]; -} - -export type TodoStatus = "pending" | "in_progress" | "completed"; - -export interface Todo { - content: string; - status: TodoStatus; -} - -export type DeepAgentStateType = z.infer; - -export type LanguageModelLike = Runnable< - BaseLanguageModelInput, - LanguageModelOutput ->; - -export type PostModelHook = ( - state: DeepAgentStateType, - model: LanguageModelLike, -) => Promise | void>; - -export type ToolInterruptConfig = Record< - string, - HumanInterruptConfig | boolean ->; - -export interface CreateDeepAgentParams< - StateSchema extends z.ZodObject, - ContextSchema extends - | AnyAnnotationRoot - | InteropZodObject = AnyAnnotationRoot, -> { +export const SubAgentSchema = z.object({ + name: z.string(), + description: z.string(), + prompt: z.string(), + tools: z.array(z.string()).optional(), + // Optional per-subagent model: can be either a model instance or a record of model name to model instance + model: z.union([z.custom(), z.string()]).optional(), + middleware: z.array(z.custom()).optional(), +}); +export type SubAgent = InferInteropZodInput; + +export interface CreateDeepAgentParams { tools?: StructuredTool[]; instructions?: string; - model?: LanguageModelLike; + model?: LanguageModelLike | string; subagents?: SubAgent[]; - stateSchema?: StateSchema; - contextSchema?: ContextSchema; - postModelHook?: PostModelHook; - interruptConfig?: ToolInterruptConfig; + interruptConfig?: NonNullable["interruptOn"]; builtinTools?: string[]; } -export interface CreateTaskToolParams< - StateSchema extends z.ZodObject, -> { +export interface CreateTaskToolParams { subagents: SubAgent[]; tools?: Record; model?: LanguageModelLike; diff --git a/tsconfig.json b/tsconfig.json index 7c3f0f3..47458d3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@tsconfig/recommended", + "extends": "@tsconfig/recommended/tsconfig.json", "compilerOptions": { "target": "ES2021", "lib": ["ES2023", "DOM"], diff --git a/yarn.lock b/yarn.lock index 3cc7ff3..43aefcc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,10 +12,140 @@ resolved "https://registry.yarnpkg.com/@cfworker/json-schema/-/json-schema-4.1.1.tgz#4a2a3947ee9fa7b7c24be981422831b8674c3be6" integrity sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" - integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== +"@esbuild/aix-ppc64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz#ee6b7163a13528e099ecf562b972f2bcebe0aa97" + integrity sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw== + +"@esbuild/android-arm64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz#115fc76631e82dd06811bfaf2db0d4979c16e2cb" + integrity sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg== + +"@esbuild/android-arm@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.10.tgz#8d5811912da77f615398611e5bbc1333fe321aa9" + integrity sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w== + +"@esbuild/android-x64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.10.tgz#e3e96516b2d50d74105bb92594c473e30ddc16b1" + integrity sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg== + +"@esbuild/darwin-arm64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz#6af6bb1d05887dac515de1b162b59dc71212ed76" + integrity sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA== + +"@esbuild/darwin-x64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz#99ae82347fbd336fc2d28ffd4f05694e6e5b723d" + integrity sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg== + +"@esbuild/freebsd-arm64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz#0c6d5558a6322b0bdb17f7025c19bd7d2359437d" + integrity sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg== + +"@esbuild/freebsd-x64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz#8c35873fab8c0857a75300a3dcce4324ca0b9844" + integrity sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA== + +"@esbuild/linux-arm64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz#3edc2f87b889a15b4cedaf65f498c2bed7b16b90" + integrity sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ== + +"@esbuild/linux-arm@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz#86501cfdfb3d110176d80c41b27ed4611471cde7" + integrity sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg== + +"@esbuild/linux-ia32@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz#e6589877876142537c6864680cd5d26a622b9d97" + integrity sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ== + +"@esbuild/linux-loong64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz#11119e18781f136d8083ea10eb6be73db7532de8" + integrity sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg== + +"@esbuild/linux-mips64el@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz#3052f5436b0c0c67a25658d5fc87f045e7def9e6" + integrity sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA== + +"@esbuild/linux-ppc64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz#2f098920ee5be2ce799f35e367b28709925a8744" + integrity sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA== + +"@esbuild/linux-riscv64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz#fa51d7fd0a22a62b51b4b94b405a3198cf7405dd" + integrity sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA== + +"@esbuild/linux-s390x@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz#a27642e36fc282748fdb38954bd3ef4f85791e8a" + integrity sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew== + +"@esbuild/linux-x64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz#9d9b09c0033d17529570ced6d813f98315dfe4e9" + integrity sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA== + +"@esbuild/netbsd-arm64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz#25c09a659c97e8af19e3f2afd1c9190435802151" + integrity sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A== + +"@esbuild/netbsd-x64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz#7fa5f6ffc19be3a0f6f5fd32c90df3dc2506937a" + integrity sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig== + +"@esbuild/openbsd-arm64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz#8faa6aa1afca0c6d024398321d6cb1c18e72a1c3" + integrity sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw== + +"@esbuild/openbsd-x64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz#a42979b016f29559a8453d32440d3c8cd420af5e" + integrity sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw== + +"@esbuild/openharmony-arm64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz#fd87bfeadd7eeb3aa384bbba907459ffa3197cb1" + integrity sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag== + +"@esbuild/sunos-x64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz#3a18f590e36cb78ae7397976b760b2b8c74407f4" + integrity sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ== + +"@esbuild/win32-arm64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz#e71741a251e3fd971408827a529d2325551f530c" + integrity sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw== + +"@esbuild/win32-ia32@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz#c6f010b5d3b943d8901a0c87ea55f93b8b54bf94" + integrity sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw== + +"@esbuild/win32-x64@0.25.10": + version "0.25.10" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz#e4b3e255a1b4aea84f6e1d2ae0b73f826c3785bd" + integrity sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw== + +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: eslint-visitor-keys "^3.4.3" @@ -33,15 +163,15 @@ debug "^4.3.1" minimatch "^3.1.2" -"@eslint/config-helpers@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.0.tgz#3e09a90dfb87e0005c7694791e58e97077271286" - integrity sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw== +"@eslint/config-helpers@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.1.tgz#d316e47905bd0a1a931fa50e669b9af4104d1617" + integrity sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== -"@eslint/core@^0.15.0", "@eslint/core@^0.15.1": - version "0.15.1" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.1.tgz#d530d44209cbfe2f82ef86d6ba08760196dd3b60" - integrity sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA== +"@eslint/core@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.2.tgz#59386327d7862cc3603ebc7c78159d2dcc4a868f" + integrity sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg== dependencies: "@types/json-schema" "^7.0.15" @@ -60,22 +190,22 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.32.0", "@eslint/js@^9.19.0": - version "9.32.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.32.0.tgz#a02916f58bd587ea276876cb051b579a3d75d091" - integrity sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg== +"@eslint/js@9.36.0", "@eslint/js@^9.19.0": + version "9.36.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.36.0.tgz#b1a3893dd6ce2defed5fd49de805ba40368e8fef" + integrity sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw== "@eslint/object-schema@^2.1.6": version "2.1.6" resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== -"@eslint/plugin-kit@^0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz#c6b9f165e94bf4d9fdd493f1c028a94aaf5fc1cc" - integrity sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw== +"@eslint/plugin-kit@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz#fd8764f0ee79c8ddab4da65460c641cefee017c5" + integrity sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w== dependencies: - "@eslint/core" "^0.15.1" + "@eslint/core" "^0.15.2" levn "^0.4.1" "@humanfs/core@^0.19.1": @@ -84,107 +214,86 @@ integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== "@humanfs/node@^0.16.6": - version "0.16.6" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" - integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: "@humanfs/core" "^0.19.1" - "@humanwhocodes/retry" "^0.3.0" + "@humanwhocodes/retry" "^0.4.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/retry@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" - integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== - -"@humanwhocodes/retry@^0.4.2": +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": version "0.4.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== -"@langchain/anthropic@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@langchain/anthropic/-/anthropic-0.3.25.tgz#399f34142e08f9807bc6d8462d2a01251fd20f23" - integrity sha512-KipKY0njNps7bgINca1jVAShnOh/+MpfN/hB580TUVrnsT21e5bykfNjiGVZ1S1A/qdHSJsRMkie2igGij/acA== +"@langchain/anthropic@alpha": + version "1.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/@langchain/anthropic/-/anthropic-1.0.0-alpha.1.tgz#86b26766d36cba974e21f91f134a02bdd272e8ad" + integrity sha512-H/A9JqE14OVTT3RVwPkXvw8Sx74TUBRyqSgtkmXO6qF5EbJ0NpKOu1rKGWc/r52i6zXaxtEEGWWwC7GSn4wdRg== dependencies: "@anthropic-ai/sdk" "^0.56.0" - fast-xml-parser "^4.4.1" -"@langchain/core@>=0.3.0", "@langchain/core@^0.3.66": - version "0.3.66" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.3.66.tgz#cd20687f29a07148436cd8b72b88c66d076c500c" - integrity sha512-d3SgSDOlgOjdIbReIXVQl9HaQzKqO/5+E+o3kJwoKXLGP9dxi7+lMyaII7yv7G8/aUxMWLwFES9zc1jFoeJEZw== +"@langchain/core@alpha": + version "1.0.0-alpha.6" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-1.0.0-alpha.6.tgz#21e6f4a670f8871c76d5b980e599f8f31b424d17" + integrity sha512-YjYKpz72A6cSS+gwxahpGMT3MhUu7eYR8GpvkcXWbIGTGcuAlPhfVuiQbxtelbIm/cMetp+ZCNhfTd48L3/KqA== dependencies: "@cfworker/json-schema" "^4.0.2" ansi-styles "^5.0.0" camelcase "6" decamelize "1.2.0" js-tiktoken "^1.0.12" - langsmith "^0.3.46" + langsmith "^0.3.64" mustache "^4.2.0" p-queue "^6.6.2" p-retry "4" uuid "^10.0.0" - zod "^3.25.32" - zod-to-json-schema "^3.22.3" + zod "^3.25.76 || ^4" -"@langchain/langgraph-checkpoint@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.1.0.tgz#d2a8bd9eb831f47cfe8b74bc196004388a6083bb" - integrity sha512-7oY5b0VQSxcV3DgoHdXiCgBhEzml/ZjZfKNeuq6oZ3ggcdUICa/fzrIBbFju6gxPU8ly93s0OsjF4yURnHw70Q== +"@langchain/langgraph-checkpoint@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.1.1.tgz#500569a02af4b85172d775de63eeba06afa0c189" + integrity sha512-h2bP0RUikQZu0Um1ZUPErQLXyhzroJqKRbRcxYRTAh49oNlsfeq4A3K4YEDRbGGuyPZI/Jiqwhks1wZwY73AZw== dependencies: uuid "^10.0.0" -"@langchain/langgraph-sdk@~0.0.105": - version "0.0.105" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.105.tgz#cfed3483f9ae249d65813f68566667407e6e3c4e" - integrity sha512-3DD1W1wnbP48807qq+5gY248mFcwwNGqKdmZt05P3zeLpfP5Sfm6ELzVvqHGpr+qumP0yGRZs/7qArYGXRRfcQ== - dependencies: - "@types/json-schema" "^7.0.15" - p-queue "^6.6.2" - p-retry "4" - uuid "^9.0.0" - -"@langchain/langgraph-sdk@~0.0.109": - version "0.0.109" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.109.tgz#9265e097bb411b87524095c07e2c5d2d4ea85133" - integrity sha512-UpjL0c681CJqvKxgWD8o9fwUXRZzcDfsz8EcJ2PkXFxQFKRLe4QKZMtBr4OKFTR94pJtlOuTVla4OV5I5w+mdQ== +"@langchain/langgraph-sdk@~0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.1.6.tgz#cf12ddf0c154d5fd2647f99574000644428c5fc2" + integrity sha512-PeXxfo4ls8yql6YdW8qjnZgp1giy7oqJiGjy4j2OSJ7lpkir8n62YpvADDByEh9sPzGLJYh92ZUAh0GNfQ18vA== dependencies: "@types/json-schema" "^7.0.15" p-queue "^6.6.2" p-retry "4" uuid "^9.0.0" -"@langchain/langgraph@>=0.2.53": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.4.2.tgz#77e3ae59c465685b2ac2126077bbff17d95c3cff" - integrity sha512-QAxeBIjamn2T2hlqCi+qC8k3Bv/bE/j0VGA+qR+z8NizSbGeD2uftqAYIrk3YtYLWIwk0kIICKcmTz8dKIWzog== +"@langchain/langgraph@next": + version "1.0.0-alpha.4" + resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-1.0.0-alpha.4.tgz#63aa85169d162683b42e9f8e95cc5fef64847aa2" + integrity sha512-TI0SYmEiZziyyB9LmapY5OZhd92A/cO4Du1CmxIf5Ri7yhhzR+od3zvvdt1GvchOxD2YtXP4Er8nZOkK70WGQw== dependencies: - "@langchain/langgraph-checkpoint" "^0.1.0" - "@langchain/langgraph-sdk" "~0.0.105" + "@langchain/langgraph-checkpoint" "^0.1.1" + "@langchain/langgraph-sdk" "~0.1.6" uuid "^10.0.0" - zod "^3.25.32" -"@langchain/langgraph@^0.4.6": - version "0.4.6" - resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.4.6.tgz#503bbc3ead1597ed85da297d9449d355a0986705" - integrity sha512-4ivuy6PWMvgE7mOByePdJ88Mk7JpoC+nZ6SB0g9qhX3oZtIA5d3Fswtcr5hgS3XlYaTtr5hJRYdXBehZ3JNX3Q== +"@langchain/tavily@^0.1.4": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@langchain/tavily/-/tavily-0.1.5.tgz#b8c86cdd1f4af1c9397a1899b840527a38646b2b" + integrity sha512-6C8hb3d6YjlGJPdPFfaNlrUS0h6blQx4cRzCKeDdCvixcghzV8llAmuzvJSmAyALprFfvKtj+1NJb4ttj1iZ/A== dependencies: - "@langchain/langgraph-checkpoint" "^0.1.0" - "@langchain/langgraph-sdk" "~0.0.109" - uuid "^10.0.0" zod "^3.25.32" -"@langchain/tavily@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@langchain/tavily/-/tavily-0.1.4.tgz#5f42dd6ed2552e72d06b6d6365fc7d7de398a2d2" - integrity sha512-8hlZYMmqZ7oVsH9G8eq6hXq8UTgwmrXAUP6MZXNN+31SPCkFn31dK8JyEA1OI9paC6Rcgc2XMT36oy7tARKOwA== +"@langchain/textsplitters@1.0.0-alpha.1": + version "1.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/@langchain/textsplitters/-/textsplitters-1.0.0-alpha.1.tgz#4aa4e0d1cfa767b123de7c2685eb2d7c9d589873" + integrity sha512-PcSVR/WSaGR7mz71mrw6f5f6bAFvV+DkYnuvGhK7/Rkg/Nr78XW+gTP8SDkX57yLoDI0AMaIIFArT++FnTsgSg== dependencies: - zod "^3.25.32" + js-tiktoken "^1.0.12" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -212,7 +321,7 @@ resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@tsconfig/recommended@^1.0.8": +"@tsconfig/recommended@^1.0.10": version "1.0.10" resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.10.tgz#5ed23fcf8cca7d78a9e3a6e4828cd96cf783994c" integrity sha512-cGvydvg03lONp5Z9yaplW493Vw9/um7k588mvDkm+VFPF2PZUVPx0uswq4PFpeEySsLbQRETrDRhzh4Dmxaslw== @@ -233,9 +342,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/node@^22.13.5": - version "22.17.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.17.0.tgz#e8c9090e957bd4d9860efb323eb92d297347eac7" - integrity sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ== + version "22.18.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.6.tgz#38172ef0b65e09d1a4fc715eb09a7d5decfdc748" + integrity sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ== dependencies: undici-types "~6.21.0" @@ -249,79 +358,79 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== -"@typescript-eslint/eslint-plugin@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz#c9afec1866ee1a6ea3d768b5f8e92201efbbba06" - integrity sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw== +"@typescript-eslint/eslint-plugin@8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.1.tgz#011a2b5913d297b3d9d77f64fb78575bab01a1b3" + integrity sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.39.0" - "@typescript-eslint/type-utils" "8.39.0" - "@typescript-eslint/utils" "8.39.0" - "@typescript-eslint/visitor-keys" "8.39.0" + "@typescript-eslint/scope-manager" "8.44.1" + "@typescript-eslint/type-utils" "8.44.1" + "@typescript-eslint/utils" "8.44.1" + "@typescript-eslint/visitor-keys" "8.44.1" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.39.0.tgz#c4b895d7a47f4cd5ee6ee77ea30e61d58b802008" - integrity sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg== +"@typescript-eslint/parser@8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.44.1.tgz#d4c85791389462823596ad46e2b90d34845e05eb" + integrity sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw== dependencies: - "@typescript-eslint/scope-manager" "8.39.0" - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/typescript-estree" "8.39.0" - "@typescript-eslint/visitor-keys" "8.39.0" + "@typescript-eslint/scope-manager" "8.44.1" + "@typescript-eslint/types" "8.44.1" + "@typescript-eslint/typescript-estree" "8.44.1" + "@typescript-eslint/visitor-keys" "8.44.1" debug "^4.3.4" -"@typescript-eslint/project-service@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.39.0.tgz#71cb29c3f8139f99a905b8705127bffc2ae84759" - integrity sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew== +"@typescript-eslint/project-service@8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.44.1.tgz#1bccd9796d25032b190f355f55c5fde061158abb" + integrity sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.39.0" - "@typescript-eslint/types" "^8.39.0" + "@typescript-eslint/tsconfig-utils" "^8.44.1" + "@typescript-eslint/types" "^8.44.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz#ba4bf6d8257bbc172c298febf16bc22df4856570" - integrity sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A== +"@typescript-eslint/scope-manager@8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.44.1.tgz#31c27f92e4aed8d0f4d6fe2b9e5187d1d8797bd7" + integrity sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg== dependencies: - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/visitor-keys" "8.39.0" + "@typescript-eslint/types" "8.44.1" + "@typescript-eslint/visitor-keys" "8.44.1" -"@typescript-eslint/tsconfig-utils@8.39.0", "@typescript-eslint/tsconfig-utils@^8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz#b2e87fef41a3067c570533b722f6af47be213f13" - integrity sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ== +"@typescript-eslint/tsconfig-utils@8.44.1", "@typescript-eslint/tsconfig-utils@^8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.1.tgz#e1d9d047078fac37d3e638484ab3b56215963342" + integrity sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ== -"@typescript-eslint/type-utils@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz#310ec781ae5e7bb0f5940bfd652573587f22786b" - integrity sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q== +"@typescript-eslint/type-utils@8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.44.1.tgz#be9d31e0f911d17ee8ac99921bb74cf1f9df3906" + integrity sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g== dependencies: - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/typescript-estree" "8.39.0" - "@typescript-eslint/utils" "8.39.0" + "@typescript-eslint/types" "8.44.1" + "@typescript-eslint/typescript-estree" "8.44.1" + "@typescript-eslint/utils" "8.44.1" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.39.0", "@typescript-eslint/types@^8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.39.0.tgz#80f010b7169d434a91cd0529d70a528dbc9c99c6" - integrity sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg== +"@typescript-eslint/types@8.44.1", "@typescript-eslint/types@^8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.44.1.tgz#85d1cad1290a003ff60420388797e85d1c3f76ff" + integrity sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ== -"@typescript-eslint/typescript-estree@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz#b9477a5c47a0feceffe91adf553ad9a3cd4cb3d6" - integrity sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw== +"@typescript-eslint/typescript-estree@8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.1.tgz#4f17650e5adabecfcc13cd8c517937a4ef5cd424" + integrity sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A== dependencies: - "@typescript-eslint/project-service" "8.39.0" - "@typescript-eslint/tsconfig-utils" "8.39.0" - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/visitor-keys" "8.39.0" + "@typescript-eslint/project-service" "8.44.1" + "@typescript-eslint/tsconfig-utils" "8.44.1" + "@typescript-eslint/types" "8.44.1" + "@typescript-eslint/visitor-keys" "8.44.1" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -329,22 +438,22 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.39.0.tgz#dfea42f3c7ec85f9f3e994ff0bba8f3b2f09e220" - integrity sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ== +"@typescript-eslint/utils@8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.44.1.tgz#f23d48eb90791a821dc17d4f67bb96faeb75d63d" + integrity sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.39.0" - "@typescript-eslint/types" "8.39.0" - "@typescript-eslint/typescript-estree" "8.39.0" + "@typescript-eslint/scope-manager" "8.44.1" + "@typescript-eslint/types" "8.44.1" + "@typescript-eslint/typescript-estree" "8.44.1" -"@typescript-eslint/visitor-keys@8.39.0": - version "8.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz#5d619a6e810cdd3fd1913632719cbccab08bf875" - integrity sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA== +"@typescript-eslint/visitor-keys@8.44.1": + version "8.44.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.1.tgz#1d96197a7fcceaba647b3bd6a8594df8dc4deb5a" + integrity sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw== dependencies: - "@typescript-eslint/types" "8.39.0" + "@typescript-eslint/types" "8.44.1" eslint-visitor-keys "^4.2.1" acorn-jsx@^5.3.2: @@ -608,9 +717,9 @@ debug@^3.2.7: ms "^2.1.1" debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" @@ -650,9 +759,9 @@ doctrine@^2.1.0: esutils "^2.0.2" dotenv@^17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.1.tgz#6f32e10faf014883515538dc922a0fb8765d9b32" - integrity sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ== + version "17.2.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.2.tgz#4010cfe1c2be4fc0f46fd3d951afb424bc067ac6" + integrity sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q== dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" @@ -766,6 +875,38 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" +esbuild@~0.25.0: + version "0.25.10" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.10.tgz#37f5aa5cd14500f141be121c01b096ca83ac34a9" + integrity sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.10" + "@esbuild/android-arm" "0.25.10" + "@esbuild/android-arm64" "0.25.10" + "@esbuild/android-x64" "0.25.10" + "@esbuild/darwin-arm64" "0.25.10" + "@esbuild/darwin-x64" "0.25.10" + "@esbuild/freebsd-arm64" "0.25.10" + "@esbuild/freebsd-x64" "0.25.10" + "@esbuild/linux-arm" "0.25.10" + "@esbuild/linux-arm64" "0.25.10" + "@esbuild/linux-ia32" "0.25.10" + "@esbuild/linux-loong64" "0.25.10" + "@esbuild/linux-mips64el" "0.25.10" + "@esbuild/linux-ppc64" "0.25.10" + "@esbuild/linux-riscv64" "0.25.10" + "@esbuild/linux-s390x" "0.25.10" + "@esbuild/linux-x64" "0.25.10" + "@esbuild/netbsd-arm64" "0.25.10" + "@esbuild/netbsd-x64" "0.25.10" + "@esbuild/openbsd-arm64" "0.25.10" + "@esbuild/openbsd-x64" "0.25.10" + "@esbuild/openharmony-arm64" "0.25.10" + "@esbuild/sunos-x64" "0.25.10" + "@esbuild/win32-arm64" "0.25.10" + "@esbuild/win32-ia32" "0.25.10" + "@esbuild/win32-x64" "0.25.10" + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -848,18 +989,18 @@ eslint-visitor-keys@^4.2.1: integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@^9.19.0: - version "9.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.32.0.tgz#4ea28df4a8dbc454e1251e0f3aed4bcf4ce50a47" - integrity sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg== + version "9.36.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.36.0.tgz#9cc5cbbfb9c01070425d9bfed81b4e79a1c09088" + integrity sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" "@eslint/config-array" "^0.21.0" - "@eslint/config-helpers" "^0.3.0" - "@eslint/core" "^0.15.0" + "@eslint/config-helpers" "^0.3.1" + "@eslint/core" "^0.15.2" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.32.0" - "@eslint/plugin-kit" "^0.3.4" + "@eslint/js" "9.36.0" + "@eslint/plugin-kit" "^0.3.5" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" @@ -957,13 +1098,6 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-xml-parser@^4.4.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb" - integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig== - dependencies: - strnum "^1.1.1" - fastq@^1.6.0: version "1.19.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" @@ -1013,6 +1147,11 @@ for-each@^0.3.3, for-each@^0.3.5: dependencies: is-callable "^1.2.7" +fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -1068,6 +1207,13 @@ get-symbol-description@^1.1.0: es-errors "^1.3.0" get-intrinsic "^1.2.6" +get-tsconfig@^4.7.5: + version "4.10.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" + integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== + dependencies: + resolve-pkg-maps "^1.0.0" + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1378,9 +1524,9 @@ isexe@^2.0.0: integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-tiktoken@^1.0.12: - version "1.0.20" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.20.tgz#fa2733bf147acaf1bdcf9ab8a878e79c581c95f2" - integrity sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A== + version "1.0.21" + resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.21.tgz#368a9957591a30a62997dd0c4cf30866f00f8221" + integrity sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g== dependencies: base64-js "^1.5.1" @@ -1413,6 +1559,11 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" +jsonpointer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -1420,10 +1571,28 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" -langsmith@^0.3.46: - version "0.3.50" - resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.50.tgz#bbed0e934f0c91394a485b64e7b3c50abd86fae3" - integrity sha512-yosW6sR0EFnMnYKKyBmcqTNknDVOs+dUfcswWk80JoRxox6WEyel7hmSkSzabP/GmTs0hXbrtc+lZwpJWSnI0w== +langchain@alpha: + version "1.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/langchain/-/langchain-1.0.0-alpha.7.tgz#555fb807c66da15e7f7194d8ffc923b069877064" + integrity sha512-//BrQQclwaUbXmnSTboocU73PsHn15L5ctF7Mouea2+hAQClsW4271VQ9V8stxqTiEe5/yrvTi5auyzvsa7okg== + dependencies: + "@langchain/langgraph" next + "@langchain/langgraph-checkpoint" "^0.1.1" + "@langchain/textsplitters" "1.0.0-alpha.1" + js-yaml "^4.1.0" + jsonpointer "^5.0.1" + openapi-types "^12.1.3" + p-retry "4" + uuid "^10.0.0" + yaml "^2.2.1" + zod "^3.25.76 || ^4" + optionalDependencies: + langsmith "^0.3.64" + +langsmith@^0.3.64: + version "0.3.69" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.69.tgz#ae9f3db6e11cac8c337401ead5d05171002fdc54" + integrity sha512-YKzu92YAP2o+d+1VmR38xqFX0RIRLKYj1IqdflVEY83X0FoiVlrWO3xDLXgnu7vhZ2N2M6jx8VO9fVF8yy9gHA== dependencies: "@types/uuid" "^10.0.0" chalk "^4.1.2" @@ -1556,6 +1725,11 @@ object.values@^1.2.1: define-properties "^1.2.1" es-object-atoms "^1.0.0" +openapi-types@^12.1.3: + version "12.1.3" + resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3" + integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -1709,6 +1883,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve@^1.22.4: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" @@ -1911,11 +2090,6 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strnum@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" - integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -1950,6 +2124,16 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tsx@^4.20.5: + version "4.20.5" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.20.5.tgz#856c8b2f114c50a9f4ae108126967a167f240dc7" + integrity sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw== + dependencies: + esbuild "~0.25.0" + get-tsconfig "^4.7.5" + optionalDependencies: + fsevents "~2.3.3" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -2003,16 +2187,16 @@ typed-array-length@^1.0.7: reflect.getprototypeof "^1.0.6" typescript-eslint@^8.22.0: - version "8.39.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.39.0.tgz#b19c1a925cf8566831ae3875d2881ee2349808a5" - integrity sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q== + version "8.44.1" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.44.1.tgz#00506d12db48112cbb43030c5b810e6117670010" + integrity sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg== dependencies: - "@typescript-eslint/eslint-plugin" "8.39.0" - "@typescript-eslint/parser" "8.39.0" - "@typescript-eslint/typescript-estree" "8.39.0" - "@typescript-eslint/utils" "8.39.0" + "@typescript-eslint/eslint-plugin" "8.44.1" + "@typescript-eslint/parser" "8.44.1" + "@typescript-eslint/typescript-estree" "8.44.1" + "@typescript-eslint/utils" "8.44.1" -typescript@^5: +typescript@^5.9.2: version "5.9.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== @@ -2114,17 +2298,22 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +yaml@^2.2.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zod-to-json-schema@^3.22.3: - version "3.24.6" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz#5920f020c4d2647edfbb954fa036082b92c9e12d" - integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg== - zod@^3.25.32: version "3.25.76" resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== + +"zod@^3.25.76 || ^4", zod@^4.1.11: + version "4.1.11" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.1.11.tgz#4aab62f76cfd45e6c6166519ba31b2ea019f75f5" + integrity sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==