mirror of
https://github.com/langchain-ai/deepagentsjs.git
synced 2026-07-19 08:26:01 -04:00
Closed
opened 2026-02-16 06:17:20 -05:00 by yindo
·
0 comments
No Branch/Tag Specified
main
dependabot/npm_and_yarn/patch-deps-updates-main-c0f001c0f6
dependabot/npm_and_yarn/major-deps-updates-main-b7ceb5d816
dependabot/npm_and_yarn/minor-deps-updates-main-f52a01c0f6
dependabot/github_actions/major-deps-updates-5c183d6ffa
dependabot/github_actions/minor-deps-updates-38afab4f4d
dependabot/github_actions/patch-deps-updates-00a0d7aaea
dependabot/docker/examples/async-subagent-server/major-deps-updates-docker-4faa477378
feat/delete-backend-protocol
feat/write-file-overwrites
feat/recursive-delete-tool
corridor/fix-1119d955-1783568785287
open-swe/bump-langsmith-0-8-0
alex/initializer
cb/connectors-spec-19bb
open-swe/fs-interrupt-permissions
sydney/oolong-ptc-runners
cb/fs-permissions-interrupt-9517
hunter/swarm-oolong-eval
colifran/swarm-eval
colifran/interp-libs
colifran/workflow-poc
colifran/swarm-sub-mw-defaults
hunter/fix-ci-read-file-mime-guard
fix/filesystem-glob-suppress-permission-errors
hunter/middleware-replace-by-name
hunter/fix-node-vfs-absolute-exec-paths
colifran/lazy-skills
cb/fix-subagent-stream-same-type-isolation
fix/acp-filesystem-virtual-mode
colifran/skill-dist
colifran/skill-cli
open-swe/9065a8d9-c0c3-5c29-b106-1a195b97ddbd
colifran/permissions
colifran/repl-swarm
hunter/quickjs-pending-write-reads
colifran/swarm-in-repl
jacob/subagents
jacob/subagenttype
open-swe/7460276d-5f03-10ca-8a53-7653699f1133
colifran/swarm-tool
hunter/fix-sandbox-find-follow-symlinks
open-swe/dfd00850-86b7-5f87-2c10-3bd968b1c75e
colifran/swarm-refactor
colifran/swarm-table
colifran/swarm
open-swe/8d89ab28-9b47-3a19-427b-aacfa4c5d099
open-swe/086c3d27-2ff0-ebf5-5d74-4d35e38083c5
open-swe/23f64c62-afe9-dc40-bbe0-c86a558611b3
hunter/namespace-factories
alpha
baseten-integration
colifran/deprecate-backend-factories
colifran/agent-protocol-poc
colifran/a2a-subagents
ci/add-codeql-scanning
colifran/async-example
colifran/async-subagents-example
1.9.0-alpha.1
colifran/backend-rename
hunter/js-queue-lookahead-middleware
cb/secure-exec
cb/pass-checkpointer
colifran/multimodal-refactor-pr2
structured-output-evals
subagent-structured-output
colifran/multimodal-refactor-pr1
cb/async-agents
hunter/repl-rlm
cb/ptc-repl-network-policy
cb/ptc-repl
cb/ptc
open-swe/020b364c-2a7f-e2b2-30e0-4593befd0490
add-evals
hunter/structured-output-eval
cb/composite-fix
hunter/async-subagents
hunter/relo-evals
cb/summarization-improvements
hunter/deepbash
harbor-evals
hunter/trace-metadata
hunter/integration
cb/langsmith-sandbox
isolate-agent-skills
hunter/batch-task
fix-memory-load-state
add-e2e-test
cb/add-streaming-example
copilot/fix-partial-file-updates
copilot/fix-file-state-loss
nh/release-1.0.0
dqbd/fs-store
hunter/v1
dqbd/js
cb/createAgent-migration
cb/repo-update
palash/add-built-in-toosl
palash/skip-tools
palash/add-interrupt-config
brace/bump-langgraph
open-swe/6f37e688-42f4-458b-a26a-9de18f1c5ab8
palash/post-model-hook
palash/add-local
palash/add-post-model-hook-interrupt
palash/final-touch-ups
palash/subagent-fix
palash/add-langgraph-server
palash/update-readme
palash/change-name-to-deepagents
palash/fix-anthropic-zod-import
brace/fixes
open-swe/8357536e-2207-4292-a24d-00ea431ed4d4
open-swe/9453f008-7578-458d-bb92-e729e9fca363
deepagents@1.11.1
deepagents-acp@0.1.20
deepagents@1.11.0
deepagents-acp@0.1.19
@langchain/node-vfs@0.2.1
deepagents@1.10.8
deepagents-acp@0.1.18
deepagents@1.10.7
deepagents-acp@0.1.17
deepagents@1.10.6
deepagents-acp@0.1.16
@langchain/quickjs@0.6.0
@langchain/modal@0.1.5
@langchain/daytona@0.2.1
deepagents@1.10.5
deepagents-acp@0.1.15
@langchain/quickjs@0.5.1
deepagents@1.10.4
deepagents-acp@0.1.14
@langchain/quickjs@0.5.0
@langchain/node-vfs@0.2.0
deepagents@1.10.2
deepagents-acp@0.1.12
deepagents@1.10.1
deepagents-acp@0.1.11
@langchain/quickjs@0.4.0
deepagents@1.10.0
deepagents-acp@0.1.10
@langchain/quickjs@0.3.0
deepagents@1.9.1
deepagents-acp@0.1.9
@langchain/quickjs@0.2.6
deepagents@1.9.0
deepagents-acp@0.1.8
@langchain/sandbox-standard-tests@1.0.0
@langchain/quickjs@0.2.5
@langchain/node-vfs@0.1.4
@langchain/modal@0.1.4
deepagents@1.9.0-alpha.1
deepagents-acp@0.1.8-alpha.0
@langchain/quickjs@0.2.5-alpha.0
@langchain/node-vfs@0.1.4-alpha.0
@langchain/modal@0.1.4-alpha.0
@langchain/deno@0.2.2-alpha.0
@langchain/daytona@0.2.0-alpha.0
deepagents@1.8.8
deepagents-acp@0.1.7
@langchain/quickjs@0.2.4
deepagents@1.8.7
deepagents-acp@0.1.6
@langchain/quickjs@0.2.3
@langchain/daytona@0.2.0
deepagents@1.8.6
deepagents-acp@0.1.5
@langchain/quickjs@0.2.2
@langchain/deno@0.2.2
deepagents@1.9.0-alpha.0
deepagents-acp@0.1.5-alpha.0
@langchain/sandbox-standard-tests@1.0.0-alpha.0
@langchain/quickjs@1.0.0-alpha.0
@langchain/node-vfs@1.0.0-alpha.0
@langchain/modal@1.0.0-alpha.0
@langchain/deno@1.0.0-alpha.0
@langchain/daytona@1.0.0-alpha.0
deepagents@1.8.5
deepagents-acp@0.1.4
@langchain/quickjs@0.2.1
@langchain/node-vfs@0.1.3
deepagents@1.8.3
deepagents-acp@0.1.2
deepagents-acp@0.1.0
deepagents@1.8.1
@langchain/modal@0.1.3
deepagents@1.8.0
@langchain/sandbox-standard-tests@0.1.0
@langchain/node-vfs@0.1.2
@langchain/deno@0.2.1
@langchain/daytona@0.1.2
deepagents@1.7.6
deepagents@1.7.5
deepagents@1.7.4
@langchain/deno@0.2.0
@langchain/deno@0.1.2
deepagents@1.7.3
deepagents@1.7.2
@langchain/modal@0.1.2
deepagents@1.7.1
@langchain/node-vfs@0.1.1
@langchain/modal@0.1.1
@langchain/deno@0.1.1
@langchain/daytona@0.1.1
deepagents@1.7.0
@langchain/node-vfs@0.1.0
@langchain/modal@0.1.0
@langchain/deno@0.1.0
@langchain/daytona@0.1.0
deepagents@1.6.3
deepagents@1.6.2
deepagents@1.6.1
deepagents@1.6.0
deepagents@1.5.1
deepagents@1.5.0
deepagents@1.4.2
deepagents@1.4.1
deepagents@1.4.0
v1.3.1
v1.3.0
v1.2.0
v1.1.1
v1.1.0
No Label
pull-request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: langchain-ai/deepagentsjs#166
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/langchain-ai/deepagentsjs/pull/158
Author: @hntrl
Created: 1/30/2026
Status: ❌ Closed
Base:
main← Head:hunter/batch-task📝 Commits (2)
c4f54fffeat: batch subagent spawning9ec6047format📊 Changes
7 files changed (+2117 additions, -52 deletions)
View changed files
📝
libs/deepagents/src/agent.ts(+3 -0)➕
libs/deepagents/src/middleware/__fixtures__/subagent_tasks.csv(+1001 -0)📝
libs/deepagents/src/middleware/fs.ts(+179 -10)📝
libs/deepagents/src/middleware/index.ts(+8 -1)📝
libs/deepagents/src/middleware/subagents.int.test.ts(+211 -0)➕
libs/deepagents/src/middleware/subagents.test.ts(+286 -0)📝
libs/deepagents/src/middleware/subagents.ts(+429 -41)📄 Description
This PR introduces a declarative mechanism for spawning large batches of subagent tasks (10-1000+) through shell scripts, bypassing the need for models to make repeated individual tool calls. Instead of relying on the LLM to call
taskN times (which is unreliable at scale), agents can now use a simplespawn_subagentbash command within theexecutetool to declare tasks that get executed in parallel with configurable concurrency.The Problem
When you have a CSV with 1000 tasks that need to be delegated to subagents, the current approach of having the model call the
tasktool 1000 times is:ToolMessageresponses would blow up the context windowDeclarative Batch Spawning
This PR introduces a new architecture where:
/batch_results/<timestamp>/Architecture Overview
Component Interaction
Key Design Decisions
1. Why
spawn_subagentInstead of a New Tool?We inject a bash function rather than creating a separate
batch_task_from_filetool because:jq,awk,cut, etc.)2. Why Synthetic Tool Call Injection?
The
wrapModelCallhook intercepts the model call and returns a syntheticAIMessagewith abatch_tasktool call. This approach:3. Why File-Based Results?
With 1000 tasks, individual results would explode the context window. Instead:
/batch_results/<timestamp>/results.jsonlfailures.jsonlfor easy inspection4. State Schema for Cross-Middleware Communication
The
pendingBatchTaskstate channel is defined in BOTHFilesystemMiddleware(which sets it) andSubAgentMiddleware(which reads it). This enables:executetool (in FilesystemMiddleware) to declare pending taskswrapModelCall(in SubAgentMiddleware) to intercept and trigger batch executionChanges
libs/deepagents/src/middleware/subagents.ts(+479 lines)New exports for marker parsing:
SUBAGENT_MARKER_PREFIX- Constant for marker detectionSubagentTask,ParseSubagentMarkersResult- Types for parsed tasksparseSubagentMarkers(),hasSubagentMarkers()- Parser functionsPendingBatchTask,BatchTaskResult,BatchTaskSummary- Batch execution typesNew batch execution infrastructure:
SubAgentStateSchema- DeclarespendingBatchTaskstate channelexecuteSingleTask()- Runs one subagent and captures resultexecuteBatchTasks()- Worker pool with configurable concurrencywriteBatchResults()- Persists results to filesystemcreateBatchTaskTool()- The batch_task tool definitionModified
createSubAgentMiddleware:backendoption for writing resultsbatchConcurrencyoption (default: 10)wrapModelCallhook for synthetic batch_task injectionbatch_tasktool when backend is providedRefactored
createTaskTool:libs/deepagents/src/middleware/fs.ts(+196 lines)New constants:
SPAWN_SUBAGENT_FUNCTION- Bash function injected into every commandEXECUTE_TOOL_DESCRIPTION_BASE- Base description without batch docsEXECUTE_BATCH_SPAWNING_DOCS- Documentation for spawn_subagent usageEXECUTE_TOOL_DESCRIPTION- Full description with batch supportNew state schema:
PendingBatchTaskSchema- Shared schema for pendingBatchTask channelpendingBatchTasktoFilesystemStateSchemaModified
createExecuteTool:SPAWN_SUBAGENT_FUNCTIONprefix to all commandsSUBAGENT_TASK:markers in outputCommandthat setspendingBatchTaskin stateNew helper:
formatExecuteOutput()- Formats command output with exit code/truncation infolibs/deepagents/src/agent.ts(+3 lines)backend: filesystemBackendtocreateSubAgentMiddlewarelibs/deepagents/src/middleware/index.ts(+9 lines)libs/deepagents/src/middleware/subagents.int.test.ts(+211 lines)New test describe block: "Batch Spawning Integration Tests"
should parse spawn_subagent markers from execute outputshould handle malformed markers gracefullyshould invoke batch_task tool when spawn_subagent markers are detected with createDeepAgentlibs/deepagents/src/middleware/__fixtures__/subagent_tasks.csv(new)Test fixture with 1000 sample tasks for batch testing.
Usage Examples
Basic CSV Processing
The model will generate something like:
Custom Concurrency
Specifying Subagent Types
Testing
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
[PR #158] feat: batch subagent spawningto [PR #158] [CLOSED] feat: batch subagent spawning