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