@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
package/src/messages/prune.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AIMessage,
|
|
3
3
|
BaseMessage,
|
|
4
|
+
ToolMessage,
|
|
4
5
|
UsageMetadata,
|
|
5
6
|
} from '@langchain/core/messages';
|
|
6
7
|
import type {
|
|
@@ -9,7 +10,14 @@ import type {
|
|
|
9
10
|
ReasoningContentText,
|
|
10
11
|
} from '@/types/stream';
|
|
11
12
|
import type { TokenCounter } from '@/types/run';
|
|
12
|
-
import { ContentTypes, Providers } from '@/common';
|
|
13
|
+
import { ContentTypes, Constants, Providers } from '@/common';
|
|
14
|
+
import type { ContextPruningConfig } from '@/types/graph';
|
|
15
|
+
import {
|
|
16
|
+
calculateMaxToolResultChars,
|
|
17
|
+
truncateToolResultContent,
|
|
18
|
+
truncateToolInput,
|
|
19
|
+
} from '@/utils/truncation';
|
|
20
|
+
import { applyContextPruning } from './contextPruning';
|
|
13
21
|
|
|
14
22
|
export type PruneMessagesFactoryParams = {
|
|
15
23
|
provider?: Providers;
|
|
@@ -18,6 +26,15 @@ export type PruneMessagesFactoryParams = {
|
|
|
18
26
|
tokenCounter: TokenCounter;
|
|
19
27
|
indexTokenCountMap: Record<string, number | undefined>;
|
|
20
28
|
thinkingEnabled?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Optional position-based content degradation config. When `enabled: true`,
|
|
31
|
+
* tool result messages outside the protected zone (system + last N assistant
|
|
32
|
+
* turns + image content) are soft-trimmed (head + tail) once their
|
|
33
|
+
* position-age exceeds `softTrimRatio`, then hard-cleared with a placeholder
|
|
34
|
+
* once age exceeds `hardClearRatio`. Defaults disabled to preserve existing
|
|
35
|
+
* behavior — opt in per deployment.
|
|
36
|
+
*/
|
|
37
|
+
contextPruningConfig?: ContextPruningConfig;
|
|
21
38
|
};
|
|
22
39
|
export type PruneMessagesParams = {
|
|
23
40
|
messages: BaseMessage[];
|
|
@@ -142,6 +159,7 @@ export function getMessagesWithinTokenLimit({
|
|
|
142
159
|
tokenCounter,
|
|
143
160
|
thinkingStartIndex: _thinkingStartIndex = -1,
|
|
144
161
|
reasoningType = ContentTypes.THINKING,
|
|
162
|
+
instructionTokens: _instructionTokens = 0,
|
|
145
163
|
}: {
|
|
146
164
|
messages: BaseMessage[];
|
|
147
165
|
maxContextTokens: number;
|
|
@@ -151,6 +169,13 @@ export function getMessagesWithinTokenLimit({
|
|
|
151
169
|
tokenCounter: TokenCounter;
|
|
152
170
|
thinkingStartIndex?: number;
|
|
153
171
|
reasoningType?: ContentTypes.THINKING | ContentTypes.REASONING_CONTENT;
|
|
172
|
+
/**
|
|
173
|
+
* Token overhead for instructions (system message + tool schemas + summary)
|
|
174
|
+
* that are NOT included in `messages`. When messages[0] is already a
|
|
175
|
+
* SystemMessage the budget is deducted from its indexTokenCountMap entry
|
|
176
|
+
* as before; otherwise this value is subtracted from the available budget.
|
|
177
|
+
*/
|
|
178
|
+
instructionTokens?: number;
|
|
154
179
|
}): PruningResult {
|
|
155
180
|
// Every reply is primed with <|start|>assistant<|message|>, so we
|
|
156
181
|
// start with 3 tokens for the label after all messages have been counted.
|
|
@@ -158,7 +183,7 @@ export function getMessagesWithinTokenLimit({
|
|
|
158
183
|
const instructions =
|
|
159
184
|
_messages[0]?.getType() === 'system' ? _messages[0] : undefined;
|
|
160
185
|
const instructionsTokenCount =
|
|
161
|
-
instructions != null ? (indexTokenCountMap[0] ?? 0) :
|
|
186
|
+
instructions != null ? (indexTokenCountMap[0] ?? 0) : _instructionTokens;
|
|
162
187
|
const initialContextTokens = maxContextTokens - instructionsTokenCount;
|
|
163
188
|
let remainingContextTokens = initialContextTokens;
|
|
164
189
|
let startType = _startType;
|
|
@@ -432,6 +457,559 @@ export function checkValidNumber(value: unknown): value is number {
|
|
|
432
457
|
return typeof value === 'number' && !isNaN(value) && value > 0;
|
|
433
458
|
}
|
|
434
459
|
|
|
460
|
+
/**
|
|
461
|
+
* Returns the set of tool_call ids referenced by an AIMessage — both via the
|
|
462
|
+
* canonical `tool_calls` array and via inline `tool_use` / `tool_call` content
|
|
463
|
+
* blocks (Anthropic-style content arrays).
|
|
464
|
+
*/
|
|
465
|
+
function getToolCallIds(message: BaseMessage): Set<string> {
|
|
466
|
+
if (message.getType() !== 'ai') {
|
|
467
|
+
return new Set<string>();
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
const ids = new Set<string>();
|
|
471
|
+
const aiMessage = message as AIMessage;
|
|
472
|
+
for (const toolCall of aiMessage.tool_calls ?? []) {
|
|
473
|
+
if (typeof toolCall.id === 'string' && toolCall.id.length > 0) {
|
|
474
|
+
ids.add(toolCall.id);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
if (Array.isArray(aiMessage.content)) {
|
|
479
|
+
for (const part of aiMessage.content) {
|
|
480
|
+
if (typeof part !== 'object') {
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
483
|
+
const record = part as { type?: unknown; id?: unknown };
|
|
484
|
+
if (
|
|
485
|
+
(record.type === 'tool_use' || record.type === 'tool_call') &&
|
|
486
|
+
typeof record.id === 'string' &&
|
|
487
|
+
record.id.length > 0
|
|
488
|
+
) {
|
|
489
|
+
ids.add(record.id);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
return ids;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
function getToolResultId(message: BaseMessage): string | null {
|
|
498
|
+
if (message.getType() !== 'tool') {
|
|
499
|
+
return null;
|
|
500
|
+
}
|
|
501
|
+
const toolMessage = message as ToolMessage & {
|
|
502
|
+
tool_call_id?: unknown;
|
|
503
|
+
toolCallId?: unknown;
|
|
504
|
+
};
|
|
505
|
+
if (
|
|
506
|
+
typeof toolMessage.tool_call_id === 'string' &&
|
|
507
|
+
toolMessage.tool_call_id.length > 0
|
|
508
|
+
) {
|
|
509
|
+
return toolMessage.tool_call_id;
|
|
510
|
+
}
|
|
511
|
+
if (
|
|
512
|
+
typeof toolMessage.toolCallId === 'string' &&
|
|
513
|
+
toolMessage.toolCallId.length > 0
|
|
514
|
+
) {
|
|
515
|
+
return toolMessage.toolCallId;
|
|
516
|
+
}
|
|
517
|
+
return null;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
function resolveTokenCountForMessage({
|
|
521
|
+
message,
|
|
522
|
+
messageIndexMap,
|
|
523
|
+
tokenCounter,
|
|
524
|
+
indexTokenCountMap,
|
|
525
|
+
}: {
|
|
526
|
+
message: BaseMessage;
|
|
527
|
+
messageIndexMap: Map<BaseMessage, number>;
|
|
528
|
+
tokenCounter: TokenCounter;
|
|
529
|
+
indexTokenCountMap: Record<string, number | undefined>;
|
|
530
|
+
}): number {
|
|
531
|
+
const originalIndex = messageIndexMap.get(message) ?? -1;
|
|
532
|
+
if (originalIndex > -1 && indexTokenCountMap[originalIndex] != null) {
|
|
533
|
+
return indexTokenCountMap[originalIndex] as number;
|
|
534
|
+
}
|
|
535
|
+
return tokenCounter(message);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Repairs orphan tool messages in a pruned context. Drops `ToolMessage`s whose
|
|
540
|
+
* matching `AIMessage` was pruned, and strips orphan `tool_use` content blocks
|
|
541
|
+
* (and `tool_calls` entries) from `AIMessage`s whose corresponding tool results
|
|
542
|
+
* are missing. Without this, Anthropic / Bedrock / OpenAI reject the request
|
|
543
|
+
* with a structural validation 400.
|
|
544
|
+
*
|
|
545
|
+
* Intended to run on the post-prune `context` array (not the pre-prune
|
|
546
|
+
* `allMessages`). The dropped messages are returned so the caller can append
|
|
547
|
+
* them to `messagesToRefine` for summarization fidelity.
|
|
548
|
+
*/
|
|
549
|
+
export function repairOrphanedToolMessages({
|
|
550
|
+
context,
|
|
551
|
+
allMessages,
|
|
552
|
+
tokenCounter,
|
|
553
|
+
indexTokenCountMap,
|
|
554
|
+
}: {
|
|
555
|
+
context: BaseMessage[];
|
|
556
|
+
allMessages: BaseMessage[];
|
|
557
|
+
tokenCounter: TokenCounter;
|
|
558
|
+
indexTokenCountMap: Record<string, number | undefined>;
|
|
559
|
+
}): {
|
|
560
|
+
context: BaseMessage[];
|
|
561
|
+
reclaimedTokens: number;
|
|
562
|
+
droppedOrphanCount: number;
|
|
563
|
+
/** Messages removed from context during orphan repair. These should be
|
|
564
|
+
* appended to `messagesToRefine` so that summarization can still see them
|
|
565
|
+
* (e.g. a ToolMessage whose parent AI was pruned). */
|
|
566
|
+
droppedMessages: BaseMessage[];
|
|
567
|
+
} {
|
|
568
|
+
const messageIndexMap = new Map<BaseMessage, number>();
|
|
569
|
+
for (let i = 0; i < allMessages.length; i++) {
|
|
570
|
+
messageIndexMap.set(allMessages[i], i);
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
const validToolCallIds = new Set<string>();
|
|
574
|
+
const presentToolResultIds = new Set<string>();
|
|
575
|
+
for (const message of context) {
|
|
576
|
+
for (const id of getToolCallIds(message)) {
|
|
577
|
+
validToolCallIds.add(id);
|
|
578
|
+
}
|
|
579
|
+
const resultId = getToolResultId(message);
|
|
580
|
+
if (resultId != null) {
|
|
581
|
+
presentToolResultIds.add(resultId);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
let reclaimedTokens = 0;
|
|
586
|
+
let droppedOrphanCount = 0;
|
|
587
|
+
const repairedContext: BaseMessage[] = [];
|
|
588
|
+
const droppedMessages: BaseMessage[] = [];
|
|
589
|
+
|
|
590
|
+
for (const message of context) {
|
|
591
|
+
if (message.getType() === 'tool') {
|
|
592
|
+
const toolResultId = getToolResultId(message);
|
|
593
|
+
if (toolResultId == null || !validToolCallIds.has(toolResultId)) {
|
|
594
|
+
droppedOrphanCount += 1;
|
|
595
|
+
reclaimedTokens += resolveTokenCountForMessage({
|
|
596
|
+
message,
|
|
597
|
+
tokenCounter,
|
|
598
|
+
messageIndexMap,
|
|
599
|
+
indexTokenCountMap,
|
|
600
|
+
});
|
|
601
|
+
droppedMessages.push(message);
|
|
602
|
+
continue;
|
|
603
|
+
}
|
|
604
|
+
repairedContext.push(message);
|
|
605
|
+
continue;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
if (message.getType() === 'ai' && message instanceof AIMessage) {
|
|
609
|
+
const toolCallIds = getToolCallIds(message);
|
|
610
|
+
if (toolCallIds.size > 0) {
|
|
611
|
+
let hasOrphanToolCalls = false;
|
|
612
|
+
for (const id of toolCallIds) {
|
|
613
|
+
if (!presentToolResultIds.has(id)) {
|
|
614
|
+
hasOrphanToolCalls = true;
|
|
615
|
+
break;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
if (hasOrphanToolCalls) {
|
|
619
|
+
const originalTokens = resolveTokenCountForMessage({
|
|
620
|
+
message,
|
|
621
|
+
messageIndexMap,
|
|
622
|
+
tokenCounter,
|
|
623
|
+
indexTokenCountMap,
|
|
624
|
+
});
|
|
625
|
+
const stripped = stripOrphanToolUseBlocks(
|
|
626
|
+
message,
|
|
627
|
+
presentToolResultIds
|
|
628
|
+
);
|
|
629
|
+
if (stripped != null) {
|
|
630
|
+
const strippedTokens = tokenCounter(stripped);
|
|
631
|
+
reclaimedTokens += originalTokens - strippedTokens;
|
|
632
|
+
repairedContext.push(stripped);
|
|
633
|
+
} else {
|
|
634
|
+
droppedOrphanCount += 1;
|
|
635
|
+
reclaimedTokens += originalTokens;
|
|
636
|
+
droppedMessages.push(message);
|
|
637
|
+
}
|
|
638
|
+
continue;
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
repairedContext.push(message);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
return {
|
|
647
|
+
context: repairedContext,
|
|
648
|
+
reclaimedTokens,
|
|
649
|
+
droppedOrphanCount,
|
|
650
|
+
droppedMessages,
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/**
|
|
655
|
+
* Strips tool_use content blocks and tool_calls entries from an AI message
|
|
656
|
+
* when their corresponding ToolMessages are not in the context.
|
|
657
|
+
* Returns null if the message has no content left after stripping.
|
|
658
|
+
*/
|
|
659
|
+
function stripOrphanToolUseBlocks(
|
|
660
|
+
message: AIMessage,
|
|
661
|
+
presentToolResultIds: Set<string>
|
|
662
|
+
): AIMessage | null {
|
|
663
|
+
const keptToolCalls = (message.tool_calls ?? []).filter(
|
|
664
|
+
(tc) => typeof tc.id === 'string' && presentToolResultIds.has(tc.id)
|
|
665
|
+
);
|
|
666
|
+
|
|
667
|
+
let keptContent: MessageContentComplex[] | string;
|
|
668
|
+
if (Array.isArray(message.content)) {
|
|
669
|
+
const filtered = (message.content as MessageContentComplex[]).filter(
|
|
670
|
+
(block) => {
|
|
671
|
+
if (typeof block !== 'object') {
|
|
672
|
+
return true;
|
|
673
|
+
}
|
|
674
|
+
const record = block as { type?: unknown; id?: unknown };
|
|
675
|
+
if (
|
|
676
|
+
(record.type === 'tool_use' || record.type === 'tool_call') &&
|
|
677
|
+
typeof record.id === 'string'
|
|
678
|
+
) {
|
|
679
|
+
return presentToolResultIds.has(record.id);
|
|
680
|
+
}
|
|
681
|
+
return true;
|
|
682
|
+
}
|
|
683
|
+
);
|
|
684
|
+
|
|
685
|
+
if (filtered.length === 0) {
|
|
686
|
+
return null;
|
|
687
|
+
}
|
|
688
|
+
keptContent = filtered;
|
|
689
|
+
} else {
|
|
690
|
+
keptContent = message.content;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
return new AIMessage({
|
|
694
|
+
...message,
|
|
695
|
+
content: keptContent,
|
|
696
|
+
tool_calls: keptToolCalls.length > 0 ? keptToolCalls : undefined,
|
|
697
|
+
});
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* Lightweight structural cleanup: strips orphan tool_use blocks from AI messages
|
|
702
|
+
* and drops orphan ToolMessages whose AI counterpart is missing.
|
|
703
|
+
*
|
|
704
|
+
* Unlike `repairOrphanedToolMessages`, this does NOT track tokens — it is
|
|
705
|
+
* intended as a final safety net right before model invocation to prevent
|
|
706
|
+
* Anthropic / Bedrock structural validation errors.
|
|
707
|
+
*
|
|
708
|
+
* Uses duck-typing instead of `getType()` because messages at this stage
|
|
709
|
+
* may be plain objects (from LangGraph state serialization) rather than
|
|
710
|
+
* proper BaseMessage class instances.
|
|
711
|
+
*
|
|
712
|
+
* Includes a fast-path: if every tool_call has a matching tool_result and
|
|
713
|
+
* vice-versa, the original array is returned immediately with zero allocation.
|
|
714
|
+
*/
|
|
715
|
+
export function sanitizeOrphanToolBlocks(
|
|
716
|
+
messages: BaseMessage[]
|
|
717
|
+
): BaseMessage[] {
|
|
718
|
+
const allToolCallIds = new Set<string>();
|
|
719
|
+
const allToolResultIds = new Set<string>();
|
|
720
|
+
|
|
721
|
+
for (const msg of messages) {
|
|
722
|
+
const msgAny = msg as unknown as Record<string, unknown>;
|
|
723
|
+
const toolCalls = msgAny.tool_calls as Array<{ id?: string }> | undefined;
|
|
724
|
+
if (Array.isArray(toolCalls)) {
|
|
725
|
+
for (const tc of toolCalls) {
|
|
726
|
+
if (
|
|
727
|
+
typeof tc.id === 'string' &&
|
|
728
|
+
tc.id.length > 0 &&
|
|
729
|
+
!tc.id.startsWith(Constants.ANTHROPIC_SERVER_TOOL_PREFIX)
|
|
730
|
+
) {
|
|
731
|
+
allToolCallIds.add(tc.id);
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
if (Array.isArray(msgAny.content)) {
|
|
736
|
+
for (const block of msgAny.content as Array<Record<string, unknown>>) {
|
|
737
|
+
if (
|
|
738
|
+
typeof block === 'object' &&
|
|
739
|
+
(block.type === 'tool_use' || block.type === 'tool_call') &&
|
|
740
|
+
typeof block.id === 'string' &&
|
|
741
|
+
!block.id.startsWith(Constants.ANTHROPIC_SERVER_TOOL_PREFIX)
|
|
742
|
+
) {
|
|
743
|
+
allToolCallIds.add(block.id);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
const toolCallId = msgAny.tool_call_id as string | undefined;
|
|
748
|
+
if (typeof toolCallId === 'string' && toolCallId.length > 0) {
|
|
749
|
+
allToolResultIds.add(toolCallId);
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
let hasOrphans = false;
|
|
754
|
+
for (const id of allToolCallIds) {
|
|
755
|
+
if (!allToolResultIds.has(id)) {
|
|
756
|
+
hasOrphans = true;
|
|
757
|
+
break;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
if (!hasOrphans) {
|
|
761
|
+
for (const id of allToolResultIds) {
|
|
762
|
+
if (!allToolCallIds.has(id)) {
|
|
763
|
+
hasOrphans = true;
|
|
764
|
+
break;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
if (!hasOrphans) {
|
|
769
|
+
return messages;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
const result: BaseMessage[] = [];
|
|
773
|
+
const strippedAiIndices = new Set<number>();
|
|
774
|
+
|
|
775
|
+
for (const msg of messages) {
|
|
776
|
+
const msgAny = msg as unknown as Record<string, unknown>;
|
|
777
|
+
const msgType =
|
|
778
|
+
typeof (msg as { getType?: unknown }).getType === 'function'
|
|
779
|
+
? msg.getType()
|
|
780
|
+
: ((msgAny.role as string | undefined) ??
|
|
781
|
+
(msgAny._type as string | undefined));
|
|
782
|
+
|
|
783
|
+
const toolCallId = msgAny.tool_call_id as string | undefined;
|
|
784
|
+
if (
|
|
785
|
+
(msgType === 'tool' || msg instanceof ToolMessage) &&
|
|
786
|
+
typeof toolCallId === 'string' &&
|
|
787
|
+
!allToolCallIds.has(toolCallId)
|
|
788
|
+
) {
|
|
789
|
+
continue;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
const toolCalls = msgAny.tool_calls as Array<{ id?: string }> | undefined;
|
|
793
|
+
if (
|
|
794
|
+
(msgType === 'ai' ||
|
|
795
|
+
msgType === 'assistant' ||
|
|
796
|
+
msg instanceof AIMessage) &&
|
|
797
|
+
Array.isArray(toolCalls) &&
|
|
798
|
+
toolCalls.length > 0
|
|
799
|
+
) {
|
|
800
|
+
const hasOrphanCalls = toolCalls.some(
|
|
801
|
+
(tc) => typeof tc.id === 'string' && !allToolResultIds.has(tc.id)
|
|
802
|
+
);
|
|
803
|
+
if (hasOrphanCalls) {
|
|
804
|
+
if (msg instanceof AIMessage) {
|
|
805
|
+
const stripped = stripOrphanToolUseBlocks(msg, allToolResultIds);
|
|
806
|
+
if (stripped != null) {
|
|
807
|
+
strippedAiIndices.add(result.length);
|
|
808
|
+
result.push(stripped);
|
|
809
|
+
}
|
|
810
|
+
continue;
|
|
811
|
+
}
|
|
812
|
+
const keptToolCalls = toolCalls.filter(
|
|
813
|
+
(tc) => typeof tc.id === 'string' && allToolResultIds.has(tc.id)
|
|
814
|
+
);
|
|
815
|
+
const keptContent = Array.isArray(msgAny.content)
|
|
816
|
+
? (msgAny.content as Array<Record<string, unknown>>).filter(
|
|
817
|
+
(block) => {
|
|
818
|
+
if (typeof block !== 'object') return true;
|
|
819
|
+
if (
|
|
820
|
+
(block.type === 'tool_use' || block.type === 'tool_call') &&
|
|
821
|
+
typeof block.id === 'string'
|
|
822
|
+
) {
|
|
823
|
+
return allToolResultIds.has(block.id);
|
|
824
|
+
}
|
|
825
|
+
return true;
|
|
826
|
+
}
|
|
827
|
+
)
|
|
828
|
+
: msgAny.content;
|
|
829
|
+
if (
|
|
830
|
+
keptToolCalls.length === 0 &&
|
|
831
|
+
Array.isArray(keptContent) &&
|
|
832
|
+
keptContent.length === 0
|
|
833
|
+
) {
|
|
834
|
+
continue;
|
|
835
|
+
}
|
|
836
|
+
strippedAiIndices.add(result.length);
|
|
837
|
+
const patched = Object.create(
|
|
838
|
+
Object.getPrototypeOf(msg),
|
|
839
|
+
Object.getOwnPropertyDescriptors(msg)
|
|
840
|
+
);
|
|
841
|
+
patched.tool_calls = keptToolCalls.length > 0 ? keptToolCalls : [];
|
|
842
|
+
patched.content = keptContent;
|
|
843
|
+
result.push(patched as BaseMessage);
|
|
844
|
+
continue;
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
result.push(msg);
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
// Bedrock/Anthropic require the conversation to end with a user message;
|
|
852
|
+
// a stripped AI message (tool_use removed) represents a dead-end exchange.
|
|
853
|
+
while (result.length > 0 && strippedAiIndices.has(result.length - 1)) {
|
|
854
|
+
result.pop();
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
return result;
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
/**
|
|
861
|
+
* Pre-flight truncation: truncates oversized tool result string content before
|
|
862
|
+
* the budget walker runs. Older results get smaller budgets (recency factor),
|
|
863
|
+
* with a 200-char floor so even ancient entries keep diagnostic signal. Returns
|
|
864
|
+
* the number of ToolMessages truncated.
|
|
865
|
+
*/
|
|
866
|
+
export function preFlightTruncateToolResults(params: {
|
|
867
|
+
messages: BaseMessage[];
|
|
868
|
+
maxContextTokens: number;
|
|
869
|
+
indexTokenCountMap: Record<string, number | undefined>;
|
|
870
|
+
tokenCounter: TokenCounter;
|
|
871
|
+
}): number {
|
|
872
|
+
const { messages, maxContextTokens, indexTokenCountMap, tokenCounter } =
|
|
873
|
+
params;
|
|
874
|
+
const baseMaxChars = calculateMaxToolResultChars(maxContextTokens);
|
|
875
|
+
let truncatedCount = 0;
|
|
876
|
+
|
|
877
|
+
const toolIndices: number[] = [];
|
|
878
|
+
for (let i = 0; i < messages.length; i++) {
|
|
879
|
+
if (messages[i].getType() === 'tool') {
|
|
880
|
+
toolIndices.push(i);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
for (let t = 0; t < toolIndices.length; t++) {
|
|
885
|
+
const i = toolIndices[t];
|
|
886
|
+
const message = messages[i];
|
|
887
|
+
const content = message.content;
|
|
888
|
+
if (typeof content !== 'string') {
|
|
889
|
+
continue;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
const position = toolIndices.length > 1 ? t / (toolIndices.length - 1) : 1;
|
|
893
|
+
const recencyFactor = 0.2 + 0.8 * position;
|
|
894
|
+
const maxChars = Math.max(200, Math.floor(baseMaxChars * recencyFactor));
|
|
895
|
+
|
|
896
|
+
if (content.length <= maxChars) {
|
|
897
|
+
continue;
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
const truncated = truncateToolResultContent(content, maxChars);
|
|
901
|
+
const cloned = new ToolMessage({
|
|
902
|
+
content: truncated,
|
|
903
|
+
tool_call_id: (message as ToolMessage).tool_call_id,
|
|
904
|
+
name: message.name,
|
|
905
|
+
id: message.id,
|
|
906
|
+
additional_kwargs: message.additional_kwargs,
|
|
907
|
+
response_metadata: message.response_metadata,
|
|
908
|
+
});
|
|
909
|
+
messages[i] = cloned;
|
|
910
|
+
indexTokenCountMap[i] = tokenCounter(cloned);
|
|
911
|
+
truncatedCount++;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
return truncatedCount;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
/**
|
|
918
|
+
* Pre-flight truncation: truncates oversized `tool_use` input fields in AI messages.
|
|
919
|
+
*
|
|
920
|
+
* Tool call inputs (arguments) can be very large — e.g., code evaluation payloads from
|
|
921
|
+
* MCP tools like chrome-devtools. Since these tool calls have already been executed,
|
|
922
|
+
* the model only needs a summary of what was called, not the full arguments. Truncating
|
|
923
|
+
* them before pruning can prevent entire messages from being dropped.
|
|
924
|
+
*
|
|
925
|
+
* Uses 15% of the context window (in estimated characters, ~4 chars/token) as the
|
|
926
|
+
* per-input cap, capped at 200K chars.
|
|
927
|
+
*
|
|
928
|
+
* @returns The number of AI messages that had tool_use inputs truncated.
|
|
929
|
+
*/
|
|
930
|
+
export function preFlightTruncateToolCallInputs(params: {
|
|
931
|
+
messages: BaseMessage[];
|
|
932
|
+
maxContextTokens: number;
|
|
933
|
+
indexTokenCountMap: Record<string, number | undefined>;
|
|
934
|
+
tokenCounter: TokenCounter;
|
|
935
|
+
}): number {
|
|
936
|
+
const { messages, maxContextTokens, indexTokenCountMap, tokenCounter } =
|
|
937
|
+
params;
|
|
938
|
+
const maxInputChars = Math.min(
|
|
939
|
+
Math.floor(maxContextTokens * 0.15) * 4,
|
|
940
|
+
200_000
|
|
941
|
+
);
|
|
942
|
+
let truncatedCount = 0;
|
|
943
|
+
|
|
944
|
+
for (let i = 0; i < messages.length; i++) {
|
|
945
|
+
const message = messages[i];
|
|
946
|
+
if (message.getType() !== 'ai') {
|
|
947
|
+
continue;
|
|
948
|
+
}
|
|
949
|
+
if (!Array.isArray(message.content)) {
|
|
950
|
+
continue;
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
const originalContent = message.content as MessageContentComplex[];
|
|
954
|
+
const state = { changed: false };
|
|
955
|
+
const newContent = originalContent.map((block) => {
|
|
956
|
+
if (typeof block !== 'object') {
|
|
957
|
+
return block;
|
|
958
|
+
}
|
|
959
|
+
const record = block as Record<string, unknown>;
|
|
960
|
+
if (record.type !== 'tool_use' && record.type !== 'tool_call') {
|
|
961
|
+
return block;
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
const input = record.input;
|
|
965
|
+
if (input == null) {
|
|
966
|
+
return block;
|
|
967
|
+
}
|
|
968
|
+
const serialized =
|
|
969
|
+
typeof input === 'string' ? input : JSON.stringify(input);
|
|
970
|
+
if (serialized.length <= maxInputChars) {
|
|
971
|
+
return block;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
state.changed = true;
|
|
975
|
+
// Replaces original input with { _truncated, _originalChars } —
|
|
976
|
+
// safe because the tool call already executed in a prior turn.
|
|
977
|
+
return {
|
|
978
|
+
...record,
|
|
979
|
+
input: truncateToolInput(serialized, maxInputChars),
|
|
980
|
+
};
|
|
981
|
+
});
|
|
982
|
+
|
|
983
|
+
if (!state.changed) {
|
|
984
|
+
continue;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
const aiMsg = message as AIMessage;
|
|
988
|
+
const newToolCalls = (aiMsg.tool_calls ?? []).map((tc) => {
|
|
989
|
+
const serializedArgs = JSON.stringify(tc.args);
|
|
990
|
+
if (serializedArgs.length <= maxInputChars) {
|
|
991
|
+
return tc;
|
|
992
|
+
}
|
|
993
|
+
// Replaces original args with { _truncated, _originalChars } —
|
|
994
|
+
// safe because the tool call already executed in a prior turn.
|
|
995
|
+
return {
|
|
996
|
+
...tc,
|
|
997
|
+
args: truncateToolInput(serializedArgs, maxInputChars),
|
|
998
|
+
};
|
|
999
|
+
});
|
|
1000
|
+
|
|
1001
|
+
messages[i] = new AIMessage({
|
|
1002
|
+
...aiMsg,
|
|
1003
|
+
content: newContent,
|
|
1004
|
+
tool_calls: newToolCalls.length > 0 ? newToolCalls : undefined,
|
|
1005
|
+
});
|
|
1006
|
+
indexTokenCountMap[i] = tokenCounter(messages[i]);
|
|
1007
|
+
truncatedCount++;
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
return truncatedCount;
|
|
1011
|
+
}
|
|
1012
|
+
|
|
435
1013
|
type ThinkingBlocks = {
|
|
436
1014
|
thinking_blocks?: Array<{
|
|
437
1015
|
type: 'thinking';
|
|
@@ -449,10 +1027,18 @@ export function createPruneMessages(factoryParams: PruneMessagesFactoryParams) {
|
|
|
449
1027
|
0
|
|
450
1028
|
) as number;
|
|
451
1029
|
let runThinkingStartIndex = -1;
|
|
1030
|
+
/**
|
|
1031
|
+
* Original (pre-truncation) tool result content keyed by message index.
|
|
1032
|
+
* Lets the summarizer see full tool outputs even after pre-flight truncation
|
|
1033
|
+
* has shortened them in the live messages array. Cleared whenever the
|
|
1034
|
+
* factory is recreated (e.g. after a summarization checkpoint).
|
|
1035
|
+
*/
|
|
1036
|
+
const originalToolContent = new Map<number, string>();
|
|
452
1037
|
return function pruneMessages(params: PruneMessagesParams): {
|
|
453
1038
|
context: BaseMessage[];
|
|
454
1039
|
indexTokenCountMap: Record<string, number | undefined>;
|
|
455
1040
|
messagesToRefine: BaseMessage[];
|
|
1041
|
+
originalToolContent?: Map<number, string>;
|
|
456
1042
|
} {
|
|
457
1043
|
if (
|
|
458
1044
|
factoryParams.provider === Providers.OPENAI &&
|
|
@@ -586,6 +1172,51 @@ export function createPruneMessages(factoryParams: PruneMessagesFactoryParams) {
|
|
|
586
1172
|
};
|
|
587
1173
|
}
|
|
588
1174
|
|
|
1175
|
+
/*
|
|
1176
|
+
* Pre-flight truncation: chop oversized tool result content and oversized
|
|
1177
|
+
* tool_use input args BEFORE the budget walker runs. Older results get
|
|
1178
|
+
* smaller per-message budgets (recencyFactor) so they degrade first while
|
|
1179
|
+
* recent turns stay intact. Saves the originals in `originalToolContent`
|
|
1180
|
+
* keyed by message index so the summarizer can later reconstruct full
|
|
1181
|
+
* fidelity even after the live array was shortened.
|
|
1182
|
+
*/
|
|
1183
|
+
for (let i = 0; i < params.messages.length; i++) {
|
|
1184
|
+
const m = params.messages[i];
|
|
1185
|
+
if (
|
|
1186
|
+
m.getType() === 'tool' &&
|
|
1187
|
+
typeof m.content === 'string' &&
|
|
1188
|
+
!originalToolContent.has(i)
|
|
1189
|
+
) {
|
|
1190
|
+
originalToolContent.set(i, m.content);
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
preFlightTruncateToolResults({
|
|
1194
|
+
messages: params.messages,
|
|
1195
|
+
maxContextTokens: factoryParams.maxTokens,
|
|
1196
|
+
indexTokenCountMap,
|
|
1197
|
+
tokenCounter: factoryParams.tokenCounter,
|
|
1198
|
+
});
|
|
1199
|
+
preFlightTruncateToolCallInputs({
|
|
1200
|
+
messages: params.messages,
|
|
1201
|
+
maxContextTokens: factoryParams.maxTokens,
|
|
1202
|
+
indexTokenCountMap,
|
|
1203
|
+
tokenCounter: factoryParams.tokenCounter,
|
|
1204
|
+
});
|
|
1205
|
+
|
|
1206
|
+
/*
|
|
1207
|
+
* Position-based content degradation: soft-trim then hard-clear older tool
|
|
1208
|
+
* results before the budget walker runs. Off by default — caller opts in
|
|
1209
|
+
* via `contextPruningConfig.enabled`.
|
|
1210
|
+
*/
|
|
1211
|
+
if (factoryParams.contextPruningConfig?.enabled) {
|
|
1212
|
+
applyContextPruning({
|
|
1213
|
+
messages: params.messages,
|
|
1214
|
+
indexTokenCountMap,
|
|
1215
|
+
tokenCounter: factoryParams.tokenCounter,
|
|
1216
|
+
config: factoryParams.contextPruningConfig,
|
|
1217
|
+
});
|
|
1218
|
+
}
|
|
1219
|
+
|
|
589
1220
|
const { context, thinkingStartIndex, messagesToRefine } =
|
|
590
1221
|
getMessagesWithinTokenLimit({
|
|
591
1222
|
maxContextTokens: factoryParams.maxTokens,
|
|
@@ -604,14 +1235,40 @@ export function createPruneMessages(factoryParams: PruneMessagesFactoryParams) {
|
|
|
604
1235
|
: undefined,
|
|
605
1236
|
});
|
|
606
1237
|
runThinkingStartIndex = thinkingStartIndex ?? -1;
|
|
1238
|
+
|
|
1239
|
+
/*
|
|
1240
|
+
* Orphan repair pass — drops tool messages whose AIMessage was pruned and
|
|
1241
|
+
* strips orphan tool_use blocks from AIMessages whose tool results are
|
|
1242
|
+
* missing. Without this, the budget walker can split tool_use ↔ tool_result
|
|
1243
|
+
* pairs and the provider rejects the request with a structural 400.
|
|
1244
|
+
* Dropped messages flow into messagesToRefine for summarization.
|
|
1245
|
+
*/
|
|
1246
|
+
const repaired = repairOrphanedToolMessages({
|
|
1247
|
+
context,
|
|
1248
|
+
allMessages: params.messages,
|
|
1249
|
+
tokenCounter: factoryParams.tokenCounter,
|
|
1250
|
+
indexTokenCountMap,
|
|
1251
|
+
});
|
|
1252
|
+
const finalContext = repaired.context;
|
|
1253
|
+
const finalMessagesToRefine =
|
|
1254
|
+
repaired.droppedMessages.length > 0
|
|
1255
|
+
? [...messagesToRefine, ...repaired.droppedMessages]
|
|
1256
|
+
: messagesToRefine;
|
|
1257
|
+
|
|
607
1258
|
/** The index is the first value of `context`, index relative to `params.messages` */
|
|
608
1259
|
lastCutOffIndex = Math.max(
|
|
609
1260
|
params.messages.length -
|
|
610
|
-
(
|
|
1261
|
+
(finalContext.length -
|
|
1262
|
+
(finalContext[0]?.getType() === 'system' ? 1 : 0)),
|
|
611
1263
|
0
|
|
612
1264
|
);
|
|
613
1265
|
|
|
614
|
-
return {
|
|
1266
|
+
return {
|
|
1267
|
+
context: finalContext,
|
|
1268
|
+
indexTokenCountMap,
|
|
1269
|
+
messagesToRefine: finalMessagesToRefine,
|
|
1270
|
+
originalToolContent,
|
|
1271
|
+
};
|
|
615
1272
|
};
|
|
616
1273
|
}
|
|
617
1274
|
|