@illuma-ai/agents 1.4.0-alpha.6 → 1.5.0
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/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 +0 -3
- 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/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 +44 -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/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 +53 -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/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 +0 -3
- 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/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 +44 -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/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 +51 -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/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/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/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 +70 -0
- package/dist/types/types/graph.d.ts +162 -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.js.map +1 -0
- package/src/agents/AgentContext.test.js.map +1 -0
- 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 +264 -0
- package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
- package/src/agents/__tests__/AgentContext.test.js.map +1 -0
- package/src/agents/__tests__/AgentContext.test.ts +632 -0
- package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
- package/src/common/__tests__/enum.test.ts +7 -17
- package/src/common/enum.js.map +1 -0
- package/src/common/enum.ts +43 -12
- package/src/common/index.js.map +1 -0
- package/src/common/index.ts +0 -1
- package/src/events.js.map +1 -0
- package/src/graphs/Graph.js.map +1 -0
- package/src/graphs/Graph.ts +222 -2
- package/src/graphs/MultiAgentGraph.js.map +1 -0
- package/src/graphs/MultiAgentGraph.ts +154 -1466
- package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
- package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
- package/src/graphs/__tests__/structured-output.test.js.map +1 -0
- package/src/graphs/contextManagement.e2e.test.js.map +1 -0
- package/src/graphs/contextManagement.test.js.map +1 -0
- package/src/graphs/handoffValidation.test.js.map +1 -0
- package/src/graphs/index.js.map +1 -0
- package/src/graphs/index.ts +0 -1
- 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.js.map +1 -0
- package/src/index.ts +15 -24
- package/src/instrumentation.js.map +1 -0
- 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/index.js.map +1 -0
- package/src/llm/anthropic/types.js.map +1 -0
- package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
- package/src/llm/anthropic/utils/message_inputs.ts +10 -1
- package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
- package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
- package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
- package/src/llm/anthropic/utils/tools.js.map +1 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -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.js.map +1 -0
- package/src/llm/bedrock/index.ts +116 -41
- package/src/llm/bedrock/types.js.map +1 -0
- package/src/llm/bedrock/utils/index.js.map +1 -0
- package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
- package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
- package/src/llm/fake.js.map +1 -0
- package/src/llm/google/index.js.map +1 -0
- package/src/llm/google/types.js.map +1 -0
- package/src/llm/google/utils/common.js.map +1 -0
- package/src/llm/google/utils/tools.js.map +1 -0
- package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
- package/src/llm/openai/index.js.map +1 -0
- package/src/llm/openai/types.js.map +1 -0
- package/src/llm/openai/utils/index.js.map +1 -0
- package/src/llm/openai/utils/index.ts +31 -14
- package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
- package/src/llm/openrouter/index.js.map +1 -0
- package/src/llm/openrouter/reasoning.test.js.map +1 -0
- package/src/llm/providers.js.map +1 -0
- package/src/llm/text.js.map +1 -0
- package/src/llm/vertexai/index.js.map +1 -0
- package/src/messages/__tests__/contextPruning.test.ts +228 -0
- package/src/messages/__tests__/tools.test.js.map +1 -0
- package/src/messages/cache.js.map +1 -0
- package/src/messages/cache.test.js.map +1 -0
- package/src/messages/cache.test.ts +62 -24
- package/src/messages/cache.ts +112 -0
- package/src/messages/content.js.map +1 -0
- package/src/messages/content.test.js.map +1 -0
- package/src/messages/contextPruning.ts +191 -0
- package/src/messages/contextPruningSettings.ts +90 -0
- package/src/messages/core.js.map +1 -0
- package/src/messages/ensureThinkingBlock.test.js.map +1 -0
- package/src/messages/format.js.map +1 -0
- package/src/messages/format.ts +164 -12
- package/src/messages/formatAgentMessages.skills.test.ts +413 -0
- package/src/messages/formatAgentMessages.test.js.map +1 -0
- package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
- package/src/messages/formatMessage.test.js.map +1 -0
- package/src/messages/ids.js.map +1 -0
- package/src/messages/index.js.map +1 -0
- package/src/messages/index.ts +2 -0
- package/src/messages/labelContentByAgent.test.js.map +1 -0
- package/src/messages/prune.js.map +1 -0
- package/src/messages/prune.ts +661 -4
- package/src/messages/reducer.js.map +1 -0
- package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
- package/src/messages/summarize.js.map +1 -0
- package/src/messages/summarize.test.js.map +1 -0
- package/src/messages/tools.js.map +1 -0
- package/src/mockStream.js.map +1 -0
- package/src/prompts/collab.js.map +1 -0
- package/src/prompts/index.js.map +1 -0
- package/src/prompts/taskmanager.js.map +1 -0
- package/src/run.js.map +1 -0
- package/src/run.ts +155 -1
- package/src/schemas/index.js.map +1 -0
- package/src/schemas/schema-preparation.test.js.map +1 -0
- package/src/schemas/validate.js.map +1 -0
- package/src/schemas/validate.test.js.map +1 -0
- package/src/scripts/abort.js.map +1 -0
- package/src/scripts/ant_web_search.js.map +1 -0
- package/src/scripts/ant_web_search_edge_case.js.map +1 -0
- package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
- package/src/scripts/args.js.map +1 -0
- package/src/scripts/bedrock-cache-debug.js.map +1 -0
- package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
- package/src/scripts/bedrock-merge-test.js.map +1 -0
- package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
- package/src/scripts/caching.js.map +1 -0
- package/src/scripts/cli.js.map +1 -0
- package/src/scripts/cli2.js.map +1 -0
- package/src/scripts/cli3.js.map +1 -0
- package/src/scripts/cli4.js.map +1 -0
- package/src/scripts/cli5.js.map +1 -0
- package/src/scripts/code_exec.js.map +1 -0
- package/src/scripts/code_exec_files.js.map +1 -0
- package/src/scripts/code_exec_multi_session.js.map +1 -0
- package/src/scripts/code_exec_ptc.js.map +1 -0
- package/src/scripts/code_exec_session.js.map +1 -0
- package/src/scripts/code_exec_simple.js.map +1 -0
- package/src/scripts/content.js.map +1 -0
- package/src/scripts/empty_input.js.map +1 -0
- package/src/scripts/handoff-test.js.map +1 -0
- package/src/scripts/image.js.map +1 -0
- package/src/scripts/memory.js.map +1 -0
- package/src/scripts/multi-agent-chain.js.map +1 -0
- package/src/scripts/multi-agent-chain.ts +2 -2
- package/src/scripts/multi-agent-conditional.js.map +1 -0
- package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
- package/src/scripts/multi-agent-document-review-chain.ts +2 -2
- package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
- package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
- package/src/scripts/multi-agent-parallel-start.js.map +1 -0
- package/src/scripts/multi-agent-parallel.js.map +1 -0
- package/src/scripts/multi-agent-parallel.ts +3 -3
- package/src/scripts/multi-agent-sequence.js.map +1 -0
- package/src/scripts/multi-agent-sequence.ts +3 -3
- package/src/scripts/multi-agent-subagent.ts +246 -0
- package/src/scripts/multi-agent-supervisor.js.map +1 -0
- package/src/scripts/multi-agent-supervisor.ts +5 -5
- package/src/scripts/multi-agent-test.js.map +1 -0
- package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
- package/src/scripts/parallel-full-metadata-test.js.map +1 -0
- package/src/scripts/parallel-tools-test.js.map +1 -0
- package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
- package/src/scripts/programmatic_exec.js.map +1 -0
- package/src/scripts/programmatic_exec_agent.js.map +1 -0
- package/src/scripts/search.js.map +1 -0
- package/src/scripts/sequential-full-metadata-test.js.map +1 -0
- package/src/scripts/sequential-full-metadata-test.ts +2 -2
- package/src/scripts/simple.js.map +1 -0
- package/src/scripts/single-agent-metadata-test.js.map +1 -0
- package/src/scripts/stream.js.map +1 -0
- 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.js.map +1 -0
- package/src/scripts/test-custom-prompt-key.ts +3 -3
- package/src/scripts/test-handoff-input.js.map +1 -0
- package/src/scripts/test-handoff-input.ts +1 -1
- package/src/scripts/test-handoff-preamble.js.map +1 -0
- package/src/scripts/test-handoff-steering.js.map +1 -0
- package/src/scripts/test-handoff-steering.ts +3 -3
- package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
- package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
- package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
- package/src/scripts/test-parallel-agent-labeling.ts +3 -3
- package/src/scripts/test-parallel-handoffs.js.map +1 -0
- package/src/scripts/test-parallel-handoffs.ts +2 -2
- package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
- package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
- package/src/scripts/test-thinking-handoff.js.map +1 -0
- package/src/scripts/test-thinking-handoff.ts +1 -1
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
- package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
- package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
- package/src/scripts/test-tools-before-handoff.js.map +1 -0
- package/src/scripts/test-tools-before-handoff.ts +1 -1
- package/src/scripts/test_code_api.js.map +1 -0
- package/src/scripts/thinking-bedrock.js.map +1 -0
- package/src/scripts/thinking-vertexai.js.map +1 -0
- package/src/scripts/thinking.js.map +1 -0
- package/src/scripts/tool_search.js.map +1 -0
- package/src/scripts/tools.js.map +1 -0
- package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
- package/src/specs/agent-handoffs.test.js.map +1 -0
- package/src/specs/agent-handoffs.test.ts +26 -483
- package/src/specs/anthropic.simple.test.js.map +1 -0
- package/src/specs/anthropic.simple.test.ts +61 -0
- package/src/specs/azure.simple.test.js.map +1 -0
- package/src/specs/cache.simple.test.js.map +1 -0
- package/src/specs/custom-event-await.test.js.map +1 -0
- package/src/specs/deepseek.simple.test.js.map +1 -0
- package/src/specs/emergency-prune.test.js.map +1 -0
- package/src/specs/moonshot.simple.test.js.map +1 -0
- package/src/specs/multi-agent-summarization.test.ts +396 -0
- package/src/specs/observability.integration.test.js.map +1 -0
- package/src/specs/openai.simple.test.js.map +1 -0
- package/src/specs/openrouter.simple.test.js.map +1 -0
- package/src/specs/prune.orphans.test.ts +248 -0
- package/src/specs/prune.test.js.map +1 -0
- package/src/specs/prune.test.ts +104 -16
- package/src/specs/reasoning.test.js.map +1 -0
- package/src/specs/spec.utils.js.map +1 -0
- package/src/specs/thinking-handoff.test.js.map +1 -0
- package/src/specs/thinking-handoff.test.ts +19 -19
- package/src/specs/thinking-prune.test.js.map +1 -0
- package/src/specs/token-distribution-edge-case.test.js.map +1 -0
- package/src/specs/token-memoization.test.js.map +1 -0
- package/src/specs/tokens.test.js.map +1 -0
- package/src/specs/tool-error.test.js.map +1 -0
- package/src/splitStream.js.map +1 -0
- package/src/splitStream.test.js.map +1 -0
- package/src/stream.js.map +1 -0
- package/src/stream.test.js.map +1 -0
- package/src/test/mockTools.js.map +1 -0
- package/src/tools/BashExecutor.ts +281 -0
- package/src/tools/BashProgrammaticToolCalling.ts +397 -0
- package/src/tools/BrowserTools.js.map +1 -0
- package/src/tools/Calculator.js.map +1 -0
- package/src/tools/Calculator.test.js.map +1 -0
- package/src/tools/CodeExecutor.js.map +1 -0
- package/src/tools/CodeExecutor.ts +62 -54
- package/src/tools/ProgrammaticToolCalling.js.map +1 -0
- package/src/tools/ProgrammaticToolCalling.ts +29 -14
- package/src/tools/ReadFile.ts +39 -0
- package/src/tools/SkillTool.ts +46 -0
- package/src/tools/StreamingToolCallBuffer.js.map +1 -0
- package/src/tools/SubagentTool.ts +100 -0
- package/src/tools/ToolNode.js.map +1 -0
- package/src/tools/ToolNode.ts +548 -26
- package/src/tools/ToolSearch.js.map +1 -0
- package/src/tools/__tests__/BashExecutor.test.ts +49 -0
- package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
- package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
- package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
- package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
- 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__/StreamingToolCallBuffer.test.js.map +1 -0
- package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
- package/src/tools/__tests__/SubagentTool.test.ts +149 -0
- package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
- package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
- package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
- package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
- package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
- package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
- package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
- package/src/tools/__tests__/handlers.test.js.map +1 -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/__tests__/truncation-recovery.integration.test.js.map +1 -0
- package/src/tools/handlers.js.map +1 -0
- package/src/tools/schema.js.map +1 -0
- package/src/tools/search/anthropic.js.map +1 -0
- package/src/tools/search/content.js.map +1 -0
- package/src/tools/search/content.test.js.map +1 -0
- package/src/tools/search/firecrawl.js.map +1 -0
- package/src/tools/search/format.js.map +1 -0
- package/src/tools/search/highlights.js.map +1 -0
- package/src/tools/search/index.js.map +1 -0
- package/src/tools/search/jina-reranker.test.js.map +1 -0
- package/src/tools/search/rerankers.js.map +1 -0
- package/src/tools/search/schema.js.map +1 -0
- package/src/tools/search/search.js.map +1 -0
- package/src/tools/search/search.ts +12 -2
- package/src/tools/search/serper-scraper.js.map +1 -0
- 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/test.js.map +1 -0
- package/src/tools/search/tool.js.map +1 -0
- package/src/tools/search/tool.ts +36 -2
- package/src/tools/search/types.js.map +1 -0
- package/src/tools/search/types.ts +133 -8
- package/src/tools/search/utils.js.map +1 -0
- 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 +73 -0
- package/src/types/graph.js.map +1 -0
- package/src/types/graph.test.js.map +1 -0
- package/src/types/graph.ts +171 -20
- package/src/types/index.js.map +1 -0
- package/src/types/index.ts +3 -0
- package/src/types/llm.js.map +1 -0
- package/src/types/messages.js.map +1 -0
- package/src/types/messages.ts +27 -0
- package/src/types/run.js.map +1 -0
- package/src/types/run.ts +22 -0
- package/src/types/skill.ts +11 -0
- package/src/types/stream.js.map +1 -0
- package/src/types/tools.js.map +1 -0
- package/src/types/tools.ts +118 -0
- package/src/utils/__tests__/truncation.test.ts +66 -0
- package/src/utils/contextAnalytics.js.map +1 -0
- package/src/utils/contextAnalytics.test.js.map +1 -0
- package/src/utils/events.js.map +1 -0
- package/src/utils/graph.js.map +1 -0
- package/src/utils/handlers.js.map +1 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/index.ts +1 -3
- package/src/utils/llm.js.map +1 -0
- package/src/utils/llmConfig.js.map +1 -0
- package/src/utils/logging.js.map +1 -0
- package/src/utils/misc.js.map +1 -0
- package/src/utils/run.js.map +1 -0
- package/src/utils/schema.js.map +1 -0
- package/src/utils/title.js.map +1 -0
- package/src/utils/tokens.js.map +1 -0
- package/src/utils/toonFormat.js.map +1 -0
- 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/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/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
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { ToolMessage, isBaseMessage, isAIMessage } from '@langchain/core/messages';
|
|
1
|
+
import { ToolMessage, isBaseMessage, HumanMessage, isAIMessage } from '@langchain/core/messages';
|
|
2
2
|
import { interrupt, isCommand, isGraphInterrupt, Command, Send, END } from '@langchain/langgraph';
|
|
3
3
|
import { ExecutionContext } from './approval/constants.mjs';
|
|
4
|
-
import { Constants, GraphEvents } from '../common/enum.mjs';
|
|
4
|
+
import { Constants, GraphEvents, CODE_EXECUTION_TOOLS } from '../common/enum.mjs';
|
|
5
5
|
import 'nanoid';
|
|
6
6
|
import '../messages/core.mjs';
|
|
7
7
|
import { processToolOutput } from '../utils/toonFormat.mjs';
|
|
8
8
|
import { RunnableCallable } from '../utils/run.mjs';
|
|
9
9
|
import 'ai-tokenizer';
|
|
10
10
|
import 'zod-to-json-schema';
|
|
11
|
-
import 'axios';
|
|
12
|
-
import 'https-proxy-agent';
|
|
13
|
-
import '../utils/credentials.mjs';
|
|
14
11
|
import { safeDispatchCustomEvent } from '../utils/events.mjs';
|
|
12
|
+
import { executeHooks } from '../hooks/executeHooks.mjs';
|
|
13
|
+
import { ToolOutputReferenceRegistry, buildReferenceKey } from './toolOutputReferences.mjs';
|
|
15
14
|
|
|
16
15
|
/**
|
|
17
16
|
* Helper to check if a value is a Send object
|
|
@@ -82,7 +81,30 @@ class ToolNode extends RunnableCallable {
|
|
|
82
81
|
toolApprovalConfig;
|
|
83
82
|
/** Buffer for recovering truncated tool call arguments from streaming data */
|
|
84
83
|
streamingToolCallBuffer;
|
|
85
|
-
|
|
84
|
+
/** Hook registry threaded down from Run for tool-lifecycle events. */
|
|
85
|
+
hookRegistry;
|
|
86
|
+
/**
|
|
87
|
+
* Tool output reference registry threaded down from Run / Graph
|
|
88
|
+
* (upstream PR #114). When set, dispatchToolEvents resolves
|
|
89
|
+
* `{{tool<i>turn<n>}}` placeholders in args before invoking each tool
|
|
90
|
+
* and stores successful outputs under their stable reference keys for
|
|
91
|
+
* subsequent calls in the same run to pipe through.
|
|
92
|
+
*/
|
|
93
|
+
toolOutputRegistry;
|
|
94
|
+
/**
|
|
95
|
+
* Per-batch turn counter for the registry. Increments once per
|
|
96
|
+
* `dispatchToolEvents` invocation so `tool<i>turn<n>` keys remain
|
|
97
|
+
* unique across overlapping batches in a single run.
|
|
98
|
+
*/
|
|
99
|
+
toolOutputTurn = 0;
|
|
100
|
+
/**
|
|
101
|
+
* Counter for synthesising scope ids when `run()` is called without a
|
|
102
|
+
* `run_id` in config. Each anonymous batch gets a unique
|
|
103
|
+
* `\0anon-<n>` scope so concurrent invocations don't collide on the
|
|
104
|
+
* shared `toolOutputRegistry`.
|
|
105
|
+
*/
|
|
106
|
+
anonBatchCounter = 0;
|
|
107
|
+
constructor({ tools, toolMap, name, tags, errorHandler, toolCallStepIds, handleToolErrors, loadRuntimeTools, toolRegistry, sessions, eventDrivenMode, agentId, directToolNames, streamingToolCallBuffer, toolApprovalConfig, hookRegistry, toolOutputRegistry, toolOutputReferences, maxToolResultChars: _maxToolResultChars, }) {
|
|
86
108
|
super({ name, tags, func: (input, config) => this.run(input, config) });
|
|
87
109
|
this.toolMap = toolMap ?? new Map(tools.map((tool) => [tool.name, tool]));
|
|
88
110
|
this.toolCallStepIds = toolCallStepIds;
|
|
@@ -97,6 +119,31 @@ class ToolNode extends RunnableCallable {
|
|
|
97
119
|
this.directToolNames = directToolNames;
|
|
98
120
|
this.streamingToolCallBuffer = streamingToolCallBuffer;
|
|
99
121
|
this.toolApprovalConfig = toolApprovalConfig;
|
|
122
|
+
this.hookRegistry = hookRegistry;
|
|
123
|
+
/**
|
|
124
|
+
* Precedence: an explicitly passed `toolOutputRegistry` instance
|
|
125
|
+
* wins (the multi-agent case where every ToolNode shares one registry
|
|
126
|
+
* for the run); otherwise the per-ToolNode `toolOutputReferences`
|
|
127
|
+
* config builds an instance scoped to this ToolNode.
|
|
128
|
+
*/
|
|
129
|
+
if (toolOutputRegistry != null) {
|
|
130
|
+
this.toolOutputRegistry = toolOutputRegistry;
|
|
131
|
+
}
|
|
132
|
+
else if (toolOutputReferences?.enabled === true) {
|
|
133
|
+
this.toolOutputRegistry = new ToolOutputReferenceRegistry({
|
|
134
|
+
maxOutputSize: toolOutputReferences.maxOutputSize,
|
|
135
|
+
maxTotalSize: toolOutputReferences.maxTotalSize,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Test-observation accessor for the tool-output reference registry.
|
|
141
|
+
* @internal Exposed for test observation only. Host code should rely on
|
|
142
|
+
* `{{tool<i>turn<n>}}` substitution at tool-invocation time and not
|
|
143
|
+
* mutate the registry directly.
|
|
144
|
+
*/
|
|
145
|
+
_unsafeGetToolOutputRegistry() {
|
|
146
|
+
return this.toolOutputRegistry;
|
|
100
147
|
}
|
|
101
148
|
/**
|
|
102
149
|
* Returns cached programmatic tools, computing once on first access.
|
|
@@ -164,8 +211,7 @@ class ToolNode extends RunnableCallable {
|
|
|
164
211
|
// `ask_user` execute without ever firing interrupt(), defeating the whole tool.
|
|
165
212
|
// Instead, gate the bypass on the actual routing-tool name prefix.
|
|
166
213
|
if (this.directToolNames?.has(toolName) &&
|
|
167
|
-
|
|
168
|
-
toolName.startsWith(Constants.LC_HANDOFF_TO_))) {
|
|
214
|
+
toolName.startsWith(Constants.LC_TRANSFER_TO_)) {
|
|
169
215
|
return false;
|
|
170
216
|
}
|
|
171
217
|
// Determine the effective policy for this tool
|
|
@@ -219,10 +265,41 @@ class ToolNode extends RunnableCallable {
|
|
|
219
265
|
return response;
|
|
220
266
|
}
|
|
221
267
|
/**
|
|
222
|
-
* Runs a single tool call with error handling
|
|
268
|
+
* Runs a single tool call with error handling.
|
|
269
|
+
*
|
|
270
|
+
* @param batchContext Optional per-batch context (upstream PR #117).
|
|
271
|
+
* Threaded from `run()` for tool output reference annotation. The
|
|
272
|
+
* `batchScopeId` field carries an anonymous synthetic scope when the
|
|
273
|
+
* caller has no `run_id`, so concurrent batches don't collide on the
|
|
274
|
+
* shared registry.
|
|
223
275
|
*/
|
|
224
|
-
async runTool(call, config) {
|
|
276
|
+
async runTool(call, config, batchContext = {}) {
|
|
277
|
+
const { batchIndex, turn: batchTurn, batchScopeId, resolvedArgsByCallId, } = batchContext;
|
|
225
278
|
const tool = this.toolMap.get(call.name);
|
|
279
|
+
const registry = this.toolOutputRegistry;
|
|
280
|
+
/**
|
|
281
|
+
* Precompute the reference key once per call — captured locally so
|
|
282
|
+
* concurrent `invoke()` calls on the same ToolNode cannot race on a
|
|
283
|
+
* shared turn field.
|
|
284
|
+
*/
|
|
285
|
+
const refKey = registry != null && batchIndex != null && batchTurn != null
|
|
286
|
+
? buildReferenceKey(batchIndex, batchTurn)
|
|
287
|
+
: undefined;
|
|
288
|
+
/**
|
|
289
|
+
* Hoisted outside the try so the catch branch can stamp
|
|
290
|
+
* `_unresolvedRefs` into error ToolMessage metadata. This lets the
|
|
291
|
+
* lazy annotation transform surface a `[unresolved refs: …]` hint to
|
|
292
|
+
* the LLM, helping the model self-correct when its reference key
|
|
293
|
+
* caused the failure.
|
|
294
|
+
*/
|
|
295
|
+
let unresolvedRefs = [];
|
|
296
|
+
/**
|
|
297
|
+
* Use the caller-provided `batchScopeId` when threaded from `run()`.
|
|
298
|
+
* Fall back to the config's `run_id` when runTool is invoked from a
|
|
299
|
+
* context that doesn't thread the batch context — that still
|
|
300
|
+
* preserves the runId-based partitioning for named runs.
|
|
301
|
+
*/
|
|
302
|
+
const runId = batchScopeId ?? config.configurable?.run_id;
|
|
226
303
|
try {
|
|
227
304
|
if (tool === undefined) {
|
|
228
305
|
throw new Error(`Tool "${call.name}" not found.`);
|
|
@@ -242,6 +319,23 @@ class ToolNode extends RunnableCallable {
|
|
|
242
319
|
args = this.recoverTruncatedArgs(call.name, call.id, args);
|
|
243
320
|
this.streamingToolCallBuffer.clear(call.id);
|
|
244
321
|
}
|
|
322
|
+
/**
|
|
323
|
+
* Resolve `{{tool<i>turn<n>}}` placeholders in args against the
|
|
324
|
+
* registry. Captures `unresolvedRefs` so error/success branches can
|
|
325
|
+
* surface them to the LLM via `additional_kwargs._unresolvedRefs`.
|
|
326
|
+
*/
|
|
327
|
+
if (registry != null) {
|
|
328
|
+
const { resolved, unresolved } = registry.resolve(runId, args);
|
|
329
|
+
args = resolved;
|
|
330
|
+
unresolvedRefs = unresolved;
|
|
331
|
+
if (resolvedArgsByCallId != null &&
|
|
332
|
+
call.id != null &&
|
|
333
|
+
call.id !== '' &&
|
|
334
|
+
resolved !== call.args &&
|
|
335
|
+
typeof resolved === 'object') {
|
|
336
|
+
resolvedArgsByCallId.set(call.id, resolved);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
245
339
|
// Build invoke params - LangChain extracts non-schema fields to config.toolCall
|
|
246
340
|
let invokeParams = {
|
|
247
341
|
...call,
|
|
@@ -274,8 +368,7 @@ class ToolNode extends RunnableCallable {
|
|
|
274
368
|
* session_id is always injected when available (even without tracked files)
|
|
275
369
|
* so the CodeExecutor can fall back to the /files endpoint for session continuity.
|
|
276
370
|
*/
|
|
277
|
-
if (call.name
|
|
278
|
-
call.name === Constants.PROGRAMMATIC_TOOL_CALLING) {
|
|
371
|
+
if (CODE_EXECUTION_TOOLS.has(call.name)) {
|
|
279
372
|
const codeSession = this.sessions?.get(Constants.EXECUTE_CODE);
|
|
280
373
|
if (codeSession != null && codeSession.session_id !== '') {
|
|
281
374
|
/**
|
|
@@ -360,22 +453,49 @@ class ToolNode extends RunnableCallable {
|
|
|
360
453
|
minSizeForToon: 1000,
|
|
361
454
|
minReductionPercent: 10, // Only apply TOON when clearly beneficial
|
|
362
455
|
});
|
|
363
|
-
|
|
456
|
+
/**
|
|
457
|
+
* Tool output reference metadata (upstream PR #117). Register the
|
|
458
|
+
* raw, untruncated content so future `{{...}}` substitutions deliver
|
|
459
|
+
* the full payload, and stamp `_refKey` / `_refScope` /
|
|
460
|
+
* `_unresolvedRefs` into `additional_kwargs` for the lazy
|
|
461
|
+
* annotation transform to apply at LLM request time. Persisted
|
|
462
|
+
* `content` stays clean.
|
|
463
|
+
*
|
|
464
|
+
* For error ToolMessages from the underlying tool: bypass
|
|
465
|
+
* registration but still stamp `_unresolvedRefs` so the model can
|
|
466
|
+
* self-correct.
|
|
467
|
+
*/
|
|
364
468
|
if (isBaseMessage(output) && output._getType() === 'tool') {
|
|
365
469
|
const toolMsg = output;
|
|
470
|
+
const isError = toolMsg.status === 'error';
|
|
471
|
+
const refMeta = isError
|
|
472
|
+
? unresolvedRefs.length > 0
|
|
473
|
+
? { _unresolvedRefs: unresolvedRefs }
|
|
474
|
+
: undefined
|
|
475
|
+
: this.recordOutputReference(runId, rawContent, refKey, unresolvedRefs);
|
|
366
476
|
return new ToolMessage({
|
|
367
477
|
status: toolMsg.status,
|
|
368
478
|
name: toolMsg.name,
|
|
369
479
|
content: processed.content,
|
|
370
480
|
tool_call_id: toolMsg.tool_call_id,
|
|
481
|
+
...(refMeta != null && {
|
|
482
|
+
additional_kwargs: {
|
|
483
|
+
...toolMsg.additional_kwargs,
|
|
484
|
+
...refMeta,
|
|
485
|
+
},
|
|
486
|
+
}),
|
|
371
487
|
});
|
|
372
488
|
}
|
|
373
489
|
else {
|
|
490
|
+
const refMeta = this.recordOutputReference(runId, rawContent, refKey, unresolvedRefs);
|
|
374
491
|
return new ToolMessage({
|
|
375
492
|
status: 'success',
|
|
376
493
|
name: tool.name,
|
|
377
494
|
content: processed.content,
|
|
378
495
|
tool_call_id: call.id,
|
|
496
|
+
...(refMeta != null && {
|
|
497
|
+
additional_kwargs: refMeta,
|
|
498
|
+
}),
|
|
379
499
|
});
|
|
380
500
|
}
|
|
381
501
|
}
|
|
@@ -425,6 +545,9 @@ class ToolNode extends RunnableCallable {
|
|
|
425
545
|
content: `Error: ${e.message}\n Please fix your mistakes.`,
|
|
426
546
|
name: call.name,
|
|
427
547
|
tool_call_id: call.id ?? '',
|
|
548
|
+
...(unresolvedRefs.length > 0 && {
|
|
549
|
+
additional_kwargs: { _unresolvedRefs: unresolvedRefs },
|
|
550
|
+
}),
|
|
428
551
|
});
|
|
429
552
|
}
|
|
430
553
|
}
|
|
@@ -508,6 +631,31 @@ class ToolNode extends RunnableCallable {
|
|
|
508
631
|
}
|
|
509
632
|
return parsedArgs;
|
|
510
633
|
}
|
|
634
|
+
/**
|
|
635
|
+
* Stores the raw, untruncated tool output in the registry under `refKey`
|
|
636
|
+
* (when registry + refKey are both present) and returns the metadata
|
|
637
|
+
* envelope to stamp on `ToolMessage.additional_kwargs`. The lazy
|
|
638
|
+
* annotation transform reads `_refKey` / `_refScope` / `_unresolvedRefs`
|
|
639
|
+
* at LLM request time to produce the transient annotated copy.
|
|
640
|
+
*/
|
|
641
|
+
recordOutputReference(runId, registryContent, refKey, unresolved) {
|
|
642
|
+
if (this.toolOutputRegistry != null && refKey != null) {
|
|
643
|
+
this.toolOutputRegistry.set(runId, refKey, registryContent);
|
|
644
|
+
}
|
|
645
|
+
if (refKey == null && unresolved.length === 0)
|
|
646
|
+
return undefined;
|
|
647
|
+
const meta = {};
|
|
648
|
+
if (refKey != null) {
|
|
649
|
+
meta._refKey = refKey;
|
|
650
|
+
// Anonymous invocations use a synthetic scope minted in run() — stamp
|
|
651
|
+
// it onto the message so annotateMessagesForLLM can recover it later.
|
|
652
|
+
if (runId != null)
|
|
653
|
+
meta._refScope = runId;
|
|
654
|
+
}
|
|
655
|
+
if (unresolved.length > 0)
|
|
656
|
+
meta._unresolvedRefs = unresolved;
|
|
657
|
+
return meta;
|
|
658
|
+
}
|
|
511
659
|
/**
|
|
512
660
|
* Builds code session context for injection into event-driven tool calls.
|
|
513
661
|
* Mirrors the session injection logic in runTool() for direct execution.
|
|
@@ -662,8 +810,33 @@ class ToolNode extends RunnableCallable {
|
|
|
662
810
|
}
|
|
663
811
|
}
|
|
664
812
|
/**
|
|
665
|
-
*
|
|
666
|
-
*
|
|
813
|
+
* Converts InjectedMessage entries into LangChain HumanMessages.
|
|
814
|
+
* 'user' and 'system' both become HumanMessage to avoid provider rejections
|
|
815
|
+
* (Anthropic/Google reject non-leading SystemMessages); the original role
|
|
816
|
+
* and metadata are preserved in additional_kwargs for downstream consumers.
|
|
817
|
+
*/
|
|
818
|
+
convertInjectedMessages(messages) {
|
|
819
|
+
const converted = [];
|
|
820
|
+
for (const msg of messages) {
|
|
821
|
+
const additional_kwargs = {
|
|
822
|
+
role: msg.role,
|
|
823
|
+
};
|
|
824
|
+
if (msg.isMeta != null)
|
|
825
|
+
additional_kwargs.isMeta = msg.isMeta;
|
|
826
|
+
if (msg.source != null)
|
|
827
|
+
additional_kwargs.source = msg.source;
|
|
828
|
+
if (msg.skillName != null)
|
|
829
|
+
additional_kwargs.skillName = msg.skillName;
|
|
830
|
+
converted.push(new HumanMessage({ content: msg.content, additional_kwargs }));
|
|
831
|
+
}
|
|
832
|
+
return converted;
|
|
833
|
+
}
|
|
834
|
+
/**
|
|
835
|
+
* Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns
|
|
836
|
+
* the resulting ToolMessages along with any injected messages emitted by
|
|
837
|
+
* the host (e.g. SkillTool body injection). Injected messages must be
|
|
838
|
+
* placed AFTER the ToolMessages so the AIMessage tool_calls -> ToolMessage
|
|
839
|
+
* adjacency required by some providers is preserved.
|
|
667
840
|
*/
|
|
668
841
|
async dispatchToolEvents(toolCalls, config) {
|
|
669
842
|
// ========================================================================
|
|
@@ -694,9 +867,117 @@ class ToolNode extends RunnableCallable {
|
|
|
694
867
|
}
|
|
695
868
|
// If all tools were denied, return denial messages without dispatching
|
|
696
869
|
if (approvedCalls.length === 0) {
|
|
697
|
-
return denialMessages;
|
|
870
|
+
return { toolMessages: denialMessages, injected: [] };
|
|
871
|
+
}
|
|
872
|
+
const runId = config.configurable?.run_id;
|
|
873
|
+
const threadId = config.configurable?.thread_id;
|
|
874
|
+
/**
|
|
875
|
+
* PreToolUse hooks may deny / ask / allow each call, and may rewrite
|
|
876
|
+
* `toolInput` via `updatedInput`. A denied/asked call short-circuits
|
|
877
|
+
* with a synthetic error ToolMessage and fires PermissionDenied so
|
|
878
|
+
* the host can audit. Survivors continue to dispatch.
|
|
879
|
+
*/
|
|
880
|
+
const hookDenialMessages = [];
|
|
881
|
+
let postHookCalls = approvedCalls;
|
|
882
|
+
if (runId != null &&
|
|
883
|
+
this.hookRegistry?.hasHookFor('PreToolUse', runId) === true) {
|
|
884
|
+
const HOOK_FALLBACK = {
|
|
885
|
+
additionalContexts: [],
|
|
886
|
+
errors: [],
|
|
887
|
+
};
|
|
888
|
+
const surviving = [];
|
|
889
|
+
const preResults = await Promise.all(approvedCalls.map((call) => executeHooks({
|
|
890
|
+
registry: this.hookRegistry,
|
|
891
|
+
input: {
|
|
892
|
+
hook_event_name: 'PreToolUse',
|
|
893
|
+
runId,
|
|
894
|
+
threadId,
|
|
895
|
+
agentId: this.agentId,
|
|
896
|
+
toolName: call.name,
|
|
897
|
+
toolInput: call.args,
|
|
898
|
+
toolUseId: call.id ?? '',
|
|
899
|
+
stepId: this.toolCallStepIds?.get(call.id ?? ''),
|
|
900
|
+
turn: this.toolUsageCount.get(call.name) ?? 0,
|
|
901
|
+
},
|
|
902
|
+
sessionId: runId,
|
|
903
|
+
matchQuery: call.name,
|
|
904
|
+
}).catch(() => HOOK_FALLBACK)));
|
|
905
|
+
for (let i = 0; i < approvedCalls.length; i++) {
|
|
906
|
+
const call = approvedCalls[i];
|
|
907
|
+
const hookResult = preResults[i];
|
|
908
|
+
const denied = hookResult.decision === 'deny' || hookResult.decision === 'ask';
|
|
909
|
+
if (denied) {
|
|
910
|
+
const reason = hookResult.reason ?? 'Blocked by hook';
|
|
911
|
+
hookDenialMessages.push(new ToolMessage({
|
|
912
|
+
status: 'error',
|
|
913
|
+
content: `Blocked: ${reason}`,
|
|
914
|
+
name: call.name,
|
|
915
|
+
tool_call_id: call.id ?? '',
|
|
916
|
+
}));
|
|
917
|
+
if (this.hookRegistry.hasHookFor('PermissionDenied', runId)) {
|
|
918
|
+
// Fire-and-forget — denial accounting must not block dispatch.
|
|
919
|
+
void executeHooks({
|
|
920
|
+
registry: this.hookRegistry,
|
|
921
|
+
input: {
|
|
922
|
+
hook_event_name: 'PermissionDenied',
|
|
923
|
+
runId,
|
|
924
|
+
threadId,
|
|
925
|
+
agentId: this.agentId,
|
|
926
|
+
toolName: call.name,
|
|
927
|
+
toolInput: call.args,
|
|
928
|
+
toolUseId: call.id ?? '',
|
|
929
|
+
reason,
|
|
930
|
+
},
|
|
931
|
+
sessionId: runId,
|
|
932
|
+
matchQuery: call.name,
|
|
933
|
+
}).catch(() => {
|
|
934
|
+
/* swallow — denial is informational */
|
|
935
|
+
});
|
|
936
|
+
}
|
|
937
|
+
continue;
|
|
938
|
+
}
|
|
939
|
+
if (hookResult.updatedInput != null &&
|
|
940
|
+
typeof hookResult.updatedInput === 'object') {
|
|
941
|
+
call.args = hookResult.updatedInput;
|
|
942
|
+
}
|
|
943
|
+
surviving.push(call);
|
|
944
|
+
}
|
|
945
|
+
postHookCalls = surviving;
|
|
946
|
+
if (postHookCalls.length === 0) {
|
|
947
|
+
return {
|
|
948
|
+
toolMessages: [...denialMessages, ...hookDenialMessages],
|
|
949
|
+
injected: [],
|
|
950
|
+
};
|
|
951
|
+
}
|
|
698
952
|
}
|
|
699
|
-
|
|
953
|
+
/**
|
|
954
|
+
* Tool output reference resolution (upstream PR #114): walk each call's
|
|
955
|
+
* args and substitute `{{tool<i>turn<n>}}` placeholders with the stored
|
|
956
|
+
* raw output. Captured here BEFORE request shaping so the substituted
|
|
957
|
+
* args flow through the rest of the dispatch unchanged.
|
|
958
|
+
*
|
|
959
|
+
* Failures are non-fatal: the registry resolver returns the original
|
|
960
|
+
* string unchanged for unknown keys, and surfaces them via `unresolved`
|
|
961
|
+
* which we currently log-only. Future work can route unresolved-key
|
|
962
|
+
* complaints into a hint message for the LLM.
|
|
963
|
+
*/
|
|
964
|
+
const batchTurn = this.toolOutputTurn++;
|
|
965
|
+
if (this.toolOutputRegistry != null && runId != null) {
|
|
966
|
+
const registry = this.toolOutputRegistry;
|
|
967
|
+
for (const call of postHookCalls) {
|
|
968
|
+
const args = call.args;
|
|
969
|
+
if (args == null)
|
|
970
|
+
continue;
|
|
971
|
+
try {
|
|
972
|
+
const { resolved } = registry.resolve(runId, args);
|
|
973
|
+
call.args = resolved;
|
|
974
|
+
}
|
|
975
|
+
catch {
|
|
976
|
+
/* leave args untouched on resolver failure */
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
const requests = postHookCalls.map((call) => {
|
|
700
981
|
const turn = this.toolUsageCount.get(call.name) ?? 0;
|
|
701
982
|
this.toolUsageCount.set(call.name, turn + 1);
|
|
702
983
|
// Recover truncated args from streaming buffer (same as runTool path)
|
|
@@ -731,7 +1012,77 @@ class ToolNode extends RunnableCallable {
|
|
|
731
1012
|
safeDispatchCustomEvent(GraphEvents.ON_TOOL_EXECUTE, request, config);
|
|
732
1013
|
});
|
|
733
1014
|
this.storeCodeSessionFromResults(results, requests);
|
|
734
|
-
const
|
|
1015
|
+
const injected = [];
|
|
1016
|
+
for (const result of results) {
|
|
1017
|
+
if (result.injectedMessages && result.injectedMessages.length > 0) {
|
|
1018
|
+
try {
|
|
1019
|
+
injected.push(...this.convertInjectedMessages(result.injectedMessages));
|
|
1020
|
+
}
|
|
1021
|
+
catch (e) {
|
|
1022
|
+
// eslint-disable-next-line no-console
|
|
1023
|
+
console.warn(`[ToolNode] Failed to convert injectedMessages for toolCallId=${result.toolCallId}:`, e instanceof Error ? e.message : e);
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
/**
|
|
1028
|
+
* Fire PostToolUse / PostToolUseFailure hooks after results are in.
|
|
1029
|
+
* These run in parallel and never block the return — failures are
|
|
1030
|
+
* swallowed so a hook bug can't masquerade as a tool failure.
|
|
1031
|
+
*/
|
|
1032
|
+
if (runId != null && this.hookRegistry != null) {
|
|
1033
|
+
const hasPost = this.hookRegistry.hasHookFor('PostToolUse', runId);
|
|
1034
|
+
const hasFail = this.hookRegistry.hasHookFor('PostToolUseFailure', runId);
|
|
1035
|
+
if (hasPost || hasFail) {
|
|
1036
|
+
const postPromises = [];
|
|
1037
|
+
for (const result of results) {
|
|
1038
|
+
const request = requests.find((r) => r.id === result.toolCallId);
|
|
1039
|
+
if (!request)
|
|
1040
|
+
continue;
|
|
1041
|
+
if (result.status === 'success' && hasPost) {
|
|
1042
|
+
postPromises.push(executeHooks({
|
|
1043
|
+
registry: this.hookRegistry,
|
|
1044
|
+
input: {
|
|
1045
|
+
hook_event_name: 'PostToolUse',
|
|
1046
|
+
runId,
|
|
1047
|
+
threadId,
|
|
1048
|
+
agentId: this.agentId,
|
|
1049
|
+
toolName: request.name,
|
|
1050
|
+
toolInput: request.args,
|
|
1051
|
+
toolOutput: result.content,
|
|
1052
|
+
toolUseId: result.toolCallId,
|
|
1053
|
+
stepId: this.toolCallStepIds?.get(result.toolCallId),
|
|
1054
|
+
turn: request.turn,
|
|
1055
|
+
},
|
|
1056
|
+
sessionId: runId,
|
|
1057
|
+
matchQuery: request.name,
|
|
1058
|
+
}).catch(() => undefined));
|
|
1059
|
+
}
|
|
1060
|
+
else if (result.status === 'error' && hasFail) {
|
|
1061
|
+
postPromises.push(executeHooks({
|
|
1062
|
+
registry: this.hookRegistry,
|
|
1063
|
+
input: {
|
|
1064
|
+
hook_event_name: 'PostToolUseFailure',
|
|
1065
|
+
runId,
|
|
1066
|
+
threadId,
|
|
1067
|
+
agentId: this.agentId,
|
|
1068
|
+
toolName: request.name,
|
|
1069
|
+
toolInput: request.args,
|
|
1070
|
+
toolUseId: result.toolCallId,
|
|
1071
|
+
error: result.errorMessage ?? 'Unknown error',
|
|
1072
|
+
stepId: this.toolCallStepIds?.get(result.toolCallId),
|
|
1073
|
+
turn: request.turn,
|
|
1074
|
+
},
|
|
1075
|
+
sessionId: runId,
|
|
1076
|
+
matchQuery: request.name,
|
|
1077
|
+
}).catch(() => undefined));
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
if (postPromises.length > 0) {
|
|
1081
|
+
await Promise.all(postPromises);
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
const eventMessages = results.map((result, idx) => {
|
|
735
1086
|
const request = requests.find((r) => r.id === result.toolCallId);
|
|
736
1087
|
const toolName = request?.name ?? 'unknown';
|
|
737
1088
|
const stepId = this.toolCallStepIds?.get(result.toolCallId) ?? '';
|
|
@@ -757,12 +1108,40 @@ class ToolNode extends RunnableCallable {
|
|
|
757
1108
|
typeof result.content === 'string'
|
|
758
1109
|
? result.content
|
|
759
1110
|
: JSON.stringify(result.content);
|
|
1111
|
+
/**
|
|
1112
|
+
* Tool output reference — lazy annotation (upstream PRs #114 + #117).
|
|
1113
|
+
* Register the raw output under `tool<idx>turn<turn>` in the
|
|
1114
|
+
* registry but leave `ToolMessage.content` clean. Stamp the ref
|
|
1115
|
+
* metadata into `additional_kwargs` instead. The lazy
|
|
1116
|
+
* `annotateMessagesForLLM` transform applies the visible
|
|
1117
|
+
* `[ref: …]` / `_ref` annotation only on the transient copy sent
|
|
1118
|
+
* to the model. Persisted message stays unannotated so
|
|
1119
|
+
* conversation exports / pruning / token accounting stay clean.
|
|
1120
|
+
*/
|
|
1121
|
+
const additionalKwargs = {};
|
|
1122
|
+
if (this.toolOutputRegistry != null && runId != null) {
|
|
1123
|
+
try {
|
|
1124
|
+
const refKey = buildReferenceKey(idx, batchTurn);
|
|
1125
|
+
this.toolOutputRegistry.set(runId, refKey, contentString);
|
|
1126
|
+
const meta = {
|
|
1127
|
+
_refKey: refKey,
|
|
1128
|
+
_refScope: runId,
|
|
1129
|
+
};
|
|
1130
|
+
Object.assign(additionalKwargs, meta);
|
|
1131
|
+
}
|
|
1132
|
+
catch {
|
|
1133
|
+
/* registry store failure is non-fatal — message stays clean, no annotation */
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
760
1136
|
toolMessage = new ToolMessage({
|
|
761
1137
|
status: 'success',
|
|
762
1138
|
name: toolName,
|
|
763
1139
|
content: contentString,
|
|
764
1140
|
artifact: result.artifact,
|
|
765
1141
|
tool_call_id: result.toolCallId,
|
|
1142
|
+
additional_kwargs: Object.keys(additionalKwargs).length > 0
|
|
1143
|
+
? additionalKwargs
|
|
1144
|
+
: undefined,
|
|
766
1145
|
});
|
|
767
1146
|
}
|
|
768
1147
|
const tool_call = {
|
|
@@ -785,7 +1164,14 @@ class ToolNode extends RunnableCallable {
|
|
|
785
1164
|
safeDispatchCustomEvent(GraphEvents.ON_RUN_STEP_COMPLETED, runStepCompletedData, config);
|
|
786
1165
|
return toolMessage;
|
|
787
1166
|
});
|
|
788
|
-
return
|
|
1167
|
+
return {
|
|
1168
|
+
toolMessages: [
|
|
1169
|
+
...denialMessages,
|
|
1170
|
+
...hookDenialMessages,
|
|
1171
|
+
...eventMessages,
|
|
1172
|
+
],
|
|
1173
|
+
injected,
|
|
1174
|
+
};
|
|
789
1175
|
}
|
|
790
1176
|
/**
|
|
791
1177
|
* Execute all tool calls via ON_TOOL_EXECUTE event dispatch.
|
|
@@ -794,19 +1180,42 @@ class ToolNode extends RunnableCallable {
|
|
|
794
1180
|
async executeViaEvent(toolCalls, config,
|
|
795
1181
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
796
1182
|
input) {
|
|
797
|
-
const
|
|
1183
|
+
const { toolMessages, injected } = await this.dispatchToolEvents(toolCalls, config);
|
|
1184
|
+
const outputs = [...toolMessages, ...injected];
|
|
798
1185
|
return (Array.isArray(input) ? outputs : { messages: outputs });
|
|
799
1186
|
}
|
|
800
1187
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
801
1188
|
async run(input, config) {
|
|
802
1189
|
this.toolCallTurns.clear();
|
|
1190
|
+
/**
|
|
1191
|
+
* Per-batch local map for resolved (post-substitution) args. Lives
|
|
1192
|
+
* on the stack so concurrent `run()` calls on the same ToolNode
|
|
1193
|
+
* cannot read or wipe each other's entries.
|
|
1194
|
+
*/
|
|
1195
|
+
const resolvedArgsByCallId = new Map();
|
|
1196
|
+
/**
|
|
1197
|
+
* Claim this batch's turn synchronously from the registry (or fall
|
|
1198
|
+
* back to 0 when the feature is disabled). For anonymous callers
|
|
1199
|
+
* (no `run_id` in config), mint a unique per-batch scope id so two
|
|
1200
|
+
* concurrent anonymous invocations don't target the same bucket.
|
|
1201
|
+
*/
|
|
1202
|
+
const incomingRunId = config.configurable?.run_id;
|
|
1203
|
+
const batchScopeId = incomingRunId ?? `\0anon-${this.anonBatchCounter++}`;
|
|
1204
|
+
const batchTurn = this.toolOutputRegistry?.nextTurn(batchScopeId) ?? 0;
|
|
803
1205
|
let outputs;
|
|
804
1206
|
if (this.isSendInput(input)) {
|
|
805
1207
|
const isDirectTool = this.directToolNames?.has(input.lg_tool_call.name);
|
|
806
1208
|
if (this.eventDrivenMode && isDirectTool !== true) {
|
|
807
1209
|
return this.executeViaEvent([input.lg_tool_call], config, input);
|
|
808
1210
|
}
|
|
809
|
-
outputs = [
|
|
1211
|
+
outputs = [
|
|
1212
|
+
await this.runTool(input.lg_tool_call, config, {
|
|
1213
|
+
batchIndex: 0,
|
|
1214
|
+
turn: batchTurn,
|
|
1215
|
+
batchScopeId,
|
|
1216
|
+
resolvedArgsByCallId,
|
|
1217
|
+
}),
|
|
1218
|
+
];
|
|
810
1219
|
this.handleRunToolCompletions([input.lg_tool_call], outputs, config);
|
|
811
1220
|
}
|
|
812
1221
|
else {
|
|
@@ -857,21 +1266,38 @@ class ToolNode extends RunnableCallable {
|
|
|
857
1266
|
const directCalls = filteredCalls.filter((c) => this.directToolNames.has(c.name));
|
|
858
1267
|
const eventCalls = filteredCalls.filter((c) => !this.directToolNames.has(c.name));
|
|
859
1268
|
// Run direct tools and event tools in parallel — they are independent
|
|
860
|
-
const [directOutputs,
|
|
1269
|
+
const [directOutputs, eventDispatch] = (await Promise.all([
|
|
861
1270
|
directCalls.length > 0
|
|
862
|
-
? Promise.all(directCalls.map((call) => this.runTool(call, config
|
|
1271
|
+
? Promise.all(directCalls.map((call, idx) => this.runTool(call, config, {
|
|
1272
|
+
batchIndex: idx,
|
|
1273
|
+
turn: batchTurn,
|
|
1274
|
+
batchScopeId,
|
|
1275
|
+
resolvedArgsByCallId,
|
|
1276
|
+
})))
|
|
863
1277
|
: [],
|
|
864
1278
|
eventCalls.length > 0
|
|
865
1279
|
? this.dispatchToolEvents(eventCalls, config)
|
|
866
|
-
: [],
|
|
1280
|
+
: { toolMessages: [], injected: [] },
|
|
867
1281
|
]));
|
|
868
1282
|
if (directCalls.length > 0 && directOutputs.length > 0) {
|
|
869
1283
|
this.handleRunToolCompletions(directCalls, directOutputs, config);
|
|
870
1284
|
}
|
|
871
|
-
|
|
1285
|
+
// Injected messages MUST follow ToolMessages so the AIMessage
|
|
1286
|
+
// tool_calls -> ToolMessage adjacency required by some providers
|
|
1287
|
+
// is preserved.
|
|
1288
|
+
outputs = [
|
|
1289
|
+
...directOutputs,
|
|
1290
|
+
...eventDispatch.toolMessages,
|
|
1291
|
+
...eventDispatch.injected,
|
|
1292
|
+
];
|
|
872
1293
|
}
|
|
873
1294
|
else {
|
|
874
|
-
outputs = await Promise.all(filteredCalls.map((call) => this.runTool(call, config
|
|
1295
|
+
outputs = await Promise.all(filteredCalls.map((call, idx) => this.runTool(call, config, {
|
|
1296
|
+
batchIndex: idx,
|
|
1297
|
+
turn: batchTurn,
|
|
1298
|
+
batchScopeId,
|
|
1299
|
+
resolvedArgsByCallId,
|
|
1300
|
+
})));
|
|
875
1301
|
this.handleRunToolCompletions(filteredCalls, outputs, config);
|
|
876
1302
|
}
|
|
877
1303
|
}
|