@illuma-ai/agents 1.4.0-alpha.6 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/cjs/agents/AgentContext.cjs +274 -67
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/enum.cjs +44 -13
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +182 -5
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +152 -1167
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/graphs/phases/memoryFlushPhase.cjs +1 -1
- package/dist/cjs/graphs/phases/memoryFlushPhase.cjs.map +1 -1
- package/dist/cjs/hooks/HookRegistry.cjs +162 -0
- package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
- package/dist/cjs/hooks/executeHooks.cjs +276 -0
- package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
- package/dist/cjs/hooks/matchers.cjs +256 -0
- package/dist/cjs/hooks/matchers.cjs.map +1 -0
- package/dist/cjs/hooks/types.cjs +27 -0
- package/dist/cjs/hooks/types.cjs.map +1 -0
- package/dist/cjs/langchain/google-common.cjs +3 -0
- package/dist/cjs/langchain/google-common.cjs.map +1 -0
- package/dist/cjs/langchain/index.cjs +86 -0
- package/dist/cjs/langchain/index.cjs.map +1 -0
- package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
- package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
- package/dist/cjs/langchain/messages/tool.cjs +3 -0
- package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
- package/dist/cjs/langchain/messages.cjs +51 -0
- package/dist/cjs/langchain/messages.cjs.map +1 -0
- package/dist/cjs/langchain/openai.cjs +3 -0
- package/dist/cjs/langchain/openai.cjs.map +1 -0
- package/dist/cjs/langchain/prompts.cjs +11 -0
- package/dist/cjs/langchain/prompts.cjs.map +1 -0
- package/dist/cjs/langchain/runnables.cjs +19 -0
- package/dist/cjs/langchain/runnables.cjs.map +1 -0
- package/dist/cjs/langchain/tools.cjs +23 -0
- package/dist/cjs/langchain/tools.cjs.map +1 -0
- package/dist/cjs/langchain/utils/env.cjs +11 -0
- package/dist/cjs/langchain/utils/env.cjs.map +1 -0
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
- package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
- package/dist/cjs/llm/bedrock/index.cjs +61 -33
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +1 -4
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +27 -10
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +178 -127
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/memory/citations.cjs +4 -4
- package/dist/cjs/memory/citations.cjs.map +1 -1
- package/dist/cjs/memory/constants.cjs +17 -17
- package/dist/cjs/memory/constants.cjs.map +1 -1
- package/dist/cjs/memory/mmr.cjs +1 -1
- package/dist/cjs/memory/mmr.cjs.map +1 -1
- package/dist/cjs/memory/paths.cjs +1 -1
- package/dist/cjs/memory/paths.cjs.map +1 -1
- package/dist/cjs/memory/recallTracking.cjs +3 -3
- package/dist/cjs/memory/recallTracking.cjs.map +1 -1
- package/dist/cjs/memory/temporalDecay.cjs +2 -2
- package/dist/cjs/memory/temporalDecay.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +89 -0
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs +156 -0
- package/dist/cjs/messages/contextPruning.cjs.map +1 -0
- package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
- package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
- package/dist/cjs/messages/format.cjs +144 -20
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +505 -4
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/run.cjs +141 -1
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/tools/BashExecutor.cjs +235 -0
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
- package/dist/cjs/tools/CodeExecutor.cjs +45 -47
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/ReadFile.cjs +44 -0
- package/dist/cjs/tools/ReadFile.cjs.map +1 -0
- package/dist/cjs/tools/SkillTool.cjs +51 -0
- package/dist/cjs/tools/SkillTool.cjs.map +1 -0
- package/dist/cjs/tools/SubagentTool.cjs +93 -0
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
- package/dist/cjs/tools/ToolNode.cjs +450 -24
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/memory/memoryAppendTool.cjs +1 -1
- package/dist/cjs/tools/memory/memoryAppendTool.cjs.map +1 -1
- package/dist/cjs/tools/memory/memoryGetTool.cjs +2 -2
- package/dist/cjs/tools/memory/memoryGetTool.cjs.map +1 -1
- package/dist/cjs/tools/memory/memorySearchTool.cjs +3 -3
- package/dist/cjs/tools/memory/memorySearchTool.cjs.map +1 -1
- package/dist/cjs/tools/memory/shared.cjs +1 -1
- package/dist/cjs/tools/memory/shared.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +11 -3
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
- package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
- package/dist/cjs/tools/search/tavily-search.cjs +372 -0
- package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
- package/dist/cjs/tools/search/tool.cjs +28 -4
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +10 -3
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/tools/skillCatalog.cjs +84 -0
- package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
- package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
- package/dist/cjs/types/agent-cache.cjs +54 -0
- package/dist/cjs/types/agent-cache.cjs.map +1 -0
- package/dist/cjs/types/graph.cjs.map +1 -1
- package/dist/cjs/utils/truncation.cjs +135 -0
- package/dist/cjs/utils/truncation.cjs.map +1 -0
- package/dist/esm/agents/AgentContext.mjs +274 -67
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/enum.mjs +44 -12
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +182 -5
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/graphs/phases/memoryFlushPhase.mjs +1 -1
- package/dist/esm/graphs/phases/memoryFlushPhase.mjs.map +1 -1
- package/dist/esm/hooks/HookRegistry.mjs +160 -0
- package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
- package/dist/esm/hooks/executeHooks.mjs +273 -0
- package/dist/esm/hooks/executeHooks.mjs.map +1 -0
- package/dist/esm/hooks/matchers.mjs +251 -0
- package/dist/esm/hooks/matchers.mjs.map +1 -0
- package/dist/esm/hooks/types.mjs +25 -0
- package/dist/esm/hooks/types.mjs.map +1 -0
- package/dist/esm/langchain/google-common.mjs +2 -0
- package/dist/esm/langchain/google-common.mjs.map +1 -0
- package/dist/esm/langchain/index.mjs +5 -0
- package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
- package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
- package/dist/esm/langchain/messages/tool.mjs +2 -0
- package/dist/esm/langchain/messages/tool.mjs.map +1 -0
- package/dist/esm/langchain/messages.mjs +2 -0
- package/dist/esm/langchain/messages.mjs.map +1 -0
- package/dist/esm/langchain/openai.mjs +2 -0
- package/dist/esm/langchain/openai.mjs.map +1 -0
- package/dist/esm/langchain/prompts.mjs +2 -0
- package/dist/esm/langchain/prompts.mjs.map +1 -0
- package/dist/esm/langchain/runnables.mjs +2 -0
- package/dist/esm/langchain/runnables.mjs.map +1 -0
- package/dist/esm/langchain/tools.mjs +2 -0
- package/dist/esm/langchain/tools.mjs.map +1 -0
- package/dist/esm/langchain/utils/env.mjs +2 -0
- package/dist/esm/langchain/utils/env.mjs.map +1 -0
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
- package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
- package/dist/esm/llm/bedrock/index.mjs +61 -34
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +1 -4
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +27 -10
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/main.mjs +21 -27
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/memory/citations.mjs +4 -4
- package/dist/esm/memory/citations.mjs.map +1 -1
- package/dist/esm/memory/constants.mjs +17 -17
- package/dist/esm/memory/constants.mjs.map +1 -1
- package/dist/esm/memory/mmr.mjs +1 -1
- package/dist/esm/memory/mmr.mjs.map +1 -1
- package/dist/esm/memory/paths.mjs +1 -1
- package/dist/esm/memory/paths.mjs.map +1 -1
- package/dist/esm/memory/recallTracking.mjs +3 -3
- package/dist/esm/memory/recallTracking.mjs.map +1 -1
- package/dist/esm/memory/temporalDecay.mjs +2 -2
- package/dist/esm/memory/temporalDecay.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +89 -0
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs +154 -0
- package/dist/esm/messages/contextPruning.mjs.map +1 -0
- package/dist/esm/messages/contextPruningSettings.mjs +50 -0
- package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
- package/dist/esm/messages/format.mjs +136 -12
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +504 -7
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/run.mjs +141 -1
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/tools/BashExecutor.mjs +227 -0
- package/dist/esm/tools/BashExecutor.mjs.map +1 -0
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
- package/dist/esm/tools/CodeExecutor.mjs +45 -48
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/ReadFile.mjs +39 -0
- package/dist/esm/tools/ReadFile.mjs.map +1 -0
- package/dist/esm/tools/SkillTool.mjs +46 -0
- package/dist/esm/tools/SkillTool.mjs.map +1 -0
- package/dist/esm/tools/SubagentTool.mjs +86 -0
- package/dist/esm/tools/SubagentTool.mjs.map +1 -0
- package/dist/esm/tools/ToolNode.mjs +452 -26
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/memory/memoryAppendTool.mjs +1 -1
- package/dist/esm/tools/memory/memoryAppendTool.mjs.map +1 -1
- package/dist/esm/tools/memory/memoryGetTool.mjs +2 -2
- package/dist/esm/tools/memory/memoryGetTool.mjs.map +1 -1
- package/dist/esm/tools/memory/memorySearchTool.mjs +3 -3
- package/dist/esm/tools/memory/memorySearchTool.mjs.map +1 -1
- package/dist/esm/tools/memory/shared.mjs +1 -1
- package/dist/esm/tools/memory/shared.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +11 -3
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
- package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
- package/dist/esm/tools/search/tavily-search.mjs +370 -0
- package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
- package/dist/esm/tools/search/tool.mjs +28 -4
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +10 -3
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/tools/skillCatalog.mjs +82 -0
- package/dist/esm/tools/skillCatalog.mjs.map +1 -0
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
- package/dist/esm/tools/toolOutputReferences.mjs +662 -0
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
- package/dist/esm/types/agent-cache.mjs +52 -0
- package/dist/esm/types/agent-cache.mjs.map +1 -0
- package/dist/esm/types/graph.mjs.map +1 -1
- package/dist/esm/utils/truncation.mjs +128 -0
- package/dist/esm/utils/truncation.mjs.map +1 -0
- package/dist/types/agents/AgentContext.d.ts +101 -8
- package/dist/types/common/enum.d.ts +39 -12
- package/dist/types/common/index.d.ts +0 -1
- package/dist/types/graphs/Graph.d.ts +43 -0
- package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
- package/dist/types/graphs/index.d.ts +0 -1
- package/dist/types/graphs/phases/memoryFlushPhase.d.ts +2 -2
- package/dist/types/hooks/HookRegistry.d.ts +56 -0
- package/dist/types/hooks/executeHooks.d.ts +79 -0
- package/dist/types/hooks/index.d.ts +6 -0
- package/dist/types/hooks/matchers.d.ts +95 -0
- package/dist/types/hooks/types.d.ts +320 -0
- package/dist/types/index.d.ts +9 -9
- package/dist/types/langchain/google-common.d.ts +1 -0
- package/dist/types/langchain/index.d.ts +8 -0
- package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
- package/dist/types/langchain/messages/tool.d.ts +1 -0
- package/dist/types/langchain/messages.d.ts +2 -0
- package/dist/types/langchain/openai.d.ts +1 -0
- package/dist/types/langchain/prompts.d.ts +1 -0
- package/dist/types/langchain/runnables.d.ts +2 -0
- package/dist/types/langchain/tools.d.ts +2 -0
- package/dist/types/langchain/utils/env.d.ts +1 -0
- package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
- package/dist/types/llm/bedrock/index.d.ts +54 -1
- package/dist/types/llm/openai/index.d.ts +1 -1
- package/dist/types/memory/citations.d.ts +4 -4
- package/dist/types/memory/constants.d.ts +17 -17
- package/dist/types/memory/mmr.d.ts +3 -3
- package/dist/types/memory/paths.d.ts +1 -1
- package/dist/types/memory/temporalDecay.d.ts +2 -2
- package/dist/types/memory/types.d.ts +3 -3
- package/dist/types/messages/contextPruning.d.ts +42 -0
- package/dist/types/messages/contextPruningSettings.d.ts +44 -0
- package/dist/types/messages/format.d.ts +9 -1
- package/dist/types/messages/index.d.ts +2 -0
- package/dist/types/messages/prune.d.ts +91 -1
- package/dist/types/run.d.ts +2 -0
- package/dist/types/tools/BashExecutor.d.ts +76 -0
- package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
- package/dist/types/tools/CodeExecutor.d.ts +8 -26
- package/dist/types/tools/ReadFile.d.ts +28 -0
- package/dist/types/tools/SkillTool.d.ts +40 -0
- package/dist/types/tools/SubagentTool.d.ts +36 -0
- package/dist/types/tools/ToolNode.d.ts +77 -5
- package/dist/types/tools/memory/shared.d.ts +1 -1
- package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
- package/dist/types/tools/search/tavily-search.d.ts +4 -0
- package/dist/types/tools/search/types.d.ts +99 -5
- package/dist/types/tools/search/utils.d.ts +2 -2
- package/dist/types/tools/skillCatalog.d.ts +19 -0
- package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
- package/dist/types/tools/subagent/index.d.ts +2 -0
- package/dist/types/tools/subagent/types.d.ts +84 -0
- package/dist/types/tools/toolOutputReferences.d.ts +236 -0
- package/dist/types/types/agent-cache.d.ts +71 -0
- package/dist/types/types/graph.d.ts +163 -22
- package/dist/types/types/index.d.ts +3 -0
- package/dist/types/types/messages.d.ts +26 -0
- package/dist/types/types/run.d.ts +22 -0
- package/dist/types/types/skill.d.ts +9 -0
- package/dist/types/types/tools.d.ts +111 -0
- package/dist/types/utils/index.d.ts +1 -3
- package/dist/types/utils/truncation.d.ts +70 -0
- package/package.json +57 -17
- package/src/agents/AgentContext.ts +321 -78
- package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
- package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +266 -0
- package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
- package/src/agents/__tests__/AgentContext.test.ts +632 -0
- package/src/common/__tests__/enum.test.ts +7 -17
- package/src/common/enum.ts +43 -12
- package/src/common/index.ts +0 -1
- package/src/graphs/Graph.ts +222 -2
- package/src/graphs/MultiAgentGraph.ts +154 -1466
- package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
- package/src/graphs/gapFeatures.test.ts +1 -1
- package/src/graphs/index.ts +0 -1
- package/src/graphs/phases/__tests__/memoryFlushPhase.test.ts +1 -1
- package/src/graphs/phases/memoryFlushPhase.ts +2 -2
- package/src/hooks/HookRegistry.ts +208 -0
- package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
- package/src/hooks/__tests__/compactHooks.test.ts +214 -0
- package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
- package/src/hooks/__tests__/integration.test.ts +337 -0
- package/src/hooks/__tests__/matchers.test.ts +238 -0
- package/src/hooks/__tests__/toolHooks.test.ts +665 -0
- package/src/hooks/executeHooks.ts +375 -0
- package/src/hooks/index.ts +57 -0
- package/src/hooks/matchers.ts +280 -0
- package/src/hooks/types.ts +404 -0
- package/src/index.ts +15 -24
- package/src/langchain/google-common.ts +1 -0
- package/src/langchain/index.ts +8 -0
- package/src/langchain/language_models/chat_models.ts +1 -0
- package/src/langchain/messages/tool.ts +5 -0
- package/src/langchain/messages.ts +21 -0
- package/src/langchain/openai.ts +1 -0
- package/src/langchain/prompts.ts +1 -0
- package/src/langchain/runnables.ts +7 -0
- package/src/langchain/tools.ts +8 -0
- package/src/langchain/utils/env.ts +1 -0
- package/src/llm/anthropic/utils/message_inputs.ts +10 -1
- package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
- package/src/llm/bedrock/cacheSupport.test.ts +99 -0
- package/src/llm/bedrock/cacheSupport.ts +53 -0
- package/src/llm/bedrock/index.ts +116 -41
- package/src/llm/openai/index.ts +2 -2
- package/src/llm/openai/utils/index.ts +31 -14
- package/src/memory/citations.ts +4 -4
- package/src/memory/constants.ts +17 -17
- package/src/memory/mmr.ts +3 -3
- package/src/memory/paths.ts +1 -1
- package/src/memory/recallTracking.ts +3 -3
- package/src/memory/temporalDecay.ts +2 -2
- package/src/memory/types.ts +3 -3
- package/src/messages/__tests__/contextPruning.test.ts +228 -0
- package/src/messages/cache.test.ts +62 -24
- package/src/messages/cache.ts +112 -0
- package/src/messages/contextPruning.ts +191 -0
- package/src/messages/contextPruningSettings.ts +90 -0
- package/src/messages/ensureThinkingBlock.test.ts +1 -1
- package/src/messages/format.ts +164 -12
- package/src/messages/formatAgentMessages.skills.test.ts +413 -0
- package/src/messages/formatAgentMessages.test.ts +1 -1
- package/src/messages/index.ts +2 -0
- package/src/messages/prune.ts +661 -4
- package/src/run.ts +155 -1
- package/src/scripts/multi-agent-chain.ts +2 -2
- package/src/scripts/multi-agent-document-review-chain.ts +2 -2
- package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
- package/src/scripts/multi-agent-parallel.ts +3 -3
- package/src/scripts/multi-agent-sequence.ts +3 -3
- package/src/scripts/multi-agent-subagent.ts +246 -0
- package/src/scripts/multi-agent-supervisor.ts +5 -5
- package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
- package/src/scripts/sequential-full-metadata-test.ts +2 -2
- package/src/scripts/subagent-event-driven-debug.ts +190 -0
- package/src/scripts/subagent-tools-debug.ts +160 -0
- package/src/scripts/test-custom-prompt-key.ts +3 -3
- package/src/scripts/test-handoff-input.ts +1 -1
- package/src/scripts/test-handoff-steering.ts +3 -3
- package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
- package/src/scripts/test-parallel-agent-labeling.ts +3 -3
- package/src/scripts/test-parallel-handoffs.ts +2 -2
- package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
- package/src/scripts/test-thinking-handoff.ts +1 -1
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
- package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
- package/src/scripts/test-tools-before-handoff.ts +1 -1
- package/src/specs/agent-handoffs.test.ts +26 -483
- package/src/specs/anthropic.simple.test.ts +61 -0
- package/src/specs/multi-agent-summarization.test.ts +396 -0
- package/src/specs/prune.orphans.test.ts +248 -0
- package/src/specs/prune.test.ts +104 -16
- package/src/specs/thinking-handoff.test.ts +19 -19
- package/src/tools/BashExecutor.ts +281 -0
- package/src/tools/BashProgrammaticToolCalling.ts +397 -0
- package/src/tools/CodeExecutor.ts +63 -54
- package/src/tools/ProgrammaticToolCalling.ts +29 -14
- package/src/tools/ReadFile.ts +39 -0
- package/src/tools/SkillTool.ts +46 -0
- package/src/tools/SubagentTool.ts +100 -0
- package/src/tools/ToolNode.ts +548 -26
- package/src/tools/__tests__/BashExecutor.test.ts +49 -0
- package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
- package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
- package/src/tools/__tests__/ReadFile.test.ts +44 -0
- package/src/tools/__tests__/SkillTool.test.ts +442 -0
- package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
- package/src/tools/__tests__/SubagentTool.test.ts +149 -0
- package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
- package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
- package/src/tools/__tests__/skillCatalog.test.ts +161 -0
- package/src/tools/__tests__/subagentHooks.test.ts +210 -0
- package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
- package/src/tools/memory/memoryAppendTool.ts +1 -1
- package/src/tools/memory/memoryGetTool.ts +2 -2
- package/src/tools/memory/memorySearchTool.ts +3 -3
- package/src/tools/memory/shared.ts +1 -1
- package/src/tools/search/search.ts +12 -2
- package/src/tools/search/tavily-scraper.ts +235 -0
- package/src/tools/search/tavily-search.ts +424 -0
- package/src/tools/search/tavily.test.ts +965 -0
- package/src/tools/search/tool.ts +36 -2
- package/src/tools/search/types.ts +133 -8
- package/src/tools/search/utils.ts +13 -5
- package/src/tools/skillCatalog.ts +126 -0
- package/src/tools/subagent/SubagentExecutor.ts +676 -0
- package/src/tools/subagent/index.ts +13 -0
- package/src/tools/subagent/types.test.ts +70 -0
- package/src/tools/subagent/types.ts +115 -0
- package/src/tools/toolOutputReferences.ts +825 -0
- package/src/types/agent-cache.ts +74 -0
- package/src/types/graph.ts +172 -20
- package/src/types/index.ts +3 -0
- package/src/types/messages.ts +27 -0
- package/src/types/run.ts +22 -0
- package/src/types/skill.ts +11 -0
- package/src/types/tools.ts +118 -0
- package/src/utils/__tests__/truncation.test.ts +66 -0
- package/src/utils/index.ts +1 -3
- package/src/utils/truncation.ts +154 -0
- package/dist/cjs/common/spawnPath.cjs +0 -104
- package/dist/cjs/common/spawnPath.cjs.map +0 -1
- package/dist/cjs/content/ArtifactStore.cjs +0 -579
- package/dist/cjs/content/ArtifactStore.cjs.map +0 -1
- package/dist/cjs/content/ContentStore.cjs +0 -638
- package/dist/cjs/content/ContentStore.cjs.map +0 -1
- package/dist/cjs/content/contentAnalyzer.cjs +0 -91
- package/dist/cjs/content/contentAnalyzer.cjs.map +0 -1
- package/dist/cjs/content/index.cjs +0 -20
- package/dist/cjs/content/index.cjs.map +0 -1
- package/dist/cjs/content/mcpAutoCache.cjs +0 -115
- package/dist/cjs/content/mcpAutoCache.cjs.map +0 -1
- package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
- package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
- package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
- package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
- package/dist/cjs/providers/a2a/client.cjs +0 -92
- package/dist/cjs/providers/a2a/client.cjs.map +0 -1
- package/dist/cjs/providers/a2a/config.cjs +0 -38
- package/dist/cjs/providers/a2a/config.cjs.map +0 -1
- package/dist/cjs/providers/capabilityNaming.cjs +0 -43
- package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
- package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
- package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
- package/dist/cjs/providers/mcp/config.cjs +0 -42
- package/dist/cjs/providers/mcp/config.cjs.map +0 -1
- package/dist/cjs/providers/mcp/transport.cjs +0 -65
- package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
- package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
- package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
- package/dist/cjs/providers/types.cjs +0 -51
- package/dist/cjs/providers/types.cjs.map +0 -1
- package/dist/cjs/tools/artifacts/schema.cjs +0 -86
- package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
- package/dist/cjs/tools/artifacts/tool.cjs +0 -219
- package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
- package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
- package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
- package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
- package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
- package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
- package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
- package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
- package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
- package/dist/cjs/tools/proxyTool.cjs +0 -102
- package/dist/cjs/tools/proxyTool.cjs.map +0 -1
- package/dist/cjs/utils/childAgentContext.cjs +0 -242
- package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
- package/dist/cjs/utils/credentials.cjs +0 -142
- package/dist/cjs/utils/credentials.cjs.map +0 -1
- package/dist/cjs/utils/httpClient.cjs +0 -74
- package/dist/cjs/utils/httpClient.cjs.map +0 -1
- package/dist/cjs/utils/toolManifest.cjs +0 -100
- package/dist/cjs/utils/toolManifest.cjs.map +0 -1
- package/dist/esm/common/spawnPath.mjs +0 -95
- package/dist/esm/common/spawnPath.mjs.map +0 -1
- package/dist/esm/content/ArtifactStore.mjs +0 -576
- package/dist/esm/content/ArtifactStore.mjs.map +0 -1
- package/dist/esm/content/ContentStore.mjs +0 -635
- package/dist/esm/content/ContentStore.mjs.map +0 -1
- package/dist/esm/content/contentAnalyzer.mjs +0 -87
- package/dist/esm/content/contentAnalyzer.mjs.map +0 -1
- package/dist/esm/content/index.mjs +0 -5
- package/dist/esm/content/mcpAutoCache.mjs +0 -111
- package/dist/esm/content/mcpAutoCache.mjs.map +0 -1
- package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
- package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
- package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
- package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
- package/dist/esm/providers/a2a/client.mjs +0 -88
- package/dist/esm/providers/a2a/client.mjs.map +0 -1
- package/dist/esm/providers/a2a/config.mjs +0 -35
- package/dist/esm/providers/a2a/config.mjs.map +0 -1
- package/dist/esm/providers/capabilityNaming.mjs +0 -39
- package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
- package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
- package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
- package/dist/esm/providers/mcp/config.mjs +0 -39
- package/dist/esm/providers/mcp/config.mjs.map +0 -1
- package/dist/esm/providers/mcp/transport.mjs +0 -63
- package/dist/esm/providers/mcp/transport.mjs.map +0 -1
- package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
- package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
- package/dist/esm/providers/types.mjs +0 -51
- package/dist/esm/providers/types.mjs.map +0 -1
- package/dist/esm/tools/artifacts/schema.mjs +0 -79
- package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
- package/dist/esm/tools/artifacts/tool.mjs +0 -213
- package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
- package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
- package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
- package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
- package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
- package/dist/esm/tools/fileSearch/schema.mjs +0 -15
- package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
- package/dist/esm/tools/fileSearch/tool.mjs +0 -152
- package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
- package/dist/esm/tools/proxyTool.mjs +0 -100
- package/dist/esm/tools/proxyTool.mjs.map +0 -1
- package/dist/esm/utils/childAgentContext.mjs +0 -237
- package/dist/esm/utils/childAgentContext.mjs.map +0 -1
- package/dist/esm/utils/credentials.mjs +0 -135
- package/dist/esm/utils/credentials.mjs.map +0 -1
- package/dist/esm/utils/httpClient.mjs +0 -70
- package/dist/esm/utils/httpClient.mjs.map +0 -1
- package/dist/esm/utils/toolManifest.mjs +0 -96
- package/dist/esm/utils/toolManifest.mjs.map +0 -1
- package/dist/types/common/spawnPath.d.ts +0 -59
- package/dist/types/content/ArtifactStore.d.ts +0 -223
- package/dist/types/content/ContentStore.d.ts +0 -140
- package/dist/types/content/contentAnalyzer.d.ts +0 -38
- package/dist/types/content/index.d.ts +0 -24
- package/dist/types/content/mcpAutoCache.d.ts +0 -89
- package/dist/types/content/types.d.ts +0 -75
- package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
- package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
- package/dist/types/providers/a2a/client.d.ts +0 -47
- package/dist/types/providers/a2a/config.d.ts +0 -18
- package/dist/types/providers/a2a/index.d.ts +0 -6
- package/dist/types/providers/a2a/types.d.ts +0 -173
- package/dist/types/providers/capabilityNaming.d.ts +0 -25
- package/dist/types/providers/index.d.ts +0 -12
- package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
- package/dist/types/providers/mcp/config.d.ts +0 -20
- package/dist/types/providers/mcp/index.d.ts +0 -5
- package/dist/types/providers/mcp/transport.d.ts +0 -18
- package/dist/types/providers/mcp/types.d.ts +0 -112
- package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
- package/dist/types/providers/tools-server/index.d.ts +0 -1
- package/dist/types/providers/types.d.ts +0 -184
- package/dist/types/tools/artifacts/index.d.ts +0 -3
- package/dist/types/tools/artifacts/schema.d.ts +0 -63
- package/dist/types/tools/artifacts/tool.d.ts +0 -16
- package/dist/types/tools/artifacts/types.d.ts +0 -127
- package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
- package/dist/types/tools/fileSearch/index.d.ts +0 -5
- package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
- package/dist/types/tools/fileSearch/schema.d.ts +0 -13
- package/dist/types/tools/fileSearch/tool.d.ts +0 -18
- package/dist/types/tools/fileSearch/types.d.ts +0 -139
- package/dist/types/tools/proxyTool.d.ts +0 -62
- package/dist/types/tools/search/test.d.ts +0 -1
- package/dist/types/utils/childAgentContext.d.ts +0 -99
- package/dist/types/utils/credentials.d.ts +0 -77
- package/dist/types/utils/httpClient.d.ts +0 -46
- package/dist/types/utils/toolManifest.d.ts +0 -49
- package/src/common/__tests__/spawnPath.test.ts +0 -110
- package/src/common/spawnPath.ts +0 -101
- package/src/content/ArtifactStore.ts +0 -782
- package/src/content/ContentStore.ts +0 -753
- package/src/content/contentAnalyzer.ts +0 -105
- package/src/content/index.ts +0 -51
- package/src/content/mcpAutoCache.ts +0 -185
- package/src/content/types.ts +0 -82
- package/src/graphs/HandoffRegistry.ts +0 -199
- package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
- package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
- package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
- package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
- package/src/graphs/handoffValidation.test.ts +0 -353
- package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
- package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -271
- package/src/providers/__tests__/types.test.ts +0 -64
- package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
- package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
- package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
- package/src/providers/a2a/client.ts +0 -115
- package/src/providers/a2a/config.ts +0 -40
- package/src/providers/a2a/index.ts +0 -29
- package/src/providers/a2a/types.ts +0 -191
- package/src/providers/capabilityNaming.ts +0 -42
- package/src/providers/index.ts +0 -68
- package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
- package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
- package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
- package/src/providers/mcp/config.ts +0 -45
- package/src/providers/mcp/index.ts +0 -21
- package/src/providers/mcp/transport.ts +0 -76
- package/src/providers/mcp/types.ts +0 -139
- package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -249
- package/src/providers/tools-server/index.ts +0 -1
- package/src/providers/types.ts +0 -204
- package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
- package/src/scripts/test-handoff-preamble.ts +0 -278
- package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
- package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
- package/src/tools/artifacts/index.ts +0 -33
- package/src/tools/artifacts/schema.ts +0 -99
- package/src/tools/artifacts/tool.ts +0 -289
- package/src/tools/artifacts/types.ts +0 -162
- package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
- package/src/tools/fileSearch/formatter.ts +0 -129
- package/src/tools/fileSearch/index.ts +0 -23
- package/src/tools/fileSearch/ragClient.ts +0 -137
- package/src/tools/fileSearch/schema.ts +0 -19
- package/src/tools/fileSearch/tool.ts +0 -207
- package/src/tools/fileSearch/types.ts +0 -149
- package/src/tools/proxyTool.ts +0 -166
- package/src/tools/search/output.md +0 -2775
- package/src/tools/search/test.html +0 -884
- package/src/tools/search/test.md +0 -643
- package/src/tools/search/test.ts +0 -159
- package/src/utils/__tests__/childAgentContext.test.ts +0 -217
- package/src/utils/__tests__/credentials.test.ts +0 -130
- package/src/utils/__tests__/httpClient.test.ts +0 -75
- package/src/utils/__tests__/toolManifest.test.ts +0 -116
- package/src/utils/childAgentContext.ts +0 -259
- package/src/utils/credentials.ts +0 -157
- package/src/utils/httpClient.ts +0 -92
- package/src/utils/toolManifest.ts +0 -109
- /package/dist/esm/{content → langchain}/index.mjs.map +0 -0
|
@@ -94,7 +94,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
94
94
|
{
|
|
95
95
|
from: 'agent_a',
|
|
96
96
|
to: 'agent_b',
|
|
97
|
-
edgeType: EdgeType.
|
|
97
|
+
edgeType: EdgeType.HANDOFF,
|
|
98
98
|
description: 'Transfer to agent B',
|
|
99
99
|
},
|
|
100
100
|
];
|
|
@@ -128,7 +128,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
128
128
|
{
|
|
129
129
|
from: 'agent_a',
|
|
130
130
|
to: 'agent_b',
|
|
131
|
-
edgeType: EdgeType.
|
|
131
|
+
edgeType: EdgeType.HANDOFF,
|
|
132
132
|
description: 'Transfer to agent B when needed',
|
|
133
133
|
},
|
|
134
134
|
];
|
|
@@ -192,7 +192,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
192
192
|
{
|
|
193
193
|
from: 'agent_a',
|
|
194
194
|
to: 'agent_b',
|
|
195
|
-
edgeType: EdgeType.
|
|
195
|
+
edgeType: EdgeType.HANDOFF,
|
|
196
196
|
},
|
|
197
197
|
];
|
|
198
198
|
|
|
@@ -223,13 +223,13 @@ describe('Agent Handoffs Tests', () => {
|
|
|
223
223
|
{
|
|
224
224
|
from: 'agent_a',
|
|
225
225
|
to: 'agent_b',
|
|
226
|
-
edgeType: EdgeType.
|
|
226
|
+
edgeType: EdgeType.HANDOFF,
|
|
227
227
|
description: 'Transfer to agent B',
|
|
228
228
|
},
|
|
229
229
|
{
|
|
230
230
|
from: 'agent_b',
|
|
231
231
|
to: 'agent_a',
|
|
232
|
-
edgeType: EdgeType.
|
|
232
|
+
edgeType: EdgeType.HANDOFF,
|
|
233
233
|
description: 'Transfer to agent A',
|
|
234
234
|
},
|
|
235
235
|
];
|
|
@@ -268,12 +268,12 @@ describe('Agent Handoffs Tests', () => {
|
|
|
268
268
|
{
|
|
269
269
|
from: 'agent_a',
|
|
270
270
|
to: 'agent_b',
|
|
271
|
-
edgeType: EdgeType.
|
|
271
|
+
edgeType: EdgeType.HANDOFF,
|
|
272
272
|
},
|
|
273
273
|
{
|
|
274
274
|
from: 'agent_b',
|
|
275
275
|
to: 'agent_a',
|
|
276
|
-
edgeType: EdgeType.
|
|
276
|
+
edgeType: EdgeType.HANDOFF,
|
|
277
277
|
},
|
|
278
278
|
];
|
|
279
279
|
|
|
@@ -334,13 +334,13 @@ describe('Agent Handoffs Tests', () => {
|
|
|
334
334
|
{
|
|
335
335
|
from: 'agent_a',
|
|
336
336
|
to: 'agent_b',
|
|
337
|
-
edgeType: EdgeType.
|
|
337
|
+
edgeType: EdgeType.HANDOFF,
|
|
338
338
|
description: 'Transfer to agent B',
|
|
339
339
|
},
|
|
340
340
|
{
|
|
341
341
|
from: 'agent_b',
|
|
342
342
|
to: 'agent_c',
|
|
343
|
-
edgeType: EdgeType.
|
|
343
|
+
edgeType: EdgeType.HANDOFF,
|
|
344
344
|
description: 'Transfer to agent C',
|
|
345
345
|
},
|
|
346
346
|
];
|
|
@@ -395,19 +395,19 @@ describe('Agent Handoffs Tests', () => {
|
|
|
395
395
|
{
|
|
396
396
|
from: 'router',
|
|
397
397
|
to: 'agent_a',
|
|
398
|
-
edgeType: EdgeType.
|
|
398
|
+
edgeType: EdgeType.HANDOFF,
|
|
399
399
|
description: 'Transfer to agent A for task A',
|
|
400
400
|
},
|
|
401
401
|
{
|
|
402
402
|
from: 'router',
|
|
403
403
|
to: 'agent_b',
|
|
404
|
-
edgeType: EdgeType.
|
|
404
|
+
edgeType: EdgeType.HANDOFF,
|
|
405
405
|
description: 'Transfer to agent B for task B',
|
|
406
406
|
},
|
|
407
407
|
{
|
|
408
408
|
from: 'router',
|
|
409
409
|
to: 'agent_c',
|
|
410
|
-
edgeType: EdgeType.
|
|
410
|
+
edgeType: EdgeType.HANDOFF,
|
|
411
411
|
description: 'Transfer to agent C for task C',
|
|
412
412
|
},
|
|
413
413
|
];
|
|
@@ -449,13 +449,13 @@ describe('Agent Handoffs Tests', () => {
|
|
|
449
449
|
{
|
|
450
450
|
from: 'router',
|
|
451
451
|
to: 'agent_a',
|
|
452
|
-
edgeType: EdgeType.
|
|
452
|
+
edgeType: EdgeType.HANDOFF,
|
|
453
453
|
description: 'Transfer to agent A',
|
|
454
454
|
},
|
|
455
455
|
{
|
|
456
456
|
from: 'router',
|
|
457
457
|
to: 'agent_b',
|
|
458
|
-
edgeType: EdgeType.
|
|
458
|
+
edgeType: EdgeType.HANDOFF,
|
|
459
459
|
description: 'Transfer to agent B',
|
|
460
460
|
},
|
|
461
461
|
];
|
|
@@ -519,7 +519,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
519
519
|
{
|
|
520
520
|
from: 'agent_a',
|
|
521
521
|
to: 'agent_b',
|
|
522
|
-
edgeType: EdgeType.
|
|
522
|
+
edgeType: EdgeType.HANDOFF,
|
|
523
523
|
description: 'Transfer to agent B with instructions',
|
|
524
524
|
prompt: 'Provide specific instructions for agent B',
|
|
525
525
|
promptKey: 'instructions',
|
|
@@ -551,7 +551,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
551
551
|
{
|
|
552
552
|
from: 'agent_a',
|
|
553
553
|
to: 'agent_b',
|
|
554
|
-
edgeType: EdgeType.
|
|
554
|
+
edgeType: EdgeType.HANDOFF,
|
|
555
555
|
prompt: 'Instructions for handoff',
|
|
556
556
|
// promptKey not specified, should default to 'instructions'
|
|
557
557
|
},
|
|
@@ -581,7 +581,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
581
581
|
{
|
|
582
582
|
from: 'agent_a',
|
|
583
583
|
to: 'agent_b',
|
|
584
|
-
edgeType: EdgeType.
|
|
584
|
+
edgeType: EdgeType.HANDOFF,
|
|
585
585
|
description: 'Transfer to agent B',
|
|
586
586
|
prompt: 'Additional context for agent B',
|
|
587
587
|
promptKey: 'context',
|
|
@@ -638,7 +638,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
638
638
|
{
|
|
639
639
|
from: 'agent_a',
|
|
640
640
|
to: 'agent_a',
|
|
641
|
-
edgeType: EdgeType.
|
|
641
|
+
edgeType: EdgeType.HANDOFF,
|
|
642
642
|
description: 'Self-handoff (should be allowed but unusual)',
|
|
643
643
|
},
|
|
644
644
|
];
|
|
@@ -724,7 +724,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
724
724
|
{
|
|
725
725
|
from: 'agent_a',
|
|
726
726
|
to: 'agent_b',
|
|
727
|
-
edgeType: EdgeType.
|
|
727
|
+
edgeType: EdgeType.HANDOFF,
|
|
728
728
|
description: 'Transfer to agent B',
|
|
729
729
|
},
|
|
730
730
|
];
|
|
@@ -759,12 +759,12 @@ describe('Agent Handoffs Tests', () => {
|
|
|
759
759
|
{
|
|
760
760
|
from: 'agent_a',
|
|
761
761
|
to: 'agent_b',
|
|
762
|
-
edgeType: EdgeType.
|
|
762
|
+
edgeType: EdgeType.HANDOFF,
|
|
763
763
|
},
|
|
764
764
|
{
|
|
765
765
|
from: 'agent_b',
|
|
766
766
|
to: 'agent_c',
|
|
767
|
-
edgeType: EdgeType.
|
|
767
|
+
edgeType: EdgeType.HANDOFF,
|
|
768
768
|
},
|
|
769
769
|
];
|
|
770
770
|
|
|
@@ -806,12 +806,12 @@ describe('Agent Handoffs Tests', () => {
|
|
|
806
806
|
{
|
|
807
807
|
from: 'agent_a',
|
|
808
808
|
to: 'agent_c',
|
|
809
|
-
edgeType: EdgeType.
|
|
809
|
+
edgeType: EdgeType.HANDOFF,
|
|
810
810
|
},
|
|
811
811
|
{
|
|
812
812
|
from: 'agent_b',
|
|
813
813
|
to: 'agent_c',
|
|
814
|
-
edgeType: EdgeType.
|
|
814
|
+
edgeType: EdgeType.HANDOFF,
|
|
815
815
|
},
|
|
816
816
|
];
|
|
817
817
|
|
|
@@ -853,7 +853,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
853
853
|
{
|
|
854
854
|
from: 'router',
|
|
855
855
|
to: 'data_analyst',
|
|
856
|
-
edgeType: EdgeType.
|
|
856
|
+
edgeType: EdgeType.HANDOFF,
|
|
857
857
|
description: 'Transfer to data analyst',
|
|
858
858
|
prompt: 'Instructions for the analyst about what to analyze',
|
|
859
859
|
promptKey: 'instructions',
|
|
@@ -939,7 +939,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
939
939
|
{
|
|
940
940
|
from: 'flight_assistant',
|
|
941
941
|
to: 'hotel_assistant',
|
|
942
|
-
edgeType: EdgeType.
|
|
942
|
+
edgeType: EdgeType.HANDOFF,
|
|
943
943
|
description: 'Transfer to hotel booking',
|
|
944
944
|
},
|
|
945
945
|
];
|
|
@@ -970,7 +970,7 @@ describe('Agent Handoffs Tests', () => {
|
|
|
970
970
|
{
|
|
971
971
|
from: 'agent_with_underscores',
|
|
972
972
|
to: 'AgentWithCamelCase',
|
|
973
|
-
edgeType: EdgeType.
|
|
973
|
+
edgeType: EdgeType.HANDOFF,
|
|
974
974
|
},
|
|
975
975
|
];
|
|
976
976
|
|
|
@@ -990,461 +990,4 @@ describe('Agent Handoffs Tests', () => {
|
|
|
990
990
|
);
|
|
991
991
|
});
|
|
992
992
|
});
|
|
993
|
-
|
|
994
|
-
describe('Handoff Tool Description Enrichment', () => {
|
|
995
|
-
it('should use agent name and description when edge.description is not provided', async () => {
|
|
996
|
-
const agents: t.AgentInputs[] = [
|
|
997
|
-
createBasicAgent('supervisor', 'You are a supervisor'),
|
|
998
|
-
{
|
|
999
|
-
...createBasicAgent('data_analyst', 'You analyze data'),
|
|
1000
|
-
name: 'Data Analyst',
|
|
1001
|
-
description:
|
|
1002
|
-
'Analyzes datasets, creates charts, and provides statistical insights',
|
|
1003
|
-
},
|
|
1004
|
-
];
|
|
1005
|
-
|
|
1006
|
-
const edges: t.GraphEdge[] = [
|
|
1007
|
-
{
|
|
1008
|
-
from: 'supervisor',
|
|
1009
|
-
to: 'data_analyst',
|
|
1010
|
-
edgeType: EdgeType.TRANSFER,
|
|
1011
|
-
// No description provided - should auto-generate from agent name + description
|
|
1012
|
-
},
|
|
1013
|
-
];
|
|
1014
|
-
|
|
1015
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1016
|
-
|
|
1017
|
-
const supervisorContext = (run.Graph as StandardGraph).agentContexts.get(
|
|
1018
|
-
'supervisor'
|
|
1019
|
-
);
|
|
1020
|
-
const handoffTool = findToolByName(
|
|
1021
|
-
supervisorContext?.graphTools,
|
|
1022
|
-
`${Constants.LC_TRANSFER_TO_}data_analyst`
|
|
1023
|
-
);
|
|
1024
|
-
|
|
1025
|
-
expect(handoffTool).toBeDefined();
|
|
1026
|
-
const description = getToolDescription(handoffTool!);
|
|
1027
|
-
expect(description).toContain('Data Analyst');
|
|
1028
|
-
expect(description).toContain('Analyzes datasets');
|
|
1029
|
-
});
|
|
1030
|
-
|
|
1031
|
-
it('should use agent name without description when only name is available', async () => {
|
|
1032
|
-
const agents: t.AgentInputs[] = [
|
|
1033
|
-
createBasicAgent('supervisor', 'You are a supervisor'),
|
|
1034
|
-
{
|
|
1035
|
-
...createBasicAgent('writer', 'You write things'),
|
|
1036
|
-
name: 'Content Writer',
|
|
1037
|
-
// No description field
|
|
1038
|
-
},
|
|
1039
|
-
];
|
|
1040
|
-
|
|
1041
|
-
const edges: t.GraphEdge[] = [
|
|
1042
|
-
{
|
|
1043
|
-
from: 'supervisor',
|
|
1044
|
-
to: 'writer',
|
|
1045
|
-
edgeType: EdgeType.TRANSFER,
|
|
1046
|
-
},
|
|
1047
|
-
];
|
|
1048
|
-
|
|
1049
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1050
|
-
|
|
1051
|
-
const supervisorContext = (run.Graph as StandardGraph).agentContexts.get(
|
|
1052
|
-
'supervisor'
|
|
1053
|
-
);
|
|
1054
|
-
const handoffTool = findToolByName(
|
|
1055
|
-
supervisorContext?.graphTools,
|
|
1056
|
-
`${Constants.LC_TRANSFER_TO_}writer`
|
|
1057
|
-
);
|
|
1058
|
-
|
|
1059
|
-
expect(handoffTool).toBeDefined();
|
|
1060
|
-
const description = getToolDescription(handoffTool!);
|
|
1061
|
-
expect(description).toContain('Content Writer');
|
|
1062
|
-
});
|
|
1063
|
-
|
|
1064
|
-
it('should prefer explicit edge.description over auto-generated description', async () => {
|
|
1065
|
-
const agents: t.AgentInputs[] = [
|
|
1066
|
-
createBasicAgent('supervisor', 'You are a supervisor'),
|
|
1067
|
-
{
|
|
1068
|
-
...createBasicAgent('agent_b', 'You do things'),
|
|
1069
|
-
name: 'Agent B',
|
|
1070
|
-
description: 'This is agent B description',
|
|
1071
|
-
},
|
|
1072
|
-
];
|
|
1073
|
-
|
|
1074
|
-
const edges: t.GraphEdge[] = [
|
|
1075
|
-
{
|
|
1076
|
-
from: 'supervisor',
|
|
1077
|
-
to: 'agent_b',
|
|
1078
|
-
edgeType: EdgeType.TRANSFER,
|
|
1079
|
-
description: 'Custom handoff description that takes priority',
|
|
1080
|
-
},
|
|
1081
|
-
];
|
|
1082
|
-
|
|
1083
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1084
|
-
|
|
1085
|
-
const supervisorContext = (run.Graph as StandardGraph).agentContexts.get(
|
|
1086
|
-
'supervisor'
|
|
1087
|
-
);
|
|
1088
|
-
const handoffTool = findToolByName(
|
|
1089
|
-
supervisorContext?.graphTools,
|
|
1090
|
-
`${Constants.LC_TRANSFER_TO_}agent_b`
|
|
1091
|
-
);
|
|
1092
|
-
|
|
1093
|
-
expect(handoffTool).toBeDefined();
|
|
1094
|
-
const description = getToolDescription(handoffTool!);
|
|
1095
|
-
expect(description).toBe(
|
|
1096
|
-
'Custom handoff description that takes priority'
|
|
1097
|
-
);
|
|
1098
|
-
});
|
|
1099
|
-
|
|
1100
|
-
it('should generate meaningful descriptions for multiple handoff targets', async () => {
|
|
1101
|
-
const agents: t.AgentInputs[] = [
|
|
1102
|
-
createBasicAgent('router', 'You route requests'),
|
|
1103
|
-
{
|
|
1104
|
-
...createBasicAgent('sales', 'Handle sales'),
|
|
1105
|
-
name: 'Sales Agent',
|
|
1106
|
-
description: 'Handles product pricing, quotes, and purchase orders',
|
|
1107
|
-
},
|
|
1108
|
-
{
|
|
1109
|
-
...createBasicAgent('support', 'Handle support'),
|
|
1110
|
-
name: 'Support Agent',
|
|
1111
|
-
description: 'Troubleshoots technical issues and handles bug reports',
|
|
1112
|
-
},
|
|
1113
|
-
{
|
|
1114
|
-
...createBasicAgent('billing', 'Handle billing'),
|
|
1115
|
-
name: 'Billing Agent',
|
|
1116
|
-
description: 'Manages invoices, payments, and subscription changes',
|
|
1117
|
-
},
|
|
1118
|
-
];
|
|
1119
|
-
|
|
1120
|
-
const edges: t.GraphEdge[] = [
|
|
1121
|
-
{ from: 'router', to: 'sales', edgeType: EdgeType.TRANSFER },
|
|
1122
|
-
{ from: 'router', to: 'support', edgeType: EdgeType.TRANSFER },
|
|
1123
|
-
{ from: 'router', to: 'billing', edgeType: EdgeType.TRANSFER },
|
|
1124
|
-
];
|
|
1125
|
-
|
|
1126
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1127
|
-
|
|
1128
|
-
const routerContext = (run.Graph as StandardGraph).agentContexts.get(
|
|
1129
|
-
'router'
|
|
1130
|
-
);
|
|
1131
|
-
|
|
1132
|
-
const salesTool = findToolByName(
|
|
1133
|
-
routerContext?.graphTools,
|
|
1134
|
-
`${Constants.LC_TRANSFER_TO_}sales`
|
|
1135
|
-
);
|
|
1136
|
-
const supportTool = findToolByName(
|
|
1137
|
-
routerContext?.graphTools,
|
|
1138
|
-
`${Constants.LC_TRANSFER_TO_}support`
|
|
1139
|
-
);
|
|
1140
|
-
const billingTool = findToolByName(
|
|
1141
|
-
routerContext?.graphTools,
|
|
1142
|
-
`${Constants.LC_TRANSFER_TO_}billing`
|
|
1143
|
-
);
|
|
1144
|
-
|
|
1145
|
-
// Each tool should have a meaningful description from the target agent
|
|
1146
|
-
expect(getToolDescription(salesTool!)).toContain('pricing');
|
|
1147
|
-
expect(getToolDescription(supportTool!)).toContain('Troubleshoots');
|
|
1148
|
-
expect(getToolDescription(billingTool!)).toContain('invoices');
|
|
1149
|
-
});
|
|
1150
|
-
|
|
1151
|
-
it('should store description in AgentContext', async () => {
|
|
1152
|
-
const agents: t.AgentInputs[] = [
|
|
1153
|
-
{
|
|
1154
|
-
...createBasicAgent('agent_a', 'Instructions for A'),
|
|
1155
|
-
name: 'Agent Alpha',
|
|
1156
|
-
description: 'Handles alpha tasks',
|
|
1157
|
-
},
|
|
1158
|
-
];
|
|
1159
|
-
|
|
1160
|
-
const edges: t.GraphEdge[] = [];
|
|
1161
|
-
|
|
1162
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1163
|
-
|
|
1164
|
-
const context = (run.Graph as StandardGraph).agentContexts.get('agent_a');
|
|
1165
|
-
expect(context).toBeDefined();
|
|
1166
|
-
expect(context?.name).toBe('Agent Alpha');
|
|
1167
|
-
expect(context?.description).toBe('Handles alpha tasks');
|
|
1168
|
-
});
|
|
1169
|
-
});
|
|
1170
|
-
|
|
1171
|
-
describe('Last Active Agent Tracking', () => {
|
|
1172
|
-
it('should return undefined for getLastActiveAgentId before any agent runs', async () => {
|
|
1173
|
-
const agents: t.AgentInputs[] = [
|
|
1174
|
-
createBasicAgent('agent_a', 'You are agent A'),
|
|
1175
|
-
createBasicAgent('agent_b', 'You are agent B'),
|
|
1176
|
-
];
|
|
1177
|
-
|
|
1178
|
-
const edges: t.GraphEdge[] = [
|
|
1179
|
-
{ from: 'agent_a', to: 'agent_b', edgeType: EdgeType.TRANSFER },
|
|
1180
|
-
];
|
|
1181
|
-
|
|
1182
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1183
|
-
|
|
1184
|
-
// Before running, lastActiveAgentId should be undefined
|
|
1185
|
-
expect(run.getLastActiveAgentId()).toBeUndefined();
|
|
1186
|
-
});
|
|
1187
|
-
|
|
1188
|
-
it('should return undefined for single-agent graph', async () => {
|
|
1189
|
-
const agents: t.AgentInputs[] = [
|
|
1190
|
-
createBasicAgent('agent_a', 'You are agent A'),
|
|
1191
|
-
];
|
|
1192
|
-
|
|
1193
|
-
const config: t.RunConfig = {
|
|
1194
|
-
runId: `single-agent-test-${Date.now()}`,
|
|
1195
|
-
graphConfig: {
|
|
1196
|
-
type: 'standard',
|
|
1197
|
-
agents,
|
|
1198
|
-
},
|
|
1199
|
-
returnContent: true,
|
|
1200
|
-
};
|
|
1201
|
-
|
|
1202
|
-
const run = await Run.create(config);
|
|
1203
|
-
|
|
1204
|
-
// Single-agent graph does not have getLastActiveAgentId
|
|
1205
|
-
expect(run.getLastActiveAgentId()).toBeUndefined();
|
|
1206
|
-
});
|
|
1207
|
-
|
|
1208
|
-
it('should track last active agent after handoff execution', async () => {
|
|
1209
|
-
const agents: t.AgentInputs[] = [
|
|
1210
|
-
createBasicAgent('agent_a', 'You are agent A. Transfer to B.'),
|
|
1211
|
-
createBasicAgent('agent_b', 'You are agent B.'),
|
|
1212
|
-
];
|
|
1213
|
-
|
|
1214
|
-
const edges: t.GraphEdge[] = [
|
|
1215
|
-
{
|
|
1216
|
-
from: 'agent_a',
|
|
1217
|
-
to: 'agent_b',
|
|
1218
|
-
edgeType: EdgeType.TRANSFER,
|
|
1219
|
-
description: 'Transfer to B',
|
|
1220
|
-
},
|
|
1221
|
-
];
|
|
1222
|
-
|
|
1223
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1224
|
-
|
|
1225
|
-
run.Graph?.overrideTestModel(['Transferring to B', 'Hello from B'], 10, [
|
|
1226
|
-
{
|
|
1227
|
-
id: 'tool_call_handoff',
|
|
1228
|
-
name: `${Constants.LC_TRANSFER_TO_}agent_b`,
|
|
1229
|
-
args: {},
|
|
1230
|
-
} as ToolCall,
|
|
1231
|
-
]);
|
|
1232
|
-
|
|
1233
|
-
const messages = [new HumanMessage('Hello')];
|
|
1234
|
-
const config: Partial<RunnableConfig> & {
|
|
1235
|
-
version: 'v1' | 'v2';
|
|
1236
|
-
streamMode: string;
|
|
1237
|
-
} = {
|
|
1238
|
-
configurable: { thread_id: 'last-active-test' },
|
|
1239
|
-
streamMode: 'values',
|
|
1240
|
-
version: 'v2' as const,
|
|
1241
|
-
};
|
|
1242
|
-
|
|
1243
|
-
await run.processStream({ messages }, config);
|
|
1244
|
-
|
|
1245
|
-
// After handoff A -> B, last active agent should be B
|
|
1246
|
-
expect(run.getLastActiveAgentId()).toBe('agent_b');
|
|
1247
|
-
});
|
|
1248
|
-
});
|
|
1249
|
-
|
|
1250
|
-
describe('Content Tool Compaction in Handoff', () => {
|
|
1251
|
-
it('should compact verbose content_tool ToolMessages during handoff', async () => {
|
|
1252
|
-
const agents: t.AgentInputs[] = [
|
|
1253
|
-
createBasicAgent('agent_a', 'You are agent A'),
|
|
1254
|
-
createBasicAgent('agent_b', 'You are agent B'),
|
|
1255
|
-
];
|
|
1256
|
-
|
|
1257
|
-
const edges: t.GraphEdge[] = [
|
|
1258
|
-
{ from: 'agent_a', to: 'agent_b', edgeType: EdgeType.TRANSFER },
|
|
1259
|
-
];
|
|
1260
|
-
|
|
1261
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1262
|
-
const { MultiAgentGraph } = await import('@/graphs/MultiAgentGraph');
|
|
1263
|
-
|
|
1264
|
-
if (run.Graph instanceof MultiAgentGraph) {
|
|
1265
|
-
// Build a mock message chain with a verbose content_tool ToolMessage
|
|
1266
|
-
const _verboseReadOutput =
|
|
1267
|
-
'"Dashboard.tsx" (content_id: abc123)\nShowing lines 1-200 of 200 total.\n---\n' +
|
|
1268
|
-
Array.from(
|
|
1269
|
-
{ length: 200 },
|
|
1270
|
-
(_, i) => ` ${i + 1} | const x${i} = ${i};`
|
|
1271
|
-
).join('\n') +
|
|
1272
|
-
'\n---';
|
|
1273
|
-
|
|
1274
|
-
const _messages = [
|
|
1275
|
-
new HumanMessage('Read the file'),
|
|
1276
|
-
// Simulate AI calling content_tool then transfer
|
|
1277
|
-
// The processHandoffReception is private, so we test indirectly via the graph execution
|
|
1278
|
-
];
|
|
1279
|
-
|
|
1280
|
-
// Verify that a ToolMessage with content_tool name and > 500 chars would be compacted
|
|
1281
|
-
const longContent = 'x'.repeat(600);
|
|
1282
|
-
const toolMsg = new ToolMessage({
|
|
1283
|
-
content: `First line summary\n${longContent}`,
|
|
1284
|
-
name: 'content_tool',
|
|
1285
|
-
tool_call_id: 'test-tc-1',
|
|
1286
|
-
status: 'success',
|
|
1287
|
-
});
|
|
1288
|
-
|
|
1289
|
-
// The compaction logic truncates to first line + suffix
|
|
1290
|
-
const firstLine = `First line summary\n${longContent}`.split('\n')[0];
|
|
1291
|
-
expect(firstLine).toBe('First line summary');
|
|
1292
|
-
// ToolMessage content is > 500 chars so it should be compacted
|
|
1293
|
-
expect(toolMsg.content.length).toBeGreaterThan(500);
|
|
1294
|
-
}
|
|
1295
|
-
});
|
|
1296
|
-
});
|
|
1297
|
-
|
|
1298
|
-
describe('Multi-Turn Agent Resumption', () => {
|
|
1299
|
-
it('should route START to resumeFromAgentId when valid', async () => {
|
|
1300
|
-
const agents: t.AgentInputs[] = [
|
|
1301
|
-
createBasicAgent('router', 'You are the router agent'),
|
|
1302
|
-
createBasicAgent('writer', 'You are the writer agent'),
|
|
1303
|
-
createBasicAgent('researcher', 'You are the researcher agent'),
|
|
1304
|
-
];
|
|
1305
|
-
|
|
1306
|
-
const edges: t.GraphEdge[] = [
|
|
1307
|
-
{ from: 'router', to: 'writer', edgeType: EdgeType.TRANSFER },
|
|
1308
|
-
{ from: 'router', to: 'researcher', edgeType: EdgeType.TRANSFER },
|
|
1309
|
-
];
|
|
1310
|
-
|
|
1311
|
-
// Create run WITH resumeFromAgentId set to 'writer'
|
|
1312
|
-
const run = await Run.create({
|
|
1313
|
-
runId: `resume-test-${Date.now()}`,
|
|
1314
|
-
graphConfig: {
|
|
1315
|
-
type: 'multi-agent',
|
|
1316
|
-
agents,
|
|
1317
|
-
edges,
|
|
1318
|
-
resumeFromAgentId: 'writer',
|
|
1319
|
-
},
|
|
1320
|
-
returnContent: true,
|
|
1321
|
-
skipCleanup: true,
|
|
1322
|
-
});
|
|
1323
|
-
|
|
1324
|
-
// Graph should compile without error
|
|
1325
|
-
expect(run.graphRunnable).toBeDefined();
|
|
1326
|
-
|
|
1327
|
-
// The writer agent should be reachable from START
|
|
1328
|
-
// (We verify by checking that the graph compiled successfully with conditional routing)
|
|
1329
|
-
expect(run.Graph).toBeDefined();
|
|
1330
|
-
});
|
|
1331
|
-
|
|
1332
|
-
it('should fall back to default starting nodes when resumeFromAgentId is invalid', async () => {
|
|
1333
|
-
const agents: t.AgentInputs[] = [
|
|
1334
|
-
createBasicAgent('router', 'You are the router agent'),
|
|
1335
|
-
createBasicAgent('writer', 'You are the writer agent'),
|
|
1336
|
-
];
|
|
1337
|
-
|
|
1338
|
-
const edges: t.GraphEdge[] = [
|
|
1339
|
-
{ from: 'router', to: 'writer', edgeType: EdgeType.TRANSFER },
|
|
1340
|
-
];
|
|
1341
|
-
|
|
1342
|
-
// Create run with an invalid resumeFromAgentId
|
|
1343
|
-
const run = await Run.create({
|
|
1344
|
-
runId: `resume-invalid-test-${Date.now()}`,
|
|
1345
|
-
graphConfig: {
|
|
1346
|
-
type: 'multi-agent',
|
|
1347
|
-
agents,
|
|
1348
|
-
edges,
|
|
1349
|
-
resumeFromAgentId: 'nonexistent_agent',
|
|
1350
|
-
},
|
|
1351
|
-
returnContent: true,
|
|
1352
|
-
skipCleanup: true,
|
|
1353
|
-
});
|
|
1354
|
-
|
|
1355
|
-
// Should still compile (falls back to default starting nodes)
|
|
1356
|
-
expect(run.graphRunnable).toBeDefined();
|
|
1357
|
-
expect(run.Graph).toBeDefined();
|
|
1358
|
-
});
|
|
1359
|
-
|
|
1360
|
-
it('should compile normally without resumeFromAgentId (backward compat)', async () => {
|
|
1361
|
-
const agents: t.AgentInputs[] = [
|
|
1362
|
-
createBasicAgent('router', 'You are the router agent'),
|
|
1363
|
-
createBasicAgent('writer', 'You are the writer agent'),
|
|
1364
|
-
];
|
|
1365
|
-
|
|
1366
|
-
const edges: t.GraphEdge[] = [
|
|
1367
|
-
{ from: 'router', to: 'writer', edgeType: EdgeType.TRANSFER },
|
|
1368
|
-
];
|
|
1369
|
-
|
|
1370
|
-
// Create run WITHOUT resumeFromAgentId — existing behavior
|
|
1371
|
-
const run = await Run.create(createTestConfig(agents, edges));
|
|
1372
|
-
|
|
1373
|
-
expect(run.graphRunnable).toBeDefined();
|
|
1374
|
-
expect(run.Graph).toBeDefined();
|
|
1375
|
-
});
|
|
1376
|
-
|
|
1377
|
-
it('should route to resume agent and track lastActiveAgentId correctly', async () => {
|
|
1378
|
-
const agents: t.AgentInputs[] = [
|
|
1379
|
-
createBasicAgent('router', 'You are the router agent'),
|
|
1380
|
-
createBasicAgent('writer', 'You are the writer agent'),
|
|
1381
|
-
];
|
|
1382
|
-
|
|
1383
|
-
const edges: t.GraphEdge[] = [
|
|
1384
|
-
{ from: 'router', to: 'writer', edgeType: EdgeType.TRANSFER },
|
|
1385
|
-
];
|
|
1386
|
-
|
|
1387
|
-
const run = await Run.create({
|
|
1388
|
-
runId: `resume-execution-test-${Date.now()}`,
|
|
1389
|
-
graphConfig: {
|
|
1390
|
-
type: 'multi-agent',
|
|
1391
|
-
agents,
|
|
1392
|
-
edges,
|
|
1393
|
-
resumeFromAgentId: 'writer',
|
|
1394
|
-
},
|
|
1395
|
-
returnContent: true,
|
|
1396
|
-
skipCleanup: true,
|
|
1397
|
-
});
|
|
1398
|
-
|
|
1399
|
-
// Override test model to respond directly (no transfer)
|
|
1400
|
-
run.Graph?.overrideTestModel(
|
|
1401
|
-
['I am the writer, continuing your work.'],
|
|
1402
|
-
10
|
|
1403
|
-
);
|
|
1404
|
-
|
|
1405
|
-
const messages = [new HumanMessage('Make the intro shorter')];
|
|
1406
|
-
const config: Partial<RunnableConfig> & {
|
|
1407
|
-
version: 'v1' | 'v2';
|
|
1408
|
-
streamMode: string;
|
|
1409
|
-
} = {
|
|
1410
|
-
configurable: { thread_id: 'resume-exec-test' },
|
|
1411
|
-
streamMode: 'values',
|
|
1412
|
-
version: 'v2' as const,
|
|
1413
|
-
};
|
|
1414
|
-
|
|
1415
|
-
await run.processStream({ messages }, config);
|
|
1416
|
-
|
|
1417
|
-
// After execution, lastActiveAgentId should be 'writer' (not 'router')
|
|
1418
|
-
expect(run.getLastActiveAgentId()).toBe('writer');
|
|
1419
|
-
});
|
|
1420
|
-
|
|
1421
|
-
it('should handle resumeFromAgentId with parallel starting nodes', async () => {
|
|
1422
|
-
const agents: t.AgentInputs[] = [
|
|
1423
|
-
createBasicAgent('agent_a', 'You are agent A'),
|
|
1424
|
-
createBasicAgent('agent_b', 'You are agent B'),
|
|
1425
|
-
createBasicAgent('agent_c', 'You are agent C'),
|
|
1426
|
-
];
|
|
1427
|
-
|
|
1428
|
-
// Both A and B are starting nodes (no incoming edges), C has incoming
|
|
1429
|
-
const edges: t.GraphEdge[] = [
|
|
1430
|
-
{ from: 'agent_a', to: 'agent_c', edgeType: EdgeType.TRANSFER },
|
|
1431
|
-
{ from: 'agent_b', to: 'agent_c', edgeType: EdgeType.TRANSFER },
|
|
1432
|
-
];
|
|
1433
|
-
|
|
1434
|
-
// Resume from agent_c — should override the parallel start (A + B)
|
|
1435
|
-
const run = await Run.create({
|
|
1436
|
-
runId: `resume-parallel-test-${Date.now()}`,
|
|
1437
|
-
graphConfig: {
|
|
1438
|
-
type: 'multi-agent',
|
|
1439
|
-
agents,
|
|
1440
|
-
edges,
|
|
1441
|
-
resumeFromAgentId: 'agent_c',
|
|
1442
|
-
},
|
|
1443
|
-
returnContent: true,
|
|
1444
|
-
skipCleanup: true,
|
|
1445
|
-
});
|
|
1446
|
-
|
|
1447
|
-
expect(run.graphRunnable).toBeDefined();
|
|
1448
|
-
});
|
|
1449
|
-
});
|
|
1450
993
|
});
|