[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-langchain-ai--deepagentsjs":3,"tool-langchain-ai--deepagentsjs":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",150720,2,"2026-04-11T11:33:10",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":77,"owner_email":78,"owner_twitter":74,"owner_website":79,"owner_url":80,"languages":81,"stars":86,"forks":87,"last_commit_at":88,"license":89,"difficulty_score":32,"env_os":90,"env_gpu":90,"env_ram":90,"env_deps":91,"category_tags":101,"github_topics":102,"view_count":32,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":106,"updated_at":107,"faqs":108,"releases":137},6641,"langchain-ai\u002Fdeepagentsjs","deepagentsjs","Agent harness built with LangChain and LangGraph. Equipped with a planning tool, a filesystem backend, and the ability to spawn subagents - well-equipped to handle complex agentic tasks.","deepagentsjs 是一款基于 LangChain 和 LangGraph 构建的 TypeScript 智能体框架，旨在帮助开发者轻松创建能够处理复杂任务的“深度智能体”。传统的智能体往往只能简单循环调用工具，面对长期或高难度任务时缺乏规划能力，显得过于“浅层”。deepagentsjs 通过整合四大核心组件解决了这一痛点：内置规划工具可将宏大目标拆解为可执行步骤；支持生成子智能体以分工协作处理专项任务；提供文件系统后端以实现持久化的状态记忆；并配合详细的提示词策略，使智能体具备更深层的思考与执行能力。\n\n该工具特别适合熟悉 JavaScript 或 TypeScript 的软件开发者和 AI 工程师，尤其是那些希望在自己的应用中复现类似\"Deep Research\"、\"Manus\"或\"Claude Code\"等高级自主代理功能的团队。其技术亮点在于完全采用 TypeScript 编写，提供完整的类型安全支持，同时原生集成了流式输出功能，方便实时追踪任务进度。作为开源项目，deepagentsjs 在保持架构灵活可扩展的同时，降低了构建高阶智能体的门槛，让复杂的自动化工作流开发","deepagentsjs 是一款基于 LangChain 和 LangGraph 构建的 TypeScript 智能体框架，旨在帮助开发者轻松创建能够处理复杂任务的“深度智能体”。传统的智能体往往只能简单循环调用工具，面对长期或高难度任务时缺乏规划能力，显得过于“浅层”。deepagentsjs 通过整合四大核心组件解决了这一痛点：内置规划工具可将宏大目标拆解为可执行步骤；支持生成子智能体以分工协作处理专项任务；提供文件系统后端以实现持久化的状态记忆；并配合详细的提示词策略，使智能体具备更深层的思考与执行能力。\n\n该工具特别适合熟悉 JavaScript 或 TypeScript 的软件开发者和 AI 工程师，尤其是那些希望在自己的应用中复现类似\"Deep Research\"、\"Manus\"或\"Claude Code\"等高级自主代理功能的团队。其技术亮点在于完全采用 TypeScript 编写，提供完整的类型安全支持，同时原生集成了流式输出功能，方便实时追踪任务进度。作为开源项目，deepagentsjs 在保持架构灵活可扩展的同时，降低了构建高阶智能体的门槛，让复杂的自动化工作流开发变得更加直观高效。","\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Fdeepagents\u002Foverview#deep-agents-overview\">\n    \u003Cpicture>\n      \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Frefs\u002Fheads\u002Fmain\u002F.github\u002Fimages\u002Flogo-light.svg\">\n      \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Frefs\u002Fheads\u002Fmain\u002F.github\u002Fimages\u002Flogo-dark.svg\">\n      \u003Cimg alt=\"Deep Agents Logo\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Frefs\u002Fheads\u002Fmain\u002F.github\u002Fimages\u002Flogo-dark.svg\" width=\"50%\">\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ch3>The batteries-included agent harness.\u003C\u002Fh3>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdeepagents\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fdeepagents.svg\" alt=\"npm version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg\" alt=\"License: MIT\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.typescriptlang.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.0+-blue.svg\" alt=\"TypeScript\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fx.com\u002FLangChain_JS\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl\u002Fhttps\u002Ftwitter.com\u002FLangChain_JS.svg?style=social&label=Follow%20%40LangChain_JS\" alt=\"Twitter \u002F X\">\u003C\u002Fa>\n\u003C\u002Fdiv>\n\nUsing 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.\n\nApplications like \"Deep Research\", \"Manus\", and \"Claude Code\" have gotten around this limitation by implementing a combination of four things:\na **planning tool**, **sub agents**, access to a **file system**, and a **detailed prompt**.\n\n`deepagents` is a TypeScript package that implements these in a general purpose way so that you can easily create a Deep Agent for your application.\n\n> 💡 **Tip:** Looking for the Python version of this package? See [langchain-ai\u002Fdeepagents](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagents)\n\n\u003Cdiv align=\"center\">\n\n[Documentation](https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fjavascript\u002Fdeepagents\u002Foverview) | [Examples](.\u002Fexamples) | [Report Bug](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fissues) | [Request Feature](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fissues)\n\n\u003C\u002Fdiv>\n\n## 📖 Overview\n\nUsing an LLM to call tools in a loop is the simplest form of an agent. However, this architecture can yield agents that are \"shallow\" and fail to plan and act over longer, more complex tasks.\n\nApplications like **Deep Research**, **Manus**, and **Claude Code** have overcome this limitation by implementing a combination of four key components:\n\n1. **Planning Tool** - Strategic task decomposition\n2. **Sub-Agents** - Specialized agents for subtasks\n3. **File System Access** - Persistent state and memory\n4. **Detailed Prompts** - Context-rich instructions\n\n**Deep Agents** is a TypeScript package that implements these patterns in a general-purpose way, enabling you to easily create sophisticated agents for your applications.\n\n## ✨ Features\n\n- 🎯 **Task Planning & Decomposition** - Break complex tasks into manageable steps\n- 🤖 **Sub-Agent Architecture** - Delegate specialized work to focused agents\n- 💾 **File System Integration** - Persistent memory and state management\n- 🌊 **Streaming Support** - Real-time updates, token streaming, and progress tracking\n- 🔄 **LangGraph Powered** - Built on the robust LangGraph framework\n- 📝 **TypeScript First** - Full type safety and IntelliSense support\n- 🔌 **Extensible** - Easy to customize and extend for your use case\n\n## Installation\n\n```bash\n# npm\nnpm install deepagents\n\n# yarn\nyarn add deepagents\n\n# pnpm\npnpm add deepagents\n```\n\n## Usage\n\n(To run the example below, you will need to `npm install @langchain\u002Ftavily`).\n\nMake sure to set `TAVILY_API_KEY` in your environment. You can generate one [here](https:\u002F\u002Fwww.tavily.com\u002F).\n\n```typescript\nimport { tool } from \"langchain\";\nimport { TavilySearch } from \"@langchain\u002Ftavily\";\nimport { createDeepAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\n\u002F\u002F Web search tool\nconst internetSearch = tool(\n  async ({\n    query,\n    maxResults = 5,\n    topic = \"general\",\n    includeRawContent = false,\n  }: {\n    query: string;\n    maxResults?: number;\n    topic?: \"general\" | \"news\" | \"finance\";\n    includeRawContent?: boolean;\n  }) => {\n    const tavilySearch = new TavilySearch({\n      maxResults,\n      tavilyApiKey: process.env.TAVILY_API_KEY,\n      includeRawContent,\n      topic,\n    });\n    return await tavilySearch._call({ query });\n  },\n  {\n    name: \"internet_search\",\n    description: \"Run a web search\",\n    schema: z.object({\n      query: z.string().describe(\"The search query\"),\n      maxResults: z\n        .number()\n        .optional()\n        .default(5)\n        .describe(\"Maximum number of results to return\"),\n      topic: z\n        .enum([\"general\", \"news\", \"finance\"])\n        .optional()\n        .default(\"general\")\n        .describe(\"Search topic category\"),\n      includeRawContent: z\n        .boolean()\n        .optional()\n        .default(false)\n        .describe(\"Whether to include raw content\"),\n    }),\n  },\n);\n\n\u002F\u002F System prompt to steer the agent to be an expert researcher\nconst researchInstructions = `You are an expert researcher. Your job is to conduct thorough research, and then write a polished report.\n\nYou have access to an internet search tool as your primary means of gathering information.\n\n> [!TIP]\n> For developing, debugging, and deploying AI agents and LLM applications, see [LangSmith](https:\u002F\u002Fdocs.langchain.com\u002Flangsmith\u002Fhome).\n\n## \\`internet_search\\`\n\nUse this to run an internet search for a given query. You can specify the max number of results to return, the topic, and whether raw content should be included.\n`;\n\n\u002F\u002F Create the deep agent\nconst agent = createDeepAgent({\n  tools: [internetSearch],\n  systemPrompt: researchInstructions,\n});\n\n\u002F\u002F Invoke the agent\nconst result = await agent.invoke({\n  messages: [{ role: \"user\", content: \"What is langgraph?\" }],\n});\n```\n\nSee [examples\u002Fresearch\u002Fresearch-agent.ts](examples\u002Fresearch\u002Fresearch-agent.ts) for a more complex example.\n\nThe agent created with `createDeepAgent` is just a LangGraph graph - so you can interact with it (streaming, human-in-the-loop, memory, studio)\nin the same way you would any LangGraph agent.\n\n## Core Capabilities\n\n**Planning & Task Decomposition**\n\nDeep Agents include a built-in `write_todos` tool that enables agents to break down complex tasks into discrete steps, track progress, and adapt plans as new information emerges.\n\n**Context Management**\n\nFile system tools (`ls`, `read_file`, `write_file`, `edit_file`, `glob`, `grep`) allow agents to offload large context to memory, preventing context window overflow and enabling work with variable-length tool results.\n\n**Subagent Spawning**\n\nA built-in `task` tool enables agents to spawn specialized subagents for context isolation. This keeps the main agent's context clean while still going deep on specific subtasks.\n\n**Long-term Memory**\n\nExtend agents with persistent memory across threads using LangGraph's Store. Agents can save and retrieve information from previous conversations.\n\n## Customizing Deep Agents\n\nThere are several parameters you can pass to `createDeepAgent` to create your own custom deep agent.\n\n### `model`\n\nBy default, `deepagents` uses `\"claude-sonnet-4-5-20250929\"`. You can customize this by passing any [LangChain model object](https:\u002F\u002Fjs.langchain.com\u002Fdocs\u002Fintegrations\u002Fchat\u002F).\n\n```typescript\nimport { ChatAnthropic } from \"@langchain\u002Fanthropic\";\nimport { ChatOpenAI } from \"@langchain\u002Fopenai\";\nimport { createDeepAgent } from \"deepagents\";\n\n\u002F\u002F Using Anthropic\nconst agent = createDeepAgent({\n  model: new ChatAnthropic({\n    model: \"claude-sonnet-4-20250514\",\n    temperature: 0,\n  }),\n});\n\n\u002F\u002F Using OpenAI\nconst agent2 = createDeepAgent({\n  model: new ChatOpenAI({\n    model: \"gpt-5\",\n    temperature: 0,\n  }),\n});\n```\n\n### `systemPrompt`\n\nDeep Agents come with a built-in system prompt. This is relatively detailed prompt that is heavily based on and inspired by [attempts](https:\u002F\u002Fgithub.com\u002Fkn1026\u002Fcc\u002Fblob\u002Fmain\u002Fclaudecode.md) to [replicate](https:\u002F\u002Fgithub.com\u002Fasgeirtj\u002Fsystem_prompts_leaks\u002Fblob\u002Fmain\u002FAnthropic\u002Fclaude-code.md)\nClaude Code's system prompt. It was made more general purpose than Claude Code's system prompt. The default prompt contains detailed instructions for how to use the built-in planning tool, file system tools, and sub agents.\n\nEach deep agent tailored to a use case should include a custom system prompt specific to that use case as well. The importance of prompting for creating a successful deep agent cannot be overstated.\n\n```typescript\nimport { createDeepAgent } from \"deepagents\";\n\nconst researchInstructions = `You are an expert researcher. Your job is to conduct thorough research, and then write a polished report.`;\n\nconst agent = createDeepAgent({\n  systemPrompt: researchInstructions,\n});\n```\n\n### `tools`\n\nJust like with tool-calling agents, you can provide a deep agent with a set of tools that it has access to.\n\n```typescript\nimport { tool } from \"langchain\";\nimport { TavilySearch } from \"@langchain\u002Ftavily\";\nimport { createDeepAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\nconst internetSearch = tool(\n  async ({\n    query,\n    maxResults = 5,\n    topic = \"general\",\n    includeRawContent = false,\n  }: {\n    query: string;\n    maxResults?: number;\n    topic?: \"general\" | \"news\" | \"finance\";\n    includeRawContent?: boolean;\n  }) => {\n    const tavilySearch = new TavilySearch({\n      maxResults,\n      tavilyApiKey: process.env.TAVILY_API_KEY,\n      includeRawContent,\n      topic,\n    });\n    return await tavilySearch._call({ query });\n  },\n  {\n    name: \"internet_search\",\n    description: \"Run a web search\",\n    schema: z.object({\n      query: z.string().describe(\"The search query\"),\n      maxResults: z.number().optional().default(5),\n      topic: z\n        .enum([\"general\", \"news\", \"finance\"])\n        .optional()\n        .default(\"general\"),\n      includeRawContent: z.boolean().optional().default(false),\n    }),\n  },\n);\n\nconst agent = createDeepAgent({\n  tools: [internetSearch],\n});\n```\n\n### `middleware`\n\n`createDeepAgent` is implemented with middleware that can be customized. You can provide additional middleware to extend functionality, add tools, or implement custom hooks.\n\n```typescript\nimport { tool } from \"langchain\";\nimport { createDeepAgent } from \"deepagents\";\nimport type { AgentMiddleware } from \"langchain\";\nimport { z } from \"zod\";\n\nconst getWeather = tool(\n  async ({ city }: { city: string }) => {\n    return `The weather in ${city} is sunny.`;\n  },\n  {\n    name: \"get_weather\",\n    description: \"Get the weather in a city.\",\n    schema: z.object({\n      city: z.string().describe(\"The city to get weather for\"),\n    }),\n  },\n);\n\nconst getTemperature = tool(\n  async ({ city }: { city: string }) => {\n    return `The temperature in ${city} is 70 degrees Fahrenheit.`;\n  },\n  {\n    name: \"get_temperature\",\n    description: \"Get the temperature in a city.\",\n    schema: z.object({\n      city: z.string().describe(\"The city to get temperature for\"),\n    }),\n  },\n);\n\nclass WeatherMiddleware implements AgentMiddleware {\n  tools = [getWeather, getTemperature];\n}\n\nconst agent = createDeepAgent({\n  model: \"claude-sonnet-4-20250514\",\n  middleware: [new WeatherMiddleware()],\n});\n```\n\n### `subagents`\n\nA main feature of Deep Agents is their ability to spawn subagents. You can specify custom subagents that your agent can hand off work to in the subagents parameter. Sub agents are useful for context quarantine (to help not pollute the overall context of the main agent) as well as custom instructions.\n\n`subagents` should be a list of objects that follow the `SubAgent` interface:\n\n```typescript\ninterface SubAgent {\n  name: string;\n  description: string;\n  systemPrompt: string;\n  tools?: StructuredTool[];\n  model?: LanguageModelLike | string;\n  middleware?: AgentMiddleware[];\n  interruptOn?: Record\u003Cstring, boolean | InterruptOnConfig>;\n  skills?: string[];\n}\n```\n\n**SubAgent fields:**\n\n- **name**: This is the name of the subagent, and how the main agent will call the subagent\n- **description**: This is the description of the subagent that is shown to the main agent\n- **systemPrompt**: This is the prompt used for the subagent\n- **tools**: This is the list of tools that the subagent has access to.\n- **model**: Optional model name or model instance.\n- **middleware**: Additional middleware to attach to the subagent. See [here](https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Ftypescript\u002Flangchain\u002Fmiddleware) for an introduction into middleware and how it works with createAgent.\n- **interruptOn**: A custom interrupt config that specifies human-in-the-loop interactions for your tools.\n- **skills**: Skill source paths for the subagent (e.g., `[\"\u002Fskills\u002Fresearch\u002F\"]`). See skills inheritance below.\n\n#### Skills Inheritance\n\nWhen you configure `skills` on the main agent via `createDeepAgent`, the behavior differs between subagent types:\n\n- **General-purpose subagent**: Automatically inherits skills from the main agent. This subagent has access to all the same skills as the main agent.\n- **Custom subagents**: Do NOT inherit skills from the main agent by default. If you want a custom subagent to have access to skills, you must explicitly define the `skills` property on that subagent.\n\n```typescript\nconst agent = createDeepAgent({\n  model: \"claude-sonnet-4-20250514\",\n  skills: [\"\u002Fskills\u002F\"], \u002F\u002F Main agent and general-purpose subagent get these skills\n  subagents: [\n    {\n      name: \"researcher\",\n      description: \"Research assistant\",\n      systemPrompt: \"You are a researcher.\",\n      \u002F\u002F This subagent will NOT have access to \u002Fskills\u002F from the main agent\n    },\n    {\n      name: \"coder\",\n      description: \"Coding assistant\",\n      systemPrompt: \"You are a coder.\",\n      skills: [\"\u002Fskills\u002Fcoding\u002F\"], \u002F\u002F This subagent has its own skills\n    },\n  ],\n});\n```\n\nThis design ensures context isolation - custom subagents only have access to the skills they explicitly need, preventing unintended skill leakage between specialized agents.\n\n#### Using SubAgent\n\n```typescript\nimport { tool } from \"langchain\";\nimport { TavilySearch } from \"@langchain\u002Ftavily\";\nimport { createDeepAgent, type SubAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\nconst internetSearch = tool(\n  async ({\n    query,\n    maxResults = 5,\n    topic = \"general\",\n    includeRawContent = false,\n  }: {\n    query: string;\n    maxResults?: number;\n    topic?: \"general\" | \"news\" | \"finance\";\n    includeRawContent?: boolean;\n  }) => {\n    const tavilySearch = new TavilySearch({\n      maxResults,\n      tavilyApiKey: process.env.TAVILY_API_KEY,\n      includeRawContent,\n      topic,\n    });\n    return await tavilySearch._call({ query });\n  },\n  {\n    name: \"internet_search\",\n    description: \"Run a web search\",\n    schema: z.object({\n      query: z.string(),\n      maxResults: z.number().optional().default(5),\n      topic: z\n        .enum([\"general\", \"news\", \"finance\"])\n        .optional()\n        .default(\"general\"),\n      includeRawContent: z.boolean().optional().default(false),\n    }),\n  },\n);\n\nconst researchSubagent: SubAgent = {\n  name: \"research-agent\",\n  description: \"Used to research more in depth questions\",\n  systemPrompt: \"You are a great researcher\",\n  tools: [internetSearch],\n  model: \"gpt-4o\", \u002F\u002F Optional override, defaults to main agent model\n};\n\nconst subagents = [researchSubagent];\n\nconst agent = createDeepAgent({\n  model: \"claude-sonnet-4-20250514\",\n  subagents: subagents,\n});\n```\n\n### `interruptOn`\n\nA common reality for agents is that some tool operations may be sensitive and require human approval before execution. Deep Agents supports human-in-the-loop workflows through LangGraph's interrupt capabilities. You can configure which tools require approval using a checkpointer.\n\nThese tool configs are passed to our prebuilt [HITL middleware](https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Ftypescript\u002Flangchain\u002Fmiddleware#human-in-the-loop) so that the agent pauses execution and waits for feedback from the user before executing configured tools.\n\n```typescript\nimport { tool } from \"langchain\";\nimport { createDeepAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\nconst getWeather = tool(\n  async ({ city }: { city: string }) => {\n    return `The weather in ${city} is sunny.`;\n  },\n  {\n    name: \"get_weather\",\n    description: \"Get the weather in a city.\",\n    schema: z.object({\n      city: z.string(),\n    }),\n  },\n);\n\nconst agent = createDeepAgent({\n  model: \"claude-sonnet-4-20250514\",\n  tools: [getWeather],\n  interruptOn: {\n    get_weather: {\n      allowedDecisions: [\"approve\", \"edit\", \"reject\"],\n    },\n  },\n});\n```\n\n### `backend`\n\nDeep Agents use backends to manage file system operations and memory storage. You can configure different backends depending on your needs:\n\n```typescript\nimport {\n  createDeepAgent,\n  StateBackend,\n  StoreBackend,\n  FilesystemBackend,\n  LocalShellBackend,\n  CompositeBackend,\n} from \"deepagents\";\nimport { MemorySaver } from \"@langchain\u002Flanggraph\";\nimport { InMemoryStore } from \"@langchain\u002Flanggraph-checkpoint\";\n\n\u002F\u002F Default: StateBackend (in-memory, ephemeral)\nconst agent1 = createDeepAgent({\n  \u002F\u002F No backend specified - uses StateBackend by default\n});\n\n\u002F\u002F StoreBackend: Persistent storage using LangGraph Store\nconst agent2 = createDeepAgent({\n  backend: (config) => new StoreBackend(config),\n  store: new InMemoryStore(), \u002F\u002F Provide a store\n  checkpointer: new MemorySaver(), \u002F\u002F Optional: for conversation persistence\n});\n\n\u002F\u002F FilesystemBackend: Store files on actual filesystem\nconst agent3 = createDeepAgent({\n  backend: (config) => new FilesystemBackend({ rootDir: \".\u002Fagent-workspace\" }),\n});\n\n\u002F\u002F LocalShellBackend: Filesystem access + local shell command execution\nconst agent4 = createDeepAgent({\n  backend: new LocalShellBackend({\n    rootDir: \".\u002Fagent-workspace\",\n    inheritEnv: true,\n  }),\n});\n\n\u002F\u002F CompositeBackend: Combine multiple backends\nconst agent5 = createDeepAgent({\n  backend: (config) =>\n    new CompositeBackend({\n      state: new StateBackend(config),\n      store: config.store ? new StoreBackend(config) : undefined,\n    }),\n  store: new InMemoryStore(),\n  checkpointer: new MemorySaver(),\n});\n```\n\nSee [examples\u002Fbackends\u002F](examples\u002Fbackends\u002F) for detailed examples of each backend type.\n\n### Sandbox Execution\n\nFor agents that need to run shell commands, you can create a sandbox backend by extending `BaseSandbox`. This enables the `execute` tool which allows agents to run arbitrary shell commands in an isolated environment.\n\n```typescript\nimport {\n  createDeepAgent,\n  BaseSandbox,\n  type ExecuteResponse,\n  type FileUploadResponse,\n  type FileDownloadResponse,\n} from \"deepagents\";\nimport { spawn } from \"child_process\";\n\n\u002F\u002F Create a concrete sandbox by extending BaseSandbox\nclass LocalShellSandbox extends BaseSandbox {\n  readonly id = \"local-shell\";\n  private readonly workingDirectory: string;\n\n  constructor(workingDirectory: string) {\n    super();\n    this.workingDirectory = workingDirectory;\n  }\n\n  \u002F\u002F Only execute() is required - BaseSandbox implements all file operations\n  async execute(command: string): Promise\u003CExecuteResponse> {\n    return new Promise((resolve) => {\n      const child = spawn(\"\u002Fbin\u002Fbash\", [\"-c\", command], {\n        cwd: this.workingDirectory,\n      });\n\n      const chunks: string[] = [];\n      child.stdout.on(\"data\", (data) => chunks.push(data.toString()));\n      child.stderr.on(\"data\", (data) => chunks.push(data.toString()));\n\n      child.on(\"close\", (exitCode) => {\n        resolve({\n          output: chunks.join(\"\"),\n          exitCode,\n          truncated: false,\n        });\n      });\n    });\n  }\n\n  async uploadFiles(\n    files: Array\u003C[string, Uint8Array]>,\n  ): Promise\u003CFileUploadResponse[]> {\n    \u002F\u002F Implement file upload logic\n    return files.map(([path]) => ({ path, error: null }));\n  }\n\n  async downloadFiles(paths: string[]): Promise\u003CFileDownloadResponse[]> {\n    \u002F\u002F Implement file download logic\n    return paths.map((path) => ({\n      path,\n      content: null,\n      error: \"file_not_found\",\n    }));\n  }\n}\n\n\u002F\u002F Use the sandbox with your agent\nconst sandbox = new LocalShellSandbox(\".\u002Fworkspace\");\n\nconst agent = createDeepAgent({\n  backend: sandbox,\n  systemPrompt: \"You can run shell commands using the execute tool.\",\n});\n```\n\nWhen using a sandbox backend, the agent gains access to an `execute` tool that can run shell commands. The tool automatically returns the command output, exit code, and whether the output was truncated.\n\nSee [examples\u002Fsandbox\u002Flocal-sandbox.ts](examples\u002Fsandbox\u002Flocal-sandbox.ts) for a complete implementation.\n\n## Deep Agents Middleware\n\nDeep Agents are built with a modular middleware architecture. As a reminder, Deep Agents have access to:\n\n- A planning tool\n- A filesystem for storing context and long-term memories\n- The ability to spawn subagents\n\nEach of these features is implemented as separate middleware. When you create a deep agent with `createDeepAgent`, we automatically attach **todoListMiddleware**, **FilesystemMiddleware** and **SubAgentMiddleware** to your agent.\n\nMiddleware is a composable concept, and you can choose to add as many or as few middleware to an agent depending on your use case. That means that you can also use any of the aforementioned middleware independently!\n\n### TodoListMiddleware\n\nPlanning is integral to solving complex problems. If you've used claude code recently, you'll notice how it writes out a To-Do list before tackling complex, multi-part tasks. You'll also notice how it can adapt and update this To-Do list on the fly as more information comes in.\n\n**todoListMiddleware** provides your agent with a tool specifically for updating this To-Do list. Before, and while it executes a multi-part task, the agent is prompted to use the write_todos tool to keep track of what its doing, and what still needs to be done.\n\n```typescript\nimport { createAgent, todoListMiddleware } from \"langchain\";\n\n\u002F\u002F todoListMiddleware is included by default in createDeepAgent\n\u002F\u002F You can customize it if building a custom agent\nconst agent = createAgent({\n  model: \"claude-sonnet-4-20250514\",\n  middleware: [\n    todoListMiddleware({\n      \u002F\u002F Optional: Custom addition to the system prompt\n      systemPrompt: \"Use the write_todos tool to...\",\n    }),\n  ],\n});\n```\n\n### FilesystemMiddleware\n\nContext engineering is one of the main challenges in building effective agents. This can be particularly hard when using tools that can return variable length results (ex. web_search, rag), as long ToolResults can quickly fill up your context window.\n\n**FilesystemMiddleware** provides tools to your agent to interact with both short-term and long-term memory:\n\n- **ls**: List the files in your filesystem\n- **read_file**: Read an entire file, or a certain number of lines from a file\n- **write_file**: Write a new file to your filesystem\n- **edit_file**: Edit an existing file in your filesystem\n- **glob**: Find files matching a pattern\n- **grep**: Search for text within files\n- **execute**: Run shell commands (only available when using a `SandboxBackendProtocol`)\n\n```typescript\nimport { createAgent } from \"langchain\";\nimport { createFilesystemMiddleware } from \"deepagents\";\n\n\u002F\u002F FilesystemMiddleware is included by default in createDeepAgent\n\u002F\u002F You can customize it if building a custom agent\nconst agent = createAgent({\n  model: \"claude-sonnet-4-20250514\",\n  middleware: [\n    createFilesystemMiddleware({\n      backend: ..., \u002F\u002F Optional: customize storage backend\n      systemPrompt: \"Write to the filesystem when...\", \u002F\u002F Optional custom system prompt override\n      customToolDescriptions: {\n        ls: \"Use the ls tool when...\",\n        read_file: \"Use the read_file tool to...\",\n      }, \u002F\u002F Optional: Custom descriptions for filesystem tools\n    }),\n  ],\n});\n```\n\n### SubAgentMiddleware\n\nHanding off tasks to subagents is a great way to isolate context, keeping the context window of the main (supervisor) agent clean while still going deep on a task. The subagents middleware allows you supply subagents through a task tool.\n\nA subagent is defined with a name, description, system prompt, and tools. You can also provide a subagent with a custom model, or with additional middleware. This can be particularly useful when you want to give the subagent an additional state key to share with the main agent.\n\n```typescript\nimport { tool } from \"langchain\";\nimport { createAgent } from \"langchain\";\nimport { createSubAgentMiddleware, type SubAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\nconst getWeather = tool(\n  async ({ city }: { city: string }) => {\n    return `The weather in ${city} is sunny.`;\n  },\n  {\n    name: \"get_weather\",\n    description: \"Get the weather in a city.\",\n    schema: z.object({\n      city: z.string(),\n    }),\n  },\n);\n\nconst weatherSubagent: SubAgent = {\n  name: \"weather\",\n  description: \"This subagent can get weather in cities.\",\n  systemPrompt: \"Use the get_weather tool to get the weather in a city.\",\n  tools: [getWeather],\n  model: \"gpt-4o\",\n  middleware: [],\n};\n\nconst agent = createAgent({\n  model: \"claude-sonnet-4-20250514\",\n  middleware: [\n    createSubAgentMiddleware({\n      defaultModel: \"claude-sonnet-4-20250514\",\n      defaultTools: [],\n      subagents: [weatherSubagent],\n    }),\n  ],\n});\n```\n\n## ACP (Agent Client Protocol) Support\n\nDeep Agents can be exposed as an [Agent Client Protocol](https:\u002F\u002Fagentclientprotocol.com) server, enabling integration with IDEs like [Zed](https:\u002F\u002Fzed.dev), JetBrains, and other ACP-compatible clients through a standardized JSON-RPC 2.0 protocol over stdio.\n\nThe `deepagents-acp` package wraps your Deep Agent with ACP support:\n\n```bash\nnpm install deepagents-acp\n```\n\nThe quickest way to get started is via the CLI:\n\n```bash\nnpx deepagents-acp --name my-agent --workspace \u002Fpath\u002Fto\u002Fproject\n```\n\nOr programmatically:\n\n```typescript\nimport { startServer } from \"deepagents-acp\";\n\nawait startServer({\n  agents: {\n    name: \"coding-assistant\",\n    description: \"AI coding assistant with filesystem access\",\n    skills: [\".\u002Fskills\u002F\"],\n  },\n  workspaceRoot: process.cwd(),\n});\n```\n\nTo use with Zed, add the following to your Zed settings:\n\n```json\n{\n  \"agent\": {\n    \"profiles\": {\n      \"deepagents\": {\n        \"name\": \"DeepAgents\",\n        \"command\": \"npx\",\n        \"args\": [\"deepagents-acp\"]\n      }\n    }\n  }\n}\n```\n\nSee the [deepagents-acp README](libs\u002Facp\u002FREADME.md) and the [ACP server example](examples\u002Facp-server\u002F) for full documentation and advanced configuration.\n","\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fpython\u002Fdeepagents\u002Foverview#deep-agents-overview\">\n    \u003Cpicture>\n      \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Frefs\u002Fheads\u002Fmain\u002F.github\u002Fimages\u002Flogo-light.svg\">\n      \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fraw.githubusercontent.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Frefs\u002Fheads\u002Fmain\u002F.github\u002Fimages\u002Flogo-dark.svg\">\n      \u003Cimg alt=\"Deep Agents Logo\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Frefs\u002Fheads\u002Fmain\u002F.github\u002Fimages\u002Flogo-dark.svg\" width=\"50%\">\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ch3>开箱即用的智能体框架。\u003C\u002Fh3>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdeepagents\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fdeepagents.svg\" alt=\"npm版本\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg\" alt=\"许可证：MIT\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.typescriptlang.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5.0+-blue.svg\" alt=\"TypeScript\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fx.com\u002FLangChain_JS\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Furl\u002Fhttps\u002Ftwitter.com\u002FLangChain_JS.svg?style=social&label=关注%20@LangChain_JS\" alt=\"Twitter \u002F X\">\u003C\u002Fa>\n\u003C\u002Fdiv>\n\n使用大语言模型循环调用工具是最简单的智能体形式。然而，这种架构生成的智能体往往较为“浅层”，难以在较长且复杂的任务中进行规划和执行。\n\n像“Deep Research”、“Manus”和“Claude Code”这样的应用，通过结合以下四点来克服这一局限性：\n**规划工具**、**子智能体**、对**文件系统**的访问权限，以及**详尽的提示词**。\n\n`deepagents` 是一个 TypeScript 库，以通用的方式实现了这些功能，使您能够轻松为自己的应用创建深度智能体。\n\n> 💡 **提示:** 想要该库的 Python 版本吗？请查看 [langchain-ai\u002Fdeepagents](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagents)。\n\n\u003Cdiv align=\"center\">\n\n[文档](https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Fjavascript\u002Fdeepagents\u002Foverview) | [示例](.\u002Fexamples) | [报告问题](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fissues) | [请求功能](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fissues)\n\n\u003C\u002Fdiv>\n\n## 📖 概述\n\n使用大语言模型循环调用工具是最简单的智能体形式。然而，这种架构生成的智能体往往较为“浅层”，难以在较长且复杂的任务中进行规划和执行。\n\n像 **Deep Research**、**Manus** 和 **Claude Code** 这样的应用，通过实现四个关键组件克服了这一局限性：\n\n1. **规划工具** - 战略性地分解任务\n2. **子智能体** - 专门处理子任务的智能体\n3. **文件系统访问** - 持久化状态与记忆\n4. **详尽的提示词** - 上下文丰富的指令\n\n**Deep Agents** 是一个 TypeScript 库，以通用方式实现了这些模式，让您能够轻松为自己的应用创建复杂的智能体。\n\n## ✨ 特性\n\n- 🎯 **任务规划与分解** - 将复杂任务拆解为可管理的步骤\n- 🤖 **子智能体架构** - 将专业工作委派给专注的智能体\n- 💾 **文件系统集成** - 持久化内存与状态管理\n- 🌊 **流式支持** - 实时更新、令牌流传输和进度跟踪\n- 🔄 **基于 LangGraph** - 构建于强大的 LangGraph 框架之上\n- 📝 **TypeScript 优先** - 完整的类型安全与 IntelliSense 支持\n- 🔌 **可扩展** - 易于根据您的用例进行自定义和扩展\n\n## 安装\n\n```bash\n# npm\nnpm install deepagents\n\n# yarn\nyarn add deepagents\n\n# pnpm\npnpm add deepagents\n```\n\n## 使用\n\n（要运行下面的示例，您需要 `npm install @langchain\u002Ftavily`）。\n\n请确保在您的环境变量中设置 `TAVILY_API_KEY`。您可以在 [这里](https:\u002F\u002Fwww.tavily.com\u002F) 生成一个。\n\n```typescript\nimport { tool } from \"langchain\";\nimport { TavilySearch } from \"@langchain\u002Ftavily\";\nimport { createDeepAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\n\u002F\u002F 网络搜索工具\nconst internetSearch = tool(\n  async ({\n    query,\n    maxResults = 5,\n    topic = \"general\",\n    includeRawContent = false,\n  }: {\n    query: string;\n    maxResults?: number;\n    topic?: \"general\" | \"news\" | \"finance\";\n    includeRawContent?: boolean;\n  }) => {\n    const tavilySearch = new TavilySearch({\n      maxResults,\n      tavilyApiKey: process.env.TAVILY_API_KEY,\n      includeRawContent,\n      topic,\n    });\n    return await tavilySearch._call({ query });\n  },\n  {\n    name: \"internet_search\",\n    description: \"执行网络搜索\",\n    schema: z.object({\n      query: z.string().describe(\"搜索查询\"),\n      maxResults: z\n        .number()\n        .optional()\n        .default(5)\n        .describe(\"返回的最大结果数\"),\n      topic: z\n        .enum([\"general\", \"news\", \"finance\"])\n        .optional()\n        .default(\"general\")\n        .describe(\"搜索的主题类别\"),\n      includeRawContent: z\n        .boolean()\n        .optional()\n        .default(false)\n        .describe(\"是否包含原始内容\"),\n    }),\n  },\n);\n\n\u002F\u002F 引导智能体成为专家研究员的系统提示\nconst researchInstructions = `你是一位专家级研究员。你的任务是进行深入研究，并撰写一份精炼的报告。\n\n你可以使用网络搜索工具作为主要的信息收集手段。\n\n> [!提示]\n> 如需开发、调试和部署 AI 智能体及 LLM 应用程序，请参阅 [LangSmith](https:\u002F\u002Fdocs.langchain.com\u002Flangsmith\u002Fhome)。\n\n## \\`internet_search\\`\n\n用于针对特定查询执行网络搜索。你可以指定返回的最大结果数量、主题，以及是否包含原始内容。\n`;\n\n\u002F\u002F 创建深度智能体\nconst agent = createDeepAgent({\n  tools: [internetSearch],\n  systemPrompt: researchInstructions,\n});\n\n\u002F\u002F 调用智能体\nconst result = await agent.invoke({\n  messages: [{ role: \"user\", content: \"什么是 langgraph?\" }],\n});\n```\n\n更多复杂示例请参见 [examples\u002Fresearch\u002Fresearch-agent.ts](examples\u002Fresearch\u002Fresearch-agent.ts)。\n\n使用 `createDeepAgent` 创建的智能体本质上就是一个 LangGraph 图——因此您可以像操作任何 LangGraph 智能体一样与之交互（流式传输、人机协作、记忆管理、Studio）。\n\n## 核心能力\n\n**规划与任务分解**\n\nDeep Agents 内置了一个 `write_todos` 工具，使智能体能够将复杂任务分解为离散的步骤，跟踪进度，并在新信息出现时调整计划。\n\n**上下文管理**\n\n文件系统工具（`ls`、`read_file`、`write_file`、`edit_file`、`glob`、`grep`）允许智能体将大量上下文卸载到存储中，防止上下文窗口溢出，并支持处理可变长度的工具输出。\n\n**子智能体生成**\n\n内置的 `task` 工具使智能体能够生成专门的子智能体以实现上下文隔离。这有助于保持主智能体的上下文简洁，同时深入处理特定的子任务。\n\n**长期记忆**\n\n通过 LangGraph 的 Store，可以为智能体扩展跨线程的持久化内存。智能体能够保存和检索之前的对话信息。\n\n## 自定义 Deep Agents\n\n您可以向 `createDeepAgent` 传递多个参数来创建您自己的自定义深度智能体。\n\n### `model`\n\n默认情况下，`deepagents` 使用 `\"claude-sonnet-4-5-20250929\"`。您可以通过传递任何 [LangChain 模型对象](https:\u002F\u002Fjs.langchain.com\u002Fdocs\u002Fintegrations\u002Fchat\u002F) 来自定义此设置。\n\n```typescript\nimport { ChatAnthropic } from \"@langchain\u002Fanthropic\";\nimport { ChatOpenAI } from \"@langchain\u002Fopenai\";\nimport { createDeepAgent } from \"deepagents\";\n\n\u002F\u002F 使用 Anthropic\nconst agent = createDeepAgent({\n  model: new ChatAnthropic({\n    model: \"claude-sonnet-4-20250514\",\n    temperature: 0,\n  }),\n});\n\n\u002F\u002F 使用 OpenAI\nconst agent2 = createDeepAgent({\n  model: new ChatOpenAI({\n    model: \"gpt-5\",\n    temperature: 0,\n  }),\n});\n```\n\n### `systemPrompt`\n\nDeep Agents 配备了内置的系统提示词。这是一个相对详细的提示词，其设计深受 [尝试](https:\u002F\u002Fgithub.com\u002Fkn1026\u002Fcc\u002Fblob\u002Fmain\u002Fclaudecode.md) 和 [复现](https:\u002F\u002Fgithub.com\u002Fasgeirtj\u002Fsystem_prompts_leaks\u002Fblob\u002Fmain\u002FAnthropic\u002Fclaude-code.md) Claude Code 系统提示词的影响。相比 Claude Code 的系统提示词，它更具通用性。默认提示词包含了关于如何使用内置规划工具、文件系统工具和子智能体的详细说明。\n\n针对特定用例定制的每个深度智能体都应包含与其用例相关的自定义系统提示词。提示词在构建成功的深度智能体中的重要性怎么强调都不为过。\n\n```typescript\nimport { createDeepAgent } from \"deepagents\";\n\nconst researchInstructions = `你是一位专家级研究员。你的工作是进行彻底的研究，然后撰写一份精炼的报告。`;\n\nconst agent = createDeepAgent({\n  systemPrompt: researchInstructions,\n});\n```\n\n### `tools`\n\n与调用工具的智能体一样，您也可以为深度智能体提供一组它可以访问的工具。\n\n```typescript\nimport { tool } from \"langchain\";\nimport { TavilySearch } from \"@langchain\u002Ftavily\";\nimport { createDeepAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\nconst internetSearch = tool(\n  async ({\n    query,\n    maxResults = 5,\n    topic = \"general\",\n    includeRawContent = false,\n  }: {\n    query: string;\n    maxResults?: number;\n    topic?: \"general\" | \"news\" | \"finance\";\n    includeRawContent?: boolean;\n  }) => {\n    const tavilySearch = new TavilySearch({\n      maxResults,\n      tavilyApiKey: process.env.TAVILY_API_KEY,\n      includeRawContent,\n      topic,\n    });\n    return await tavilySearch._call({ query });\n  },\n  {\n    name: \"internet_search\",\n    description: \"执行网络搜索\",\n    schema: z.object({\n      query: z.string().describe(\"搜索查询\"),\n      maxResults: z.number().optional().default(5),\n      topic: z\n        .enum([\"general\", \"news\", \"finance\"])\n        .optional()\n        .default(\"general\"),\n      includeRawContent: z.boolean().optional().default(false),\n    }),\n  },\n);\n\nconst agent = createDeepAgent({\n  tools: [internetSearch],\n});\n```\n\n### `middleware`\n\n`createDeepAgent` 是基于中间件实现的，这些中间件可以被自定义。您可以提供额外的中间件来扩展功能、添加工具或实现自定义钩子。\n\n```typescript\nimport { tool } from \"langchain\";\nimport { createDeepAgent } from \"deepagents\";\nimport type { AgentMiddleware } from \"langchain\";\nimport { z } from \"zod\";\n\nconst getWeather = tool(\n  async ({ city }: { city: string }) => {\n    return `${city} 的天气是晴朗的。`;\n  },\n  {\n    name: \"get_weather\",\n    description: \"获取某个城市的天气。\",\n    schema: z.object({\n      city: z.string().describe(\"要查询天气的城市\"),\n    }),\n  },\n);\n\nconst getTemperature = tool(\n  async ({ city }: { city: string }) => {\n    return `在 ${city}，气温为 70 华氏度。`;\n  },\n  {\n    name: \"get_temperature\",\n    description: \"获取某个城市的气温。\",\n    schema: z.object({\n      city: z.string().describe(\"要查询气温的城市\"),\n    }),\n  },\n);\n\nclass WeatherMiddleware implements AgentMiddleware {\n  tools = [getWeather, getTemperature];\n}\n\nconst agent = createDeepAgent({\n  model: \"claude-sonnet-4-20250514\",\n  middleware: [new WeatherMiddleware()],\n});\n```\n\n### `subagents`\n\nDeep Agents 的一项主要特性是能够生成子代理。您可以在 `subagents` 参数中指定自定义子代理，以便您的主代理可以将任务转交给它们。子代理对于上下文隔离（有助于避免污染主代理的整体上下文）以及自定义指令非常有用。\n\n`subagents` 应该是一个遵循 `SubAgent` 接口的对象列表：\n\n```typescript\ninterface SubAgent {\n  name: string;\n  description: string;\n  systemPrompt: string;\n  tools?: StructuredTool[];\n  model?: LanguageModelLike | string;\n  middleware?: AgentMiddleware[];\n  interruptOn?: Record\u003Cstring, boolean | InterruptOnConfig>;\n  skills?: string[];\n}\n```\n\n**SubAgent 字段：**\n\n- **name**：这是子代理的名称，也是主代理调用该子代理时使用的名称。\n- **description**：这是显示给主代理的子代理描述。\n- **systemPrompt**：这是用于子代理的提示词。\n- **tools**：这是子代理可访问的工具列表。\n- **model**：可选的模型名称或模型实例。\n- **middleware**：附加到子代理的额外中间件。有关中间件及其与 `createAgent` 配合使用方式的介绍，请参阅 [此处](https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Ftypescript\u002Flangchain\u002Fmiddleware)。\n- **interruptOn**：一个自定义中断配置，用于指定针对您工具的人工介入交互。\n- **skills**：子代理的技能来源路径（例如，`[\"\u002Fskills\u002Fresearch\u002F\"]`）。请参阅下面的技能继承部分。\n\n#### 技能继承\n\n当您通过 `createDeepAgent` 在主代理上配置 `skills` 时，不同类型的子代理行为会有所不同：\n\n- **通用型子代理**：会自动继承主代理的技能。此子代理可以访问与主代理完全相同的技能。\n- **自定义子代理**：默认情况下不会继承主代理的技能。如果您希望自定义子代理也能访问技能，则必须显式地为该子代理定义 `skills` 属性。\n\n```typescript\nconst agent = createDeepAgent({\n  model: \"claude-sonnet-4-20250514\",\n  skills: [\"\u002Fskills\u002F\"], \u002F\u002F 主代理和通用型子代理都会获得这些技能\n  subagents: [\n    {\n      name: \"researcher\",\n      description: \"研究助理\",\n      systemPrompt: \"你是一名研究人员。\",\n      \u002F\u002F 此子代理将无法从主代理继承 \u002Fskills\u002F\n    },\n    {\n      name: \"coder\",\n      description: \"编码助手\",\n      systemPrompt: \"你是一名编码员。\",\n      skills: [\"\u002Fskills\u002Fcoding\u002F\"], \u002F\u002F 该子代理拥有自己的技能\n    },\n  ],\n});\n```\n\n这种设计确保了上下文隔离——自定义子代理仅能访问其明确需要的技能，从而防止技能在不同专业代理之间意外泄露。\n\n#### 使用 SubAgent\n\n```typescript\nimport { tool } from \"langchain\";\nimport { TavilySearch } from \"@langchain\u002Ftavily\";\nimport { createDeepAgent, type SubAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\nconst internetSearch = tool(\n  async ({\n    query,\n    maxResults = 5,\n    topic = \"general\",\n    includeRawContent = false,\n  }: {\n    query: string;\n    maxResults?: number;\n    topic?: \"general\" | \"news\" | \"finance\";\n    includeRawContent?: boolean;\n  }) => {\n    const tavilySearch = new TavilySearch({\n      maxResults,\n      tavilyApiKey: process.env.TAVILY_API_KEY,\n      includeRawContent,\n      topic,\n    });\n    return await tavilySearch._call({ query });\n  },\n  {\n    name: \"internet_search\",\n    description: \"执行网络搜索\",\n    schema: z.object({\n      query: z.string(),\n      maxResults: z.number().optional().default(5),\n      topic: z\n        .enum([\"general\", \"news\", \"finance\"])\n        .optional()\n        .default(\"general\"),\n      includeRawContent: z.boolean().optional().default(false),\n    }),\n  },\n);\n\nconst researchSubagent: SubAgent = {\n  name: \"research-agent\",\n  description: \"用于深入研究问题\",\n  systemPrompt: \"你是一位出色的研究人员\",\n  tools: [internetSearch],\n  model: \"gpt-4o\", \u002F\u002F 可选覆盖，默认为主代理模型\n};\n\nconst subagents = [researchSubagent];\n\nconst agent = createDeepAgent({\n  model: \"claude-sonnet-4-20250514\",\n  subagents: subagents,\n});\n```\n\n### `interruptOn`\n\n对于代理来说，常见的情况是某些工具操作可能较为敏感，在执行前需要人工批准。Deep Agents 通过 LangGraph 的中断功能支持人机协作工作流。您可以使用检查点程序来配置哪些工具需要审批。\n\n这些工具配置会被传递给我们预构建的 [HITL 中间件](https:\u002F\u002Fdocs.langchain.com\u002Foss\u002Ftypescript\u002Flangchain\u002Fmiddleware#human-in-the-loop)，从而使代理在执行已配置的工具之前暂停，并等待用户的反馈。\n\n```typescript\nimport { tool } from \"langchain\";\nimport { createDeepAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\nconst getWeather = tool(\n  async ({ city }: { city: string }) => {\n    return `The weather in ${city} is sunny.`;\n  },\n  {\n    name: \"get_weather\",\n    description: \"获取某个城市的天气。\",\n    schema: z.object({\n      city: z.string(),\n    }),\n  },\n);\n\nconst agent = createDeepAgent({\n  model: \"claude-sonnet-4-20250514\",\n  tools: [getWeather],\n  interruptOn: {\n    get_weather: {\n      allowedDecisions: [\"approve\", \"edit\", \"reject\"],\n    },\n  },\n});\n```\n\n### `backend`\n\nDeep Agents 使用后端来管理文件系统操作和内存存储。您可以根据需求配置不同的后端：\n\n```typescript\nimport {\n  createDeepAgent,\n  StateBackend,\n  StoreBackend,\n  FilesystemBackend,\n  LocalShellBackend,\n  CompositeBackend,\n} from \"deepagents\";\nimport { MemorySaver } from \"@langchain\u002Flanggraph\";\nimport { InMemoryStore } from \"@langchain\u002Flanggraph-checkpoint\";\n\n\u002F\u002F 默认：StateBackend（内存中，临时）\nconst agent1 = createDeepAgent({\n  \u002F\u002F 未指定后端 - 默认使用 StateBackend\n});\n\n\u002F\u002F StoreBackend：使用 LangGraph Store 进行持久化存储\nconst agent2 = createDeepAgent({\n  backend: (config) => new StoreBackend(config),\n  store: new InMemoryStore(), \u002F\u002F 提供存储\n  checkpointer: new MemorySaver(), \u002F\u002F 可选：用于对话持久化\n});\n\n\u002F\u002F FilesystemBackend：将文件存储在实际文件系统中\nconst agent3 = createDeepAgent({\n  backend: (config) => new FilesystemBackend({ rootDir: \".\u002Fagent-workspace\" }),\n});\n\n\u002F\u002F LocalShellBackend：提供文件系统访问权限及本地 shell 命令执行能力\nconst agent4 = createDeepAgent({\n  backend: new LocalShellBackend({\n    rootDir: \".\u002Fagent-workspace\",\n    inheritEnv: true,\n  }),\n});\n\n\u002F\u002F CompositeBackend：结合多个后端\nconst agent5 = createDeepAgent({\n  backend: (config) =>\n    new CompositeBackend({\n      state: new StateBackend(config),\n      store: config.store ? new StoreBackend(config) : undefined,\n    }),\n  store: new InMemoryStore(),\n  checkpointer: new MemorySaver(),\n});\n```\n\n有关每种后端类型的详细示例，请参阅 [examples\u002Fbackends\u002F](examples\u002Fbackends\u002F)。\n\n### 沙箱执行\n\n对于需要运行 Shell 命令的代理，可以通过扩展 `BaseSandbox` 来创建一个沙箱后端。这将启用 `execute` 工具，使代理能够在隔离的环境中运行任意 Shell 命令。\n\n```typescript\nimport {\n  createDeepAgent,\n  BaseSandbox,\n  type ExecuteResponse,\n  type FileUploadResponse,\n  type FileDownloadResponse,\n} from \"deepagents\";\nimport { spawn } from \"child_process\";\n\n\u002F\u002F 通过扩展 BaseSandbox 创建具体的沙箱实现\nclass LocalShellSandbox extends BaseSandbox {\n  readonly id = \"local-shell\";\n  private readonly workingDirectory: string;\n\n  constructor(workingDirectory: string) {\n    super();\n    this.workingDirectory = workingDirectory;\n  }\n\n  \u002F\u002F 只需实现 execute() 方法——BaseSandbox 已经实现了所有文件操作\n  async execute(command: string): Promise\u003CExecuteResponse> {\n    return new Promise((resolve) => {\n      const child = spawn(\"\u002Fbin\u002Fbash\", [\"-c\", command], {\n        cwd: this.workingDirectory,\n      });\n\n      const chunks: string[] = [];\n      child.stdout.on(\"data\", (data) => chunks.push(data.toString()));\n      child.stderr.on(\"data\", (data) => chunks.push(data.toString()));\n\n      child.on(\"close\", (exitCode) => {\n        resolve({\n          output: chunks.join(\"\"),\n          exitCode,\n          truncated: false,\n        });\n      });\n    });\n  }\n\n  async uploadFiles(\n    files: Array\u003C[string, Uint8Array]>,\n  ): Promise\u003CFileUploadResponse[]> {\n    \u002F\u002F 实现文件上传逻辑\n    return files.map(([path]) => ({ path, error: null }));\n  }\n\n  async downloadFiles(paths: string[]): Promise\u003CFileDownloadResponse[]> {\n    \u002F\u002F 实现文件下载逻辑\n    return paths.map((path) => ({\n      path,\n      content: null,\n      error: \"file_not_found\",\n    }));\n  }\n}\n\n\u002F\u002F 将沙箱与你的代理一起使用\nconst sandbox = new LocalShellSandbox(\".\u002Fworkspace\");\n\nconst agent = createDeepAgent({\n  backend: sandbox,\n  systemPrompt: \"你可以使用 execute 工具来运行 Shell 命令。\",\n});\n```\n\n当使用沙箱后端时，代理将获得一个 `execute` 工具，可以用来运行 Shell 命令。该工具会自动返回命令的输出、退出码以及输出是否被截断的信息。\n\n完整的实现请参阅 [examples\u002Fsandbox\u002Flocal-sandbox.ts](examples\u002Fsandbox\u002Flocal-sandbox.ts)。\n\n## Deep Agents 中间件\n\nDeep Agents 采用模块化的中间件架构构建。提醒一下，Deep Agents 具备以下功能：\n\n- 计划工具\n- 用于存储上下文和长期记忆的文件系统\n- 派生子代理的能力\n\n这些功能中的每一项都以独立的中间件形式实现。当你使用 `createDeepAgent` 创建深度代理时，我们会自动为你的代理附加 **todoListMiddleware**、**FilesystemMiddleware** 和 **SubAgentMiddleware**。\n\n中间件是一个可组合的概念，你可以根据具体用例选择为代理添加多少个中间件。这意味着你也可以单独使用上述任何中间件！\n\n### TodoListMiddleware\n\n规划是解决复杂问题不可或缺的一部分。如果你最近使用过 Claude Code，就会注意到它在处理复杂的多步骤任务之前会先列出一个待办事项清单，并且随着更多信息的不断涌入，它还能动态地调整和更新这个清单。\n\n**todoListMiddleware** 为你的代理提供了一个专门用于更新待办事项清单的工具。在执行多步骤任务之前及过程中，代理会被提示使用 `write_todos` 工具来记录自己正在做什么以及还需要完成哪些工作。\n\n```typescript\nimport { createAgent, todoListMiddleware } from \"langchain\";\n\n\u002F\u002F 默认情况下，createDeepAgent 已包含 todoListMiddleware\n\u002F\u002F 如果你构建自定义代理，也可以对其进行自定义\nconst agent = createAgent({\n  model: \"claude-sonnet-4-20250514\",\n  middleware: [\n    todoListMiddleware({\n      \u002F\u002F 可选：自定义系统提示\n      systemPrompt: \"使用 write_todos 工具来...\",\n    }),\n  ],\n});\n```\n\n### FilesystemMiddleware\n\n上下文工程是构建高效代理的主要挑战之一。当使用可能返回不同长度结果的工具（例如网络搜索、RAG）时，这一点尤为困难，因为较长的工具结果会迅速填满你的上下文窗口。\n\n**FilesystemMiddleware** 为你的代理提供了与短期和长期记忆交互的工具：\n\n- **ls**：列出文件系统中的文件\n- **read_file**：读取整个文件或文件中的指定行数\n- **write_file**：向文件系统中写入新文件\n- **edit_file**：编辑文件系统中的现有文件\n- **glob**：查找匹配特定模式的文件\n- **grep**：在文件中搜索文本\n- **execute**：运行 Shell 命令（仅在使用 `SandboxBackendProtocol` 时可用）\n\n```typescript\nimport { createAgent } from \"langchain\";\nimport { createFilesystemMiddleware } from \"deepagents\";\n\n\u002F\u002F 默认情况下，createDeepAgent 已包含 FilesystemMiddleware\n\u002F\u002F 如果你构建自定义代理，也可以对其进行自定义\nconst agent = createAgent({\n  model: \"claude-sonnet-4-20250514\",\n  middleware: [\n    createFilesystemMiddleware({\n      backend: ..., \u002F\u002F 可选：自定义存储后端\n      systemPrompt: \"在……时写入文件系统\"， \u002F\u002F 可选的自定义系统提示覆盖\n      customToolDescriptions: {\n        ls: \"在……时使用 ls 工具\",\n        read_file: \"使用 read_file 工具来……\",\n      }, \u002F\u002F 可选：自定义文件系统工具描述\n    }),\n  ],\n});\n```\n\n### SubAgentMiddleware\n\n将任务交给子代理是一种很好的方式，可以在保持主代理（监督者）上下文窗口整洁的同时，深入处理任务。子代理中间件允许你通过任务工具来分配子代理。\n\n子代理由名称、描述、系统提示和工具定义。你还可以为子代理指定自定义模型或额外的中间件。这在你需要让子代理与主代理共享额外的状态键时特别有用。\n\n```typescript\nimport { tool } from \"langchain\";\nimport { createAgent } from \"langchain\";\nimport { createSubAgentMiddleware, type SubAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\nconst getWeather = tool(\n  async ({ city }: { city: string }) => {\n    return `The weather in ${city} is sunny.`;\n  },\n  {\n    name: \"get_weather\",\n    description: \"获取某个城市的天气。\",\n    schema: z.object({\n      city: z.string(),\n    }),\n  },\n);\n\nconst weatherSubagent: SubAgent = {\n  name: \"weather\",\n  description: \"该子代理可以获取城市天气。\",\n  systemPrompt: \"使用 get_weather 工具获取城市天气。\",\n  tools: [getWeather],\n  model: \"gpt-4o\",\n  middleware: [],\n};\n\nconst agent = createAgent({\n  model: \"claude-sonnet-4-20250514\",\n  middleware: [\n    createSubAgentMiddleware({\n      defaultModel: \"claude-sonnet-4-20250514\",\n      defaultTools: [],\n      subagents: [weatherSubagent],\n    }),\n  ],\n});\n```\n\n## ACP（代理客户端协议）支持\n\nDeep Agents 可以作为 [Agent Client Protocol](https:\u002F\u002Fagentclientprotocol.com) 服务器暴露出来，通过基于 stdio 的标准化 JSON-RPC 2.0 协议，实现与 [Zed](https:\u002F\u002Fzed.dev)、JetBrains 等 IDE 以及其他兼容 ACP 的客户端的集成。\n\n`deepagents-acp` 包为您的 Deep Agent 提供了 ACP 支持：\n\n```bash\nnpm install deepagents-acp\n```\n\n最快速的入门方式是使用 CLI：\n\n```bash\nnpx deepagents-acp --name my-agent --workspace \u002Fpath\u002Fto\u002Fproject\n```\n\n或者以编程方式启动：\n\n```typescript\nimport { startServer } from \"deepagents-acp\";\n\nawait startServer({\n  agents: {\n    name: \"coding-assistant\",\n    description: \"具有文件系统访问权限的 AI 编程助手\",\n    skills: [\".\u002Fskills\u002F\"],\n  },\n  workspaceRoot: process.cwd(),\n});\n```\n\n若要与 Zed 集成，请在 Zed 的设置中添加以下配置：\n\n```json\n{\n  \"agent\": {\n    \"profiles\": {\n      \"deepagents\": {\n        \"name\": \"DeepAgents\",\n        \"command\": \"npx\",\n        \"args\": [\"deepagents-acp\"]\n      }\n    }\n  }\n}\n```\n\n完整的文档和高级配置信息，请参阅 [deepagents-acp 的 README](libs\u002Facp\u002FREADME.md) 和 [ACP 服务器示例](examples\u002Facp-server\u002F)。","# deepagentsjs 快速上手指南\n\n`deepagentsjs` 是一个基于 TypeScript 的 AI 智能体框架，旨在解决传统智能体在复杂长任务中规划能力不足的问题。它通过内置**任务规划**、**子智能体（Sub-agents）**、**文件系统访问**和**详细提示词**四大核心组件，帮助开发者轻松构建类似 \"Deep Research\" 或 \"Claude Code\" 的深度智能体应用。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **Node.js**: 建议版本 18+\n*   **TypeScript**: 版本 5.0+\n*   **包管理器**: npm, yarn 或 pnpm\n*   **API Key**: 若使用示例中的搜索功能，需准备 [Tavily API Key](https:\u002F\u002Fwww.tavily.com\u002F) (或其他 LLM 提供商的 Key)\n\n## 安装步骤\n\n使用您喜欢的包管理器安装 `deepagents` 核心库。如果您打算运行官方示例中的网络搜索功能，还需安装 `@langchain\u002Ftavily`。\n\n```bash\n# 使用 npm\nnpm install deepagents @langchain\u002Ftavily\n\n# 使用 yarn\nyarn add deepagents @langchain\u002Ftavily\n\n# 使用 pnpm\npnpm add deepagents @langchain\u002Ftavily\n```\n\n> **注意**：请确保在环境变量中设置 `TAVILY_API_KEY`，以便搜索工具正常工作。\n\n## 基本使用\n\n以下是一个最简示例，展示如何创建一个具备网络搜索能力的深度研究智能体。该智能体能够自动规划步骤、调用搜索工具并生成报告。\n\n```typescript\nimport { tool } from \"langchain\";\nimport { TavilySearch } from \"@langchain\u002Ftavily\";\nimport { createDeepAgent } from \"deepagents\";\nimport { z } from \"zod\";\n\n\u002F\u002F 1. 定义网络搜索工具\nconst internetSearch = tool(\n  async ({\n    query,\n    maxResults = 5,\n    topic = \"general\",\n    includeRawContent = false,\n  }: {\n    query: string;\n    maxResults?: number;\n    topic?: \"general\" | \"news\" | \"finance\";\n    includeRawContent?: boolean;\n  }) => {\n    const tavilySearch = new TavilySearch({\n      maxResults,\n      tavilyApiKey: process.env.TAVILY_API_KEY,\n      includeRawContent,\n      topic,\n    });\n    return await tavilySearch._call({ query });\n  },\n  {\n    name: \"internet_search\",\n    description: \"Run a web search\",\n    schema: z.object({\n      query: z.string().describe(\"The search query\"),\n      maxResults: z\n        .number()\n        .optional()\n        .default(5)\n        .describe(\"Maximum number of results to return\"),\n      topic: z\n        .enum([\"general\", \"news\", \"finance\"])\n        .optional()\n        .default(\"general\")\n        .describe(\"Search topic category\"),\n      includeRawContent: z\n        .boolean()\n        .optional()\n        .default(false)\n        .describe(\"Whether to include raw content\"),\n    }),\n  },\n);\n\n\u002F\u002F 2. 设定系统提示词，赋予智能体专家角色\nconst researchInstructions = `You are an expert researcher. Your job is to conduct thorough research, and then write a polished report.\n\nYou have access to an internet search tool as your primary means of gathering information.\n\n## \\`internet_search\\`\n\nUse this to run an internet search for a given query. You can specify the max number of results to return, the topic, and whether raw content should be included.\n`;\n\n\u002F\u002F 3. 创建深度智能体\nconst agent = createDeepAgent({\n  tools: [internetSearch],\n  systemPrompt: researchInstructions,\n  \u002F\u002F 可选：自定义模型，默认使用 claude-sonnet-4-5-20250929\n  \u002F\u002F model: new ChatOpenAI({ model: \"gpt-4o\" }), \n});\n\n\u002F\u002F 4. 调用智能体执行任务\nconst result = await agent.invoke({\n  messages: [{ role: \"user\", content: \"What is langgraph?\" }],\n});\n\nconsole.log(result.messages[result.messages.length - 1].content);\n```\n\n### 核心特性说明\n\n*   **自动规划**：内置 `write_todos` 工具，智能体会自动将复杂问题拆解为步骤并跟踪进度。\n*   **文件操作**：支持 `ls`, `read_file`, `write_file` 等工具，用于管理长上下文和持久化状态。\n*   **子智能体**：可通过 `task` 工具派生专用子智能体处理特定子任务，隔离上下文干扰。\n*   **流式支持**：完全兼容 LangGraph 的流式输出，支持实时查看 Token 生成和任务进度。","某全栈开发团队需要构建一个能自动执行“竞品深度调研并生成分析报告”的智能助手，该任务涉及多轮搜索、数据整理、代码分析及长文档撰写。\n\n### 没有 deepagentsjs 时\n- **任务规划能力弱**：传统 Agent 只能线性执行简单指令，面对“先搜索、再对比、最后写报告”的复杂流程时，容易迷失方向或中途断开，无法自主拆解步骤。\n- **缺乏持久记忆**：中间产生的搜索片段和临时数据仅存在于内存中，一旦任务耗时过长或需要分阶段处理，上下文极易丢失，导致重复劳动。\n- **难以处理专业子任务**：单一模型试图同时完成“联网搜索”、“代码库分析”和“图表绘制”，导致每个环节都不够深入，产出内容肤浅且错误率高。\n- **状态不可见**：开发者无法实时感知 Agent 当前正在执行哪个子步骤，调试困难，用户也无法获得进度反馈，体验如同“黑盒”。\n\n### 使用 deepagentsjs 后\n- **智能战略拆解**：借助内置的规划工具（Planning Tool），deepagentsjs 能自动将宏观目标拆解为“定义关键词”、“并行搜索竞品”、“提取核心数据”等可执行的子步骤序列。\n- **文件系统持久化**：利用文件系统后端，Agent 能将每一步的搜索结果和分析草稿实时写入本地文件，确保长任务中的状态不丢失，支持断点续传。\n- **子代理分工协作**：通过动态生成子代理（Sub-agents），deepagentsjs 可指派专门的“搜索专家”负责查资料，“分析专家”负责写代码逻辑，显著提升各环节的专业度。\n- **流式进度透明**：基于 LangGraph 的流式支持，系统能实时推送当前执行步骤和 Token 消耗，让开发者和最终用户清晰掌握任务进展。\n\ndeepagentsjs 通过将规划、记忆与分工机制标准化，让开发者能轻松打造出具备“深度思考”能力的智能体，从容应对复杂长链路任务。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Flangchain-ai_deepagentsjs_d5381807.png","langchain-ai","LangChain","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Flangchain-ai_8e6aaeef.png","",null,"support@langchain.dev","https:\u002F\u002Fwww.langchain.com","https:\u002F\u002Fgithub.com\u002Flangchain-ai",[82],{"name":83,"color":84,"percentage":85},"TypeScript","#3178c6",100,1059,168,"2026-04-11T07:12:25","MIT","未说明",{"notes":92,"python":93,"dependencies":94},"这是一个基于 TypeScript 的 AI 代理框架，运行于 Node.js 环境而非 Python。默认使用 Claude Sonnet 模型，需配置相应的 API Key（如 ANTHROPIC_API_KEY）。支持通过 npm、yarn 或 pnpm 安装。核心功能依赖 LangGraph 进行状态管理和流程控制，并内置了文件系统操作工具（读\u002F写\u002F编辑文件），因此运行环境需具备相应的文件系统读写权限。","不适用 (此为 TypeScript\u002FNode.js 项目)",[95,96,97,98,99,100],"langchain","@langchain\u002Fcore","@langchain\u002Flanggraph","zod","@langchain\u002Fanthropic (可选)","@langchain\u002Fopenai (可选)",[15,14,13],[103,104,95,105],"ai","deepagents","langgraph","2026-03-27T02:49:30.150509","2026-04-11T23:22:53.142042",[109,114,119,124,129,133],{"id":110,"question_zh":111,"answer_zh":112,"source_url":113},29972,"遇到 'Channel \"files\" already exists with a different type' 错误如何解决？","这是一个依赖版本兼容性问题。临时解决方案是手动锁定以下依赖版本：\n\n在 package.json 或 pnpm 配置中添加覆盖（overrides）：\n```json\n\"pnpm\": {\n  \"overrides\": {\n    \"@langchain\u002Flanggraph\": \"1.0.2\",\n    \"@langchain\u002Fcore\": \"1.1.4\",\n    \"langchain\": \"1.1.5\",\n    \"zod\": \"3.25.76\"\n  }\n}\n```\n同时确保在项目自身的 package.json 中也明确包含 zod `3.25.76`，因为 deepagents 可能引入了不同版本的 zod。\n\n调试方法：\n- npm 用户运行：`npm ls @langchain\u002Flanggraph`\n- pnpm 用户运行：`pnpm why @langchain\u002Flanggraph`\n检查是否存在重复依赖。该问题已在 deepagents@1.4.0 及后续版本中修复。","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fissues\u002F75",{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},29973,"运行示例时出现 'LastValue can only receive one value per step' 错误怎么办？","该错误通常是由于中间件（middleware）的 Schema 定义问题导致通道接收了多个值。维护者已确认正在更新 deepagents 中所有中间件的 Schema 定义以解决此问题。请确保将 `deepagents` 升级到最新版本（该问题已在后续版本中修复）。如果升级后仍存在问题，请检查是否在同一流程中对同一通道进行了多次并发更新。","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fissues\u002F65",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},29974,"使用 DeepAgent 生成代码时经常因输出令牌限制而中途停止，如何处理？","团队已经发布了多项改进，包括优化总结中间件（summarization middleware）和压缩流程（compaction process），旨在缓解因 LLM 输出令牌限制导致生成中断的问题。请确保将 `deepagents` 升级到最新版本以获取这些修复。如果问题仍然存在，建议检查模型配置或考虑分批次处理大型代码生成任务。","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fissues\u002F221",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},29975,"在子代理（Subagent）中配置 interruptOn 为何没有生效或导致 TypeError？","如果在子代理中配置了 `interruptOn` 但中断未生效，通常是因为主代理（Main Agent）也能直接访问该工具。在这种情况下，LLM 会直接调用主代理中的工具，而不是通过子代理的任务工具调用，因此子代理的中断配置不会被触发。\n\n解决方法：\n1. 确保需要中断的工具仅在子代理中定义，不要同时在主代理中注册该工具。\n2. 升级 `deepagents` 至 v1.5.1 或更高版本，该版本修复了相关的 TypeError 问题。\n\n注意：如果工具同时存在于主代理和子代理中，即使子代理配置了中断，也不会触发中断机制。","https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fissues\u002F130",{"id":130,"question_zh":131,"answer_zh":132,"source_url":113},29976,"如何检查项目中是否存在 @langchain\u002Flanggraph 的依赖冲突？","可以使用包管理器自带的命令来检查依赖树和冲突情况：\n\n- 如果使用 **npm**，运行：\n  ```bash\n  npm ls @langchain\u002Flanggraph\n  ```\n- 如果使用 **pnpm**，运行：\n  ```bash\n  pnpm why @langchain\u002Flanggraph\n  ```\n- 如果使用 **yarn**，运行：\n  ```bash\n  yarn why @langchain\u002Flanggraph\n  ```\n\n这些命令可以帮助确认是否安装了多个版本的 langgraph，从而定位类似 'Channel already exists' 的错误根源。",{"id":134,"question_zh":135,"answer_zh":136,"source_url":113},29977,"DeepAgent 的最新版本修复了哪些已知的主要问题？","根据最近的发布记录，以下主要问题已被修复：\n1. **依赖类型冲突**：deepagents@1.4.0 修复了因 langgraph 版本不匹配导致的 'Channel already exists' 错误。\n2. **InvalidUpdateError**：更新了中间件的 Schema 定义，解决了 'LastValue can only receive one value per step' 的并发更新错误。\n3. **令牌限制中断**：改进了总结中间件和压缩流程，减少代码生成因令牌限制而截断的情况。\n4. **子代理中断失效**：deepagents@v1.5.1 修复了子代理 `interruptOn` 配置导致的 TypeError 及逻辑失效问题。\n\n建议始终使用最新版本的 `deepagents` 以获得最佳稳定性和功能支持。",[138,143,148,153,158,163,168,173,178,183,188,193,198,203,208,212,217,222,227,232],{"id":139,"version":140,"summary_zh":141,"released_at":142},206585,"@langchain\u002Fsandbox-standard-tests@1.0.0","### 补丁变更\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 功能（deepagents）：支持后端的多模态文件\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 杂项（deepagents）：重构后端方法名——lsInfo -> ls，grepRaw -> grep，globInfo -> glob\n","2026-04-07T15:50:03",{"id":144,"version":145,"summary_zh":146,"released_at":147},206586,"@langchain\u002Fquickjs@0.2.5","### 补丁变更\n\n-   [#434](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F434) [`89ee206`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F89ee206ba6dd07f895c662755a2058b08fcb5315) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 升级 langgraph 和 langchain 版本\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 新增特性 (deepagents): 支持后端处理多模态文件\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 重构 (deepagents): 重命名后端方法 - lsInfo -> ls, grepRaw -> grep, globInfo -> glob\n","2026-04-07T15:50:00",{"id":149,"version":150,"summary_zh":151,"released_at":152},206587,"deepagents-acp@0.1.8","### 补丁变更\n\n-   [#434](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F434) [`89ee206`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F89ee206ba6dd07f895c662755a2058b08fcb5315) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 升级 langgraph 和 langchain 版本\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 新增功能 (deepagents): 支持后端处理多模态文件\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 重构 (deepagents): 重命名后端方法 - lsInfo -> ls, grepRaw -> grep, globInfo -> glob\n\n-   更新了依赖项 \\[[`89ee206`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F89ee206ba6dd07f895c662755a2058b08fcb5315), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`815bc0f`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F815bc0fac4b4d0d9b3e7fb97dd64ed8e2bbfb317), [`dc030a5`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fdc030a5238534b8f63bc9d28b1608ded45e2fffc), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518)]:\n    -   deepagents@1.9.0\n","2026-04-07T15:49:57",{"id":154,"version":155,"summary_zh":156,"released_at":157},206588,"@langchain\u002Fnode-vfs@0.1.4","### 补丁变更\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 功能（deepagents）：支持后端的多模态文件\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 构建（deepagents）：重构后端方法名——lsInfo -> ls，grepRaw -> grep，globInfo -> glob\n","2026-04-07T15:49:54",{"id":159,"version":160,"summary_zh":161,"released_at":162},206589,"deepagents@1.9.0","### 小幅改动\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 功能（deepagents）：支持后端的多模态文件\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 杂项（deepagents）：重构后端方法名——lsInfo -> ls，grepRaw -> grep，globInfo -> glob\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 功能（sdk）：为远程 LangGraph 服务器添加异步子代理中间件\n\n### 补丁更新\n\n-   [#434](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F434) [`89ee206`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F89ee206ba6dd07f895c662755a2058b08fcb5315) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 升级 langgraph 和 langchain 版本\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 功能（deepagents）：为异步子代理添加完成通知中间件\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 杂项（sdk）：将同步子代理和异步子代理统一为一个属性\n\n-   [#419](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F419) [`815bc0f`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F815bc0fac4b4d0d9b3e7fb97dd64ed8e2bbfb317) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 修复：弃用后端工厂，并支持 StateBackend 和 StoreBackend 的无参构造函数\n\n-   [#422](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F422) [`dc030a5`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fdc030a5238534b8f63bc9d28b1608ded45e2fffc) 感谢 [@JadenKim-dev](https:\u002F\u002Fgithub.com\u002FJadenKim-dev)! - 修复：为 grep 工具的 glob 模式添加默认值，以兼容严格模式\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 将完成通知重命名为完成回调，并统一命名\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 扩展支持的文件类型\n\n-   [#404](https:\u002F\u002Fgithub","2026-04-07T15:49:51",{"id":164,"version":165,"summary_zh":166,"released_at":167},206590,"@langchain\u002Fmodal@0.1.4","### 补丁变更\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - feat(deepagents): 为后端支持多模态文件\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - chore(deepagents): 重构后端方法名 - lsInfo -> ls，grepRaw -> grep，globInfo -> glob\n","2026-04-07T15:49:48",{"id":169,"version":170,"summary_zh":171,"released_at":172},206591,"deepagents@1.9.0-alpha.1","### 补丁变更\n\n-   [#419](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F419) [`815bc0f`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F815bc0fac4b4d0d9b3e7fb97dd64ed8e2bbfb317) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 修复：弃用后端工厂，并支持 StateBackend 和 StoreBackend 的无参构造函数。\n\n-   [#422](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F422) [`dc030a5`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fdc030a5238534b8f63bc9d28b1608ded45e2fffc) 感谢 [@JadenKim-dev](https:\u002F\u002Fgithub.com\u002FJadenKim-dev)! - 修复：为 grep 工具的 glob 模式添加默认值，以兼容严格模式。\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 将 completion notifier 重命名为 completion callback，并统一命名。\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 扩展支持的文件类型。\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 修复（deepagents）：使提示模板与运行时行为保持一致。\n    -   通过在提示中渲染 `MAX_LINE_LENGTH`，使 `read_file` 长行指导与运行时行为一致。\n    -   规范化文件系统、内存、子代理和摘要生成中间件的提示\u002F模板文本，以匹配当前行为并提高一致性。\n    -   从技能指导中移除 Python 特定的表述，使描述与语言无关。\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 清理工厂方法中的中间件配置。\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 杂项（SDK）：更新用于代理协议的异步子代理中间件。\n\n-   [#404](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F404) [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 修复（SDK）：AsyncTask 的 updatedAt 字段在任务状态变化时不会更新。","2026-04-06T18:32:56",{"id":174,"version":175,"summary_zh":176,"released_at":177},206592,"deepagents-acp@0.1.8-alpha.0","### 补丁变更\n\n-   更新了依赖项 \\[[`815bc0f`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F815bc0fac4b4d0d9b3e7fb97dd64ed8e2bbfb317), [`dc030a5`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fdc030a5238534b8f63bc9d28b1608ded45e2fffc), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518), [`ca5cc0a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fca5cc0acfbbeec08efd4f3aa651bdbefd2008518)]:\n    -   deepagents@1.8.9-alpha.0\n","2026-04-06T18:32:53",{"id":179,"version":180,"summary_zh":181,"released_at":182},206593,"@langchain\u002Fnode-vfs@0.1.4-alpha.0","# @langchain\u002Fnode-vfs\n\n## 1.0.0-alpha.0\n\n### 补丁更新\n\n-   [`4faca20`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F4faca20343089ee2d8ecaf4c8ad3b5f8fcf1e8f8) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 功能（deepagents）：为后端支持多模态文件\n\n-   [`07800c0`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F07800c04d56bf2b9cb8ed99f769fd199908fd589) 感谢 [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - 杂项（deepagents）：重构后端方法名 - lsInfo -> ls，grepRaw -> grep，globInfo -> glob\n\n-   更新了依赖项 \\[[`b1a2c8d`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fb1a2c8ddaef59f40aebe225cde458ce70d5fbdd3), [`bca71ed`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fbca71ed044edc438389a4ca19d81f43dabe01fa7), [`4faca20`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F4faca20343089ee2d8ecaf4c8ad3b5f8fcf1e8f8), [`07800c0`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F07800c04d56bf2b9cb8ed99f769fd199908fd589), [`6b76b39`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F6b76b39cfc6a87ccb034d6e27888f7f6f2f91b97)]:\n    -   deepagents@1.9.0-alpha.0\n\n## 0.1.3\n\n### 补丁更新\n\n-   [#322](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F322) [`8dc4e9c`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F8dc4e9ca29c2aac0ac823b5de6de3b5c608d041e) 感谢 [@hnustwjj](https:\u002F\u002Fgithub.com\u002Fhnustwjj)! - 修复（node-vfs）：在 execute() 命令中重写绝对 VFS 路径\n\n## 0.1.2\n\n### 补丁更新\n\n-   [#237](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F237) [`a827af7`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fa827af7be8600e29a2bc8e209fca5b29bcbabc25) 感谢 [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - 修复（node-vfs）：添加许可证文件\n\n## 0.1.1\n\n### 补丁更新\n\n-   [#194](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F194) [`731b01e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F731b01ed172dd4cbc0fa45f0189723ad6890f366) 感谢 [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - 修复（deepagents）：优化沙盒接口\n\n## 0.1.0\n\n### 小幅更新\n\n-   [`80a41ef`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F80a41ef018449cf5c575584c09c183b765cbcf03) 感谢 [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - 修复（node-vfs）：增加对 VFS 沙盒的支持\n\n## 0.0.1\n\n### 补丁更新\n\n-   初始发布","2026-04-06T18:32:50",{"id":184,"version":185,"summary_zh":186,"released_at":187},206594,"@langchain\u002Fquickjs@0.2.5-alpha.0","# @langchain\u002Fquickjs\n\n## 0.2.4\n\n### 补丁更新\n\n-   [#395](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F395) [`92b2657`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F92b26577b81979636222eb77e938650e2e4d752c) 感谢 [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - 修复(deepagents): 升级 LangChain 依赖\n\n## 0.2.3\n\n### 补丁更新\n\n-   [#390](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F390) [`9301a9e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F9301a9efcc86abb7a5225d153770e293ebaa54e8) 感谢 [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - 修复(deepagents): 更新 LangChain 包\n\n## 0.2.2\n\n### 补丁更新\n\n-   [#362](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F362) [`028f2f8`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F028f2f818f9c4f95e71308fbdc80d035f0709224) 感谢 [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - 修复(deepagents): 扩展 BackendFactory 并使其异步化\n\n## 0.2.1\n\n### 补丁更新\n\n-   [#317](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F317) [`01da088`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F01da08863acd74da303b78950050f3df850216fe) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 修复(deepagents, quickjs): 从 runtime\u002Fconfig.store 而不是 config.configurable 中读取存储\n\n    文件系统中间件之前会从 `request.config.store` 中读取存储（带有 `@ts-expect-error` 注释），而 QuickJS 中间件则从 `config.configurable.__pregel_store` 中读取。现在两者都使用类型安全的路径：分别为 `request.runtime.store` 和 `config.store`。\n\n## 0.2.0\n\n### 小版本更新\n\n-   [#261](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F261) [`454fa26`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F454fa268041a5ad08af2eff991102079e5d5d50b) 感谢 [@hntrl](https:\u002F\u002Fgithub.com\u002Fhntrl)! - 新特性(quickjs): 添加 `@langchain\u002Fquickjs` — 沙箱化的 JavaScript\u002FTypeScript REPL 工具\n    -   新增 `createQuickJSMiddleware()`，提供一个基于 WASM 沙箱的 QuickJS REPL（`js_eval` 工具），具备虚拟文件系统集成、TypeScript 支持、顶层 await 以及跨 eval 状态持久化功能。\n    -   程序化工具调用（PTC）：将任何代理工具暴露为 REPL 内部的类型化异步函数，以实现代码驱动的编排、批处理和并行执行。\n    -   环境变量隔离与密钥管理：支持不透明的密钥占位符、按工具允许列表配置以及防止文件写入泄漏。\n    -   基于 AST 的转换流水线（acorn + estree-walker + magic-string），用于 TypeScript 去语法糖、声明提升及自动返回。","2026-04-06T18:32:47",{"id":189,"version":190,"summary_zh":191,"released_at":192},206595,"@langchain\u002Fmodal@0.1.4-alpha.0","# @langchain\u002Fmodal\n\n## 1.0.0-alpha.0\n\n### Patch Changes\n\n-   [`4faca20`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F4faca20343089ee2d8ecaf4c8ad3b5f8fcf1e8f8) Thanks [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - feat(deepagents): support multimodal files for backends\n\n-   [`07800c0`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F07800c04d56bf2b9cb8ed99f769fd199908fd589) Thanks [@colifran](https:\u002F\u002Fgithub.com\u002Fcolifran)! - chore(deepagents): refactor backend method names - lsInfo -> ls, grepRaw -> grep, globInfo -> glob\n\n-   Updated dependencies \\[[`b1a2c8d`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fb1a2c8ddaef59f40aebe225cde458ce70d5fbdd3), [`bca71ed`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fbca71ed044edc438389a4ca19d81f43dabe01fa7), [`4faca20`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F4faca20343089ee2d8ecaf4c8ad3b5f8fcf1e8f8), [`07800c0`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F07800c04d56bf2b9cb8ed99f769fd199908fd589), [`6b76b39`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F6b76b39cfc6a87ccb034d6e27888f7f6f2f91b97)]:\n    -   deepagents@1.9.0-alpha.0\n\n## 0.1.3\n\n### Patch Changes\n\n-   [#237](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F237) [`a827af7`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fa827af7be8600e29a2bc8e209fca5b29bcbabc25) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(modal): adding license file\n\n## 0.1.2\n\n### Patch Changes\n\n-   [#197](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F197) [`e4b5892`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fe4b5892b0e171cf33b75c8e2c93665ce97f87638) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): runtime agnostic sandbox operations\n\n## 0.1.1\n\n### Patch Changes\n\n-   [#194](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F194) [`731b01e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F731b01ed172dd4cbc0fa45f0189723ad6890f366) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): polish sandbox interfaces\n\n## 0.1.0\n\n### Minor Changes\n\n-   [#188](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F188) [`0d3aa48`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F0d3aa4823077449a867032a66f7a3ce4d3a78a99) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - feat(modal): add Modal sandbox provider for DeepAgents\n\n    Adds `@langchain\u002Fmodal` package providing Modal sandbox integration for the DeepAgents framework.\n\n    Features:\n\n    -   Command execution via `execute()` in isolated Modal containers\n    -   File operations via `uploadFiles()` and `downloadFiles()`\n    -   Initial file population via `initialFiles` option\n    -   Direct SDK access via `.client` and `.instance` properties\n    -   Configurable container images, timeouts, memory, GPU, volumes, and secrets\n    -   Type-safe options extending Modal SDK's `SandboxCreateParams`\n\n## 0.0.1\n\n### Patch Changes\n\n-   Initial release\n","2026-04-06T18:32:44",{"id":194,"version":195,"summary_zh":196,"released_at":197},206596,"@langchain\u002Fdaytona@0.2.0-alpha.0","# @langchain\u002Fdaytona\n\n## 0.2.0\n\n### Minor Changes\n\n-   [#382](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F382) [`ba5aafd`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fba5aafd76168736de28df5f0d810456ebf7dd4a5) Thanks [@Ehesp](https:\u002F\u002Fgithub.com\u002FEhesp)! - Add support for autoArchiveInterval and autoDeleteInterval in Daytona sandbox creation options.\n\n## 0.1.2\n\n### Patch Changes\n\n-   [#237](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F237) [`a827af7`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fa827af7be8600e29a2bc8e209fca5b29bcbabc25) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(daytona): adding license file\n\n## 0.1.1\n\n### Patch Changes\n\n-   [#194](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F194) [`731b01e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F731b01ed172dd4cbc0fa45f0189723ad6890f366) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): polish sandbox interfaces\n\n## 0.1.0\n\n### Minor Changes\n\n-   [#188](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F188) [`0d3aa48`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F0d3aa4823077449a867032a66f7a3ce4d3a78a99) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - feat(daytona): adding sandbox integration\n\n## 0.0.1\n\n### Patch Changes\n\n-   Initial release\n","2026-04-06T18:32:41",{"id":199,"version":200,"summary_zh":201,"released_at":202},206597,"@langchain\u002Fdeno@0.2.2-alpha.0","# @langchain\u002Fdeno\n\n## 0.2.2\n\n### Patch Changes\n\n-   [#362](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F362) [`028f2f8`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F028f2f818f9c4f95e71308fbdc80d035f0709224) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): extend BackendFactory and make it async\n\n## 0.2.1\n\n### Patch Changes\n\n-   [#237](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F237) [`a827af7`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fa827af7be8600e29a2bc8e209fca5b29bcbabc25) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deno): adding license file\n\n## 0.2.0\n\n### Minor Changes\n\n-   [#216](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F216) [`786053f`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F786053fe42e7df66a5d728cd4635a18bde049387) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - feat(deno): better support for sandboxes with volume\n\n## 0.1.2\n\n### Patch Changes\n\n-   [#201](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F201) [`3f30ba7`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F3f30ba7e1dc20ec8c892838392b2df6a2c4155ac) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): cross-platform shell commands for Alpine\u002FBusyBox and macOS\n\n    The BaseSandbox shell commands for lsInfo, globInfo, and grepRaw now work across three environments via runtime detection:\n\n    -   GNU Linux (Ubuntu, Debian): uses find -printf for efficient metadata listing\n    -   BusyBox \u002F Alpine: uses find -exec sh -c with stat -c for size\u002Fmtime and POSIX test builtins for file type detection\n    -   BSD \u002F macOS: uses find -exec stat -f as a fallback\n\n## 0.1.1\n\n### Patch Changes\n\n-   [#194](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F194) [`731b01e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F731b01ed172dd4cbc0fa45f0189723ad6890f366) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): polish sandbox interfaces\n\n## 0.1.0\n\n### Minor Changes\n\n-   [#162](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F162) [`c0e676a`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fc0e676a1a5818e8a22d01b89edccf90834eca3ba) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - feat(deno): add support for Deno sandbox\n\n## 0.0.1\n\n### Patch Changes\n\n-   Initial release\n","2026-04-06T18:32:38",{"id":204,"version":205,"summary_zh":206,"released_at":207},206598,"@langchain\u002Fquickjs@0.2.4","### Patch Changes\n\n-   [#395](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F395) [`92b2657`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F92b26577b81979636222eb77e938650e2e4d752c) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): bump langchain deps\n","2026-03-31T04:39:21",{"id":209,"version":210,"summary_zh":206,"released_at":211},206599,"deepagents@1.8.8","2026-03-31T04:39:18",{"id":213,"version":214,"summary_zh":215,"released_at":216},206600,"deepagents-acp@0.1.7","### Patch Changes\n\n-   [#395](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F395) [`92b2657`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F92b26577b81979636222eb77e938650e2e4d752c) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): bump langchain deps\n\n-   Updated dependencies \\[[`92b2657`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F92b26577b81979636222eb77e938650e2e4d752c)]:\n    -   deepagents@1.8.8\n","2026-03-31T04:39:15",{"id":218,"version":219,"summary_zh":220,"released_at":221},206601,"deepagents-acp@0.1.6","### Patch Changes\n\n-   [#390](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F390) [`9301a9e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F9301a9efcc86abb7a5225d153770e293ebaa54e8) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): update langchain packages\n\n-   Updated dependencies \\[[`2de4302`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F2de43020032722d5951a22b2411aa38ea6e5bd1c), [`9301a9e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F9301a9efcc86abb7a5225d153770e293ebaa54e8)]:\n    -   deepagents@1.8.7\n","2026-03-30T20:14:33",{"id":223,"version":224,"summary_zh":225,"released_at":226},206602,"@langchain\u002Fdaytona@0.2.0","### Minor Changes\n\n-   [#382](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F382) [`ba5aafd`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002Fba5aafd76168736de28df5f0d810456ebf7dd4a5) Thanks [@Ehesp](https:\u002F\u002Fgithub.com\u002FEhesp)! - Add support for autoArchiveInterval and autoDeleteInterval in Daytona sandbox creation options.\n","2026-03-30T20:14:30",{"id":228,"version":229,"summary_zh":230,"released_at":231},206603,"@langchain\u002Fquickjs@0.2.3","### Patch Changes\n\n-   [#390](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F390) [`9301a9e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F9301a9efcc86abb7a5225d153770e293ebaa54e8) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): update langchain packages\n","2026-03-30T20:14:27",{"id":233,"version":234,"summary_zh":235,"released_at":236},206604,"deepagents@1.8.7","### Patch Changes\n\n-   [#357](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F357) [`2de4302`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F2de43020032722d5951a22b2411aa38ea6e5bd1c) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): evict large HumanMessages to filesystem\n\n-   [#390](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fpull\u002F390) [`9301a9e`](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Fdeepagentsjs\u002Fcommit\u002F9301a9efcc86abb7a5225d153770e293ebaa54e8) Thanks [@christian-bromann](https:\u002F\u002Fgithub.com\u002Fchristian-bromann)! - fix(deepagents): update langchain packages\n","2026-03-30T20:14:24"]