@illuma-ai/agents 1.4.0-alpha.5 → 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 -117
- 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/index.mjs.map +1 -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 -24
- 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 -4
- 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 +58 -13
- 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 -5
- 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/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/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/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/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 -269
- 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 -248
- 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
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { AIMessage } from '@langchain/core/messages';
|
|
2
|
-
import { Providers, ContentTypes } from '../common/enum.mjs';
|
|
1
|
+
import { AIMessage, ToolMessage } from '@langchain/core/messages';
|
|
2
|
+
import { Providers, ContentTypes, Constants } from '../common/enum.mjs';
|
|
3
3
|
import '../tools/approval/constants.mjs';
|
|
4
|
+
import { truncateToolInput, truncateToolResultContent, calculateMaxToolResultChars } from '../utils/truncation.mjs';
|
|
5
|
+
import { applyContextPruning } from './contextPruning.mjs';
|
|
4
6
|
|
|
5
7
|
function isIndexInContext(arrayA, arrayB, targetIndex) {
|
|
6
8
|
const startingIndexInA = arrayA.length - arrayB.length;
|
|
@@ -82,12 +84,12 @@ function buildEmergencyContext(messages, endIndex) {
|
|
|
82
84
|
}
|
|
83
85
|
return result;
|
|
84
86
|
}
|
|
85
|
-
function getMessagesWithinTokenLimit({ messages: _messages, maxContextTokens, indexTokenCountMap, startType: _startType, thinkingEnabled, tokenCounter, thinkingStartIndex: _thinkingStartIndex = -1, reasoningType = ContentTypes.THINKING, }) {
|
|
87
|
+
function getMessagesWithinTokenLimit({ messages: _messages, maxContextTokens, indexTokenCountMap, startType: _startType, thinkingEnabled, tokenCounter, thinkingStartIndex: _thinkingStartIndex = -1, reasoningType = ContentTypes.THINKING, instructionTokens: _instructionTokens = 0, }) {
|
|
86
88
|
// Every reply is primed with <|start|>assistant<|message|>, so we
|
|
87
89
|
// start with 3 tokens for the label after all messages have been counted.
|
|
88
90
|
let currentTokenCount = 3;
|
|
89
91
|
const instructions = _messages[0]?.getType() === 'system' ? _messages[0] : undefined;
|
|
90
|
-
const instructionsTokenCount = instructions != null ? (indexTokenCountMap[0] ?? 0) :
|
|
92
|
+
const instructionsTokenCount = instructions != null ? (indexTokenCountMap[0] ?? 0) : _instructionTokens;
|
|
91
93
|
const initialContextTokens = maxContextTokens - instructionsTokenCount;
|
|
92
94
|
let remainingContextTokens = initialContextTokens;
|
|
93
95
|
let startType = _startType;
|
|
@@ -306,12 +308,443 @@ function getMessagesWithinTokenLimit({ messages: _messages, maxContextTokens, in
|
|
|
306
308
|
function checkValidNumber(value) {
|
|
307
309
|
return typeof value === 'number' && !isNaN(value) && value > 0;
|
|
308
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Returns the set of tool_call ids referenced by an AIMessage — both via the
|
|
313
|
+
* canonical `tool_calls` array and via inline `tool_use` / `tool_call` content
|
|
314
|
+
* blocks (Anthropic-style content arrays).
|
|
315
|
+
*/
|
|
316
|
+
function getToolCallIds(message) {
|
|
317
|
+
if (message.getType() !== 'ai') {
|
|
318
|
+
return new Set();
|
|
319
|
+
}
|
|
320
|
+
const ids = new Set();
|
|
321
|
+
const aiMessage = message;
|
|
322
|
+
for (const toolCall of aiMessage.tool_calls ?? []) {
|
|
323
|
+
if (typeof toolCall.id === 'string' && toolCall.id.length > 0) {
|
|
324
|
+
ids.add(toolCall.id);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
if (Array.isArray(aiMessage.content)) {
|
|
328
|
+
for (const part of aiMessage.content) {
|
|
329
|
+
if (typeof part !== 'object') {
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
const record = part;
|
|
333
|
+
if ((record.type === 'tool_use' || record.type === 'tool_call') &&
|
|
334
|
+
typeof record.id === 'string' &&
|
|
335
|
+
record.id.length > 0) {
|
|
336
|
+
ids.add(record.id);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return ids;
|
|
341
|
+
}
|
|
342
|
+
function getToolResultId(message) {
|
|
343
|
+
if (message.getType() !== 'tool') {
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
const toolMessage = message;
|
|
347
|
+
if (typeof toolMessage.tool_call_id === 'string' &&
|
|
348
|
+
toolMessage.tool_call_id.length > 0) {
|
|
349
|
+
return toolMessage.tool_call_id;
|
|
350
|
+
}
|
|
351
|
+
if (typeof toolMessage.toolCallId === 'string' &&
|
|
352
|
+
toolMessage.toolCallId.length > 0) {
|
|
353
|
+
return toolMessage.toolCallId;
|
|
354
|
+
}
|
|
355
|
+
return null;
|
|
356
|
+
}
|
|
357
|
+
function resolveTokenCountForMessage({ message, messageIndexMap, tokenCounter, indexTokenCountMap, }) {
|
|
358
|
+
const originalIndex = messageIndexMap.get(message) ?? -1;
|
|
359
|
+
if (originalIndex > -1 && indexTokenCountMap[originalIndex] != null) {
|
|
360
|
+
return indexTokenCountMap[originalIndex];
|
|
361
|
+
}
|
|
362
|
+
return tokenCounter(message);
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Repairs orphan tool messages in a pruned context. Drops `ToolMessage`s whose
|
|
366
|
+
* matching `AIMessage` was pruned, and strips orphan `tool_use` content blocks
|
|
367
|
+
* (and `tool_calls` entries) from `AIMessage`s whose corresponding tool results
|
|
368
|
+
* are missing. Without this, Anthropic / Bedrock / OpenAI reject the request
|
|
369
|
+
* with a structural validation 400.
|
|
370
|
+
*
|
|
371
|
+
* Intended to run on the post-prune `context` array (not the pre-prune
|
|
372
|
+
* `allMessages`). The dropped messages are returned so the caller can append
|
|
373
|
+
* them to `messagesToRefine` for summarization fidelity.
|
|
374
|
+
*/
|
|
375
|
+
function repairOrphanedToolMessages({ context, allMessages, tokenCounter, indexTokenCountMap, }) {
|
|
376
|
+
const messageIndexMap = new Map();
|
|
377
|
+
for (let i = 0; i < allMessages.length; i++) {
|
|
378
|
+
messageIndexMap.set(allMessages[i], i);
|
|
379
|
+
}
|
|
380
|
+
const validToolCallIds = new Set();
|
|
381
|
+
const presentToolResultIds = new Set();
|
|
382
|
+
for (const message of context) {
|
|
383
|
+
for (const id of getToolCallIds(message)) {
|
|
384
|
+
validToolCallIds.add(id);
|
|
385
|
+
}
|
|
386
|
+
const resultId = getToolResultId(message);
|
|
387
|
+
if (resultId != null) {
|
|
388
|
+
presentToolResultIds.add(resultId);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
let reclaimedTokens = 0;
|
|
392
|
+
let droppedOrphanCount = 0;
|
|
393
|
+
const repairedContext = [];
|
|
394
|
+
const droppedMessages = [];
|
|
395
|
+
for (const message of context) {
|
|
396
|
+
if (message.getType() === 'tool') {
|
|
397
|
+
const toolResultId = getToolResultId(message);
|
|
398
|
+
if (toolResultId == null || !validToolCallIds.has(toolResultId)) {
|
|
399
|
+
droppedOrphanCount += 1;
|
|
400
|
+
reclaimedTokens += resolveTokenCountForMessage({
|
|
401
|
+
message,
|
|
402
|
+
tokenCounter,
|
|
403
|
+
messageIndexMap,
|
|
404
|
+
indexTokenCountMap,
|
|
405
|
+
});
|
|
406
|
+
droppedMessages.push(message);
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
repairedContext.push(message);
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
if (message.getType() === 'ai' && message instanceof AIMessage) {
|
|
413
|
+
const toolCallIds = getToolCallIds(message);
|
|
414
|
+
if (toolCallIds.size > 0) {
|
|
415
|
+
let hasOrphanToolCalls = false;
|
|
416
|
+
for (const id of toolCallIds) {
|
|
417
|
+
if (!presentToolResultIds.has(id)) {
|
|
418
|
+
hasOrphanToolCalls = true;
|
|
419
|
+
break;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (hasOrphanToolCalls) {
|
|
423
|
+
const originalTokens = resolveTokenCountForMessage({
|
|
424
|
+
message,
|
|
425
|
+
messageIndexMap,
|
|
426
|
+
tokenCounter,
|
|
427
|
+
indexTokenCountMap,
|
|
428
|
+
});
|
|
429
|
+
const stripped = stripOrphanToolUseBlocks(message, presentToolResultIds);
|
|
430
|
+
if (stripped != null) {
|
|
431
|
+
const strippedTokens = tokenCounter(stripped);
|
|
432
|
+
reclaimedTokens += originalTokens - strippedTokens;
|
|
433
|
+
repairedContext.push(stripped);
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
droppedOrphanCount += 1;
|
|
437
|
+
reclaimedTokens += originalTokens;
|
|
438
|
+
droppedMessages.push(message);
|
|
439
|
+
}
|
|
440
|
+
continue;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
repairedContext.push(message);
|
|
445
|
+
}
|
|
446
|
+
return {
|
|
447
|
+
context: repairedContext,
|
|
448
|
+
reclaimedTokens,
|
|
449
|
+
droppedOrphanCount,
|
|
450
|
+
droppedMessages,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Strips tool_use content blocks and tool_calls entries from an AI message
|
|
455
|
+
* when their corresponding ToolMessages are not in the context.
|
|
456
|
+
* Returns null if the message has no content left after stripping.
|
|
457
|
+
*/
|
|
458
|
+
function stripOrphanToolUseBlocks(message, presentToolResultIds) {
|
|
459
|
+
const keptToolCalls = (message.tool_calls ?? []).filter((tc) => typeof tc.id === 'string' && presentToolResultIds.has(tc.id));
|
|
460
|
+
let keptContent;
|
|
461
|
+
if (Array.isArray(message.content)) {
|
|
462
|
+
const filtered = message.content.filter((block) => {
|
|
463
|
+
if (typeof block !== 'object') {
|
|
464
|
+
return true;
|
|
465
|
+
}
|
|
466
|
+
const record = block;
|
|
467
|
+
if ((record.type === 'tool_use' || record.type === 'tool_call') &&
|
|
468
|
+
typeof record.id === 'string') {
|
|
469
|
+
return presentToolResultIds.has(record.id);
|
|
470
|
+
}
|
|
471
|
+
return true;
|
|
472
|
+
});
|
|
473
|
+
if (filtered.length === 0) {
|
|
474
|
+
return null;
|
|
475
|
+
}
|
|
476
|
+
keptContent = filtered;
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
keptContent = message.content;
|
|
480
|
+
}
|
|
481
|
+
return new AIMessage({
|
|
482
|
+
...message,
|
|
483
|
+
content: keptContent,
|
|
484
|
+
tool_calls: keptToolCalls.length > 0 ? keptToolCalls : undefined,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Lightweight structural cleanup: strips orphan tool_use blocks from AI messages
|
|
489
|
+
* and drops orphan ToolMessages whose AI counterpart is missing.
|
|
490
|
+
*
|
|
491
|
+
* Unlike `repairOrphanedToolMessages`, this does NOT track tokens — it is
|
|
492
|
+
* intended as a final safety net right before model invocation to prevent
|
|
493
|
+
* Anthropic / Bedrock structural validation errors.
|
|
494
|
+
*
|
|
495
|
+
* Uses duck-typing instead of `getType()` because messages at this stage
|
|
496
|
+
* may be plain objects (from LangGraph state serialization) rather than
|
|
497
|
+
* proper BaseMessage class instances.
|
|
498
|
+
*
|
|
499
|
+
* Includes a fast-path: if every tool_call has a matching tool_result and
|
|
500
|
+
* vice-versa, the original array is returned immediately with zero allocation.
|
|
501
|
+
*/
|
|
502
|
+
function sanitizeOrphanToolBlocks(messages) {
|
|
503
|
+
const allToolCallIds = new Set();
|
|
504
|
+
const allToolResultIds = new Set();
|
|
505
|
+
for (const msg of messages) {
|
|
506
|
+
const msgAny = msg;
|
|
507
|
+
const toolCalls = msgAny.tool_calls;
|
|
508
|
+
if (Array.isArray(toolCalls)) {
|
|
509
|
+
for (const tc of toolCalls) {
|
|
510
|
+
if (typeof tc.id === 'string' &&
|
|
511
|
+
tc.id.length > 0 &&
|
|
512
|
+
!tc.id.startsWith(Constants.ANTHROPIC_SERVER_TOOL_PREFIX)) {
|
|
513
|
+
allToolCallIds.add(tc.id);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
if (Array.isArray(msgAny.content)) {
|
|
518
|
+
for (const block of msgAny.content) {
|
|
519
|
+
if (typeof block === 'object' &&
|
|
520
|
+
(block.type === 'tool_use' || block.type === 'tool_call') &&
|
|
521
|
+
typeof block.id === 'string' &&
|
|
522
|
+
!block.id.startsWith(Constants.ANTHROPIC_SERVER_TOOL_PREFIX)) {
|
|
523
|
+
allToolCallIds.add(block.id);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
const toolCallId = msgAny.tool_call_id;
|
|
528
|
+
if (typeof toolCallId === 'string' && toolCallId.length > 0) {
|
|
529
|
+
allToolResultIds.add(toolCallId);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
let hasOrphans = false;
|
|
533
|
+
for (const id of allToolCallIds) {
|
|
534
|
+
if (!allToolResultIds.has(id)) {
|
|
535
|
+
hasOrphans = true;
|
|
536
|
+
break;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
if (!hasOrphans) {
|
|
540
|
+
for (const id of allToolResultIds) {
|
|
541
|
+
if (!allToolCallIds.has(id)) {
|
|
542
|
+
hasOrphans = true;
|
|
543
|
+
break;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
if (!hasOrphans) {
|
|
548
|
+
return messages;
|
|
549
|
+
}
|
|
550
|
+
const result = [];
|
|
551
|
+
const strippedAiIndices = new Set();
|
|
552
|
+
for (const msg of messages) {
|
|
553
|
+
const msgAny = msg;
|
|
554
|
+
const msgType = typeof msg.getType === 'function'
|
|
555
|
+
? msg.getType()
|
|
556
|
+
: (msgAny.role ??
|
|
557
|
+
msgAny._type);
|
|
558
|
+
const toolCallId = msgAny.tool_call_id;
|
|
559
|
+
if ((msgType === 'tool' || msg instanceof ToolMessage) &&
|
|
560
|
+
typeof toolCallId === 'string' &&
|
|
561
|
+
!allToolCallIds.has(toolCallId)) {
|
|
562
|
+
continue;
|
|
563
|
+
}
|
|
564
|
+
const toolCalls = msgAny.tool_calls;
|
|
565
|
+
if ((msgType === 'ai' ||
|
|
566
|
+
msgType === 'assistant' ||
|
|
567
|
+
msg instanceof AIMessage) &&
|
|
568
|
+
Array.isArray(toolCalls) &&
|
|
569
|
+
toolCalls.length > 0) {
|
|
570
|
+
const hasOrphanCalls = toolCalls.some((tc) => typeof tc.id === 'string' && !allToolResultIds.has(tc.id));
|
|
571
|
+
if (hasOrphanCalls) {
|
|
572
|
+
if (msg instanceof AIMessage) {
|
|
573
|
+
const stripped = stripOrphanToolUseBlocks(msg, allToolResultIds);
|
|
574
|
+
if (stripped != null) {
|
|
575
|
+
strippedAiIndices.add(result.length);
|
|
576
|
+
result.push(stripped);
|
|
577
|
+
}
|
|
578
|
+
continue;
|
|
579
|
+
}
|
|
580
|
+
const keptToolCalls = toolCalls.filter((tc) => typeof tc.id === 'string' && allToolResultIds.has(tc.id));
|
|
581
|
+
const keptContent = Array.isArray(msgAny.content)
|
|
582
|
+
? msgAny.content.filter((block) => {
|
|
583
|
+
if (typeof block !== 'object')
|
|
584
|
+
return true;
|
|
585
|
+
if ((block.type === 'tool_use' || block.type === 'tool_call') &&
|
|
586
|
+
typeof block.id === 'string') {
|
|
587
|
+
return allToolResultIds.has(block.id);
|
|
588
|
+
}
|
|
589
|
+
return true;
|
|
590
|
+
})
|
|
591
|
+
: msgAny.content;
|
|
592
|
+
if (keptToolCalls.length === 0 &&
|
|
593
|
+
Array.isArray(keptContent) &&
|
|
594
|
+
keptContent.length === 0) {
|
|
595
|
+
continue;
|
|
596
|
+
}
|
|
597
|
+
strippedAiIndices.add(result.length);
|
|
598
|
+
const patched = Object.create(Object.getPrototypeOf(msg), Object.getOwnPropertyDescriptors(msg));
|
|
599
|
+
patched.tool_calls = keptToolCalls.length > 0 ? keptToolCalls : [];
|
|
600
|
+
patched.content = keptContent;
|
|
601
|
+
result.push(patched);
|
|
602
|
+
continue;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
result.push(msg);
|
|
606
|
+
}
|
|
607
|
+
// Bedrock/Anthropic require the conversation to end with a user message;
|
|
608
|
+
// a stripped AI message (tool_use removed) represents a dead-end exchange.
|
|
609
|
+
while (result.length > 0 && strippedAiIndices.has(result.length - 1)) {
|
|
610
|
+
result.pop();
|
|
611
|
+
}
|
|
612
|
+
return result;
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Pre-flight truncation: truncates oversized tool result string content before
|
|
616
|
+
* the budget walker runs. Older results get smaller budgets (recency factor),
|
|
617
|
+
* with a 200-char floor so even ancient entries keep diagnostic signal. Returns
|
|
618
|
+
* the number of ToolMessages truncated.
|
|
619
|
+
*/
|
|
620
|
+
function preFlightTruncateToolResults(params) {
|
|
621
|
+
const { messages, maxContextTokens, indexTokenCountMap, tokenCounter } = params;
|
|
622
|
+
const baseMaxChars = calculateMaxToolResultChars(maxContextTokens);
|
|
623
|
+
let truncatedCount = 0;
|
|
624
|
+
const toolIndices = [];
|
|
625
|
+
for (let i = 0; i < messages.length; i++) {
|
|
626
|
+
if (messages[i].getType() === 'tool') {
|
|
627
|
+
toolIndices.push(i);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
for (let t = 0; t < toolIndices.length; t++) {
|
|
631
|
+
const i = toolIndices[t];
|
|
632
|
+
const message = messages[i];
|
|
633
|
+
const content = message.content;
|
|
634
|
+
if (typeof content !== 'string') {
|
|
635
|
+
continue;
|
|
636
|
+
}
|
|
637
|
+
const position = toolIndices.length > 1 ? t / (toolIndices.length - 1) : 1;
|
|
638
|
+
const recencyFactor = 0.2 + 0.8 * position;
|
|
639
|
+
const maxChars = Math.max(200, Math.floor(baseMaxChars * recencyFactor));
|
|
640
|
+
if (content.length <= maxChars) {
|
|
641
|
+
continue;
|
|
642
|
+
}
|
|
643
|
+
const truncated = truncateToolResultContent(content, maxChars);
|
|
644
|
+
const cloned = new ToolMessage({
|
|
645
|
+
content: truncated,
|
|
646
|
+
tool_call_id: message.tool_call_id,
|
|
647
|
+
name: message.name,
|
|
648
|
+
id: message.id,
|
|
649
|
+
additional_kwargs: message.additional_kwargs,
|
|
650
|
+
response_metadata: message.response_metadata,
|
|
651
|
+
});
|
|
652
|
+
messages[i] = cloned;
|
|
653
|
+
indexTokenCountMap[i] = tokenCounter(cloned);
|
|
654
|
+
truncatedCount++;
|
|
655
|
+
}
|
|
656
|
+
return truncatedCount;
|
|
657
|
+
}
|
|
658
|
+
/**
|
|
659
|
+
* Pre-flight truncation: truncates oversized `tool_use` input fields in AI messages.
|
|
660
|
+
*
|
|
661
|
+
* Tool call inputs (arguments) can be very large — e.g., code evaluation payloads from
|
|
662
|
+
* MCP tools like chrome-devtools. Since these tool calls have already been executed,
|
|
663
|
+
* the model only needs a summary of what was called, not the full arguments. Truncating
|
|
664
|
+
* them before pruning can prevent entire messages from being dropped.
|
|
665
|
+
*
|
|
666
|
+
* Uses 15% of the context window (in estimated characters, ~4 chars/token) as the
|
|
667
|
+
* per-input cap, capped at 200K chars.
|
|
668
|
+
*
|
|
669
|
+
* @returns The number of AI messages that had tool_use inputs truncated.
|
|
670
|
+
*/
|
|
671
|
+
function preFlightTruncateToolCallInputs(params) {
|
|
672
|
+
const { messages, maxContextTokens, indexTokenCountMap, tokenCounter } = params;
|
|
673
|
+
const maxInputChars = Math.min(Math.floor(maxContextTokens * 0.15) * 4, 200_000);
|
|
674
|
+
let truncatedCount = 0;
|
|
675
|
+
for (let i = 0; i < messages.length; i++) {
|
|
676
|
+
const message = messages[i];
|
|
677
|
+
if (message.getType() !== 'ai') {
|
|
678
|
+
continue;
|
|
679
|
+
}
|
|
680
|
+
if (!Array.isArray(message.content)) {
|
|
681
|
+
continue;
|
|
682
|
+
}
|
|
683
|
+
const originalContent = message.content;
|
|
684
|
+
const state = { changed: false };
|
|
685
|
+
const newContent = originalContent.map((block) => {
|
|
686
|
+
if (typeof block !== 'object') {
|
|
687
|
+
return block;
|
|
688
|
+
}
|
|
689
|
+
const record = block;
|
|
690
|
+
if (record.type !== 'tool_use' && record.type !== 'tool_call') {
|
|
691
|
+
return block;
|
|
692
|
+
}
|
|
693
|
+
const input = record.input;
|
|
694
|
+
if (input == null) {
|
|
695
|
+
return block;
|
|
696
|
+
}
|
|
697
|
+
const serialized = typeof input === 'string' ? input : JSON.stringify(input);
|
|
698
|
+
if (serialized.length <= maxInputChars) {
|
|
699
|
+
return block;
|
|
700
|
+
}
|
|
701
|
+
state.changed = true;
|
|
702
|
+
// Replaces original input with { _truncated, _originalChars } —
|
|
703
|
+
// safe because the tool call already executed in a prior turn.
|
|
704
|
+
return {
|
|
705
|
+
...record,
|
|
706
|
+
input: truncateToolInput(serialized, maxInputChars),
|
|
707
|
+
};
|
|
708
|
+
});
|
|
709
|
+
if (!state.changed) {
|
|
710
|
+
continue;
|
|
711
|
+
}
|
|
712
|
+
const aiMsg = message;
|
|
713
|
+
const newToolCalls = (aiMsg.tool_calls ?? []).map((tc) => {
|
|
714
|
+
const serializedArgs = JSON.stringify(tc.args);
|
|
715
|
+
if (serializedArgs.length <= maxInputChars) {
|
|
716
|
+
return tc;
|
|
717
|
+
}
|
|
718
|
+
// Replaces original args with { _truncated, _originalChars } —
|
|
719
|
+
// safe because the tool call already executed in a prior turn.
|
|
720
|
+
return {
|
|
721
|
+
...tc,
|
|
722
|
+
args: truncateToolInput(serializedArgs, maxInputChars),
|
|
723
|
+
};
|
|
724
|
+
});
|
|
725
|
+
messages[i] = new AIMessage({
|
|
726
|
+
...aiMsg,
|
|
727
|
+
content: newContent,
|
|
728
|
+
tool_calls: newToolCalls.length > 0 ? newToolCalls : undefined,
|
|
729
|
+
});
|
|
730
|
+
indexTokenCountMap[i] = tokenCounter(messages[i]);
|
|
731
|
+
truncatedCount++;
|
|
732
|
+
}
|
|
733
|
+
return truncatedCount;
|
|
734
|
+
}
|
|
309
735
|
function createPruneMessages(factoryParams) {
|
|
310
736
|
const indexTokenCountMap = { ...factoryParams.indexTokenCountMap };
|
|
311
737
|
let lastTurnStartIndex = factoryParams.startIndex;
|
|
312
738
|
let lastCutOffIndex = 0;
|
|
313
739
|
let totalTokens = Object.values(indexTokenCountMap).reduce((a = 0, b = 0) => a + b, 0);
|
|
314
740
|
let runThinkingStartIndex = -1;
|
|
741
|
+
/**
|
|
742
|
+
* Original (pre-truncation) tool result content keyed by message index.
|
|
743
|
+
* Lets the summarizer see full tool outputs even after pre-flight truncation
|
|
744
|
+
* has shortened them in the live messages array. Cleared whenever the
|
|
745
|
+
* factory is recreated (e.g. after a summarization checkpoint).
|
|
746
|
+
*/
|
|
747
|
+
const originalToolContent = new Map();
|
|
315
748
|
return function pruneMessages(params) {
|
|
316
749
|
if (factoryParams.provider === Providers.OPENAI &&
|
|
317
750
|
factoryParams.thinkingEnabled === true) {
|
|
@@ -410,6 +843,47 @@ function createPruneMessages(factoryParams) {
|
|
|
410
843
|
messagesToRefine: [],
|
|
411
844
|
};
|
|
412
845
|
}
|
|
846
|
+
/*
|
|
847
|
+
* Pre-flight truncation: chop oversized tool result content and oversized
|
|
848
|
+
* tool_use input args BEFORE the budget walker runs. Older results get
|
|
849
|
+
* smaller per-message budgets (recencyFactor) so they degrade first while
|
|
850
|
+
* recent turns stay intact. Saves the originals in `originalToolContent`
|
|
851
|
+
* keyed by message index so the summarizer can later reconstruct full
|
|
852
|
+
* fidelity even after the live array was shortened.
|
|
853
|
+
*/
|
|
854
|
+
for (let i = 0; i < params.messages.length; i++) {
|
|
855
|
+
const m = params.messages[i];
|
|
856
|
+
if (m.getType() === 'tool' &&
|
|
857
|
+
typeof m.content === 'string' &&
|
|
858
|
+
!originalToolContent.has(i)) {
|
|
859
|
+
originalToolContent.set(i, m.content);
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
preFlightTruncateToolResults({
|
|
863
|
+
messages: params.messages,
|
|
864
|
+
maxContextTokens: factoryParams.maxTokens,
|
|
865
|
+
indexTokenCountMap,
|
|
866
|
+
tokenCounter: factoryParams.tokenCounter,
|
|
867
|
+
});
|
|
868
|
+
preFlightTruncateToolCallInputs({
|
|
869
|
+
messages: params.messages,
|
|
870
|
+
maxContextTokens: factoryParams.maxTokens,
|
|
871
|
+
indexTokenCountMap,
|
|
872
|
+
tokenCounter: factoryParams.tokenCounter,
|
|
873
|
+
});
|
|
874
|
+
/*
|
|
875
|
+
* Position-based content degradation: soft-trim then hard-clear older tool
|
|
876
|
+
* results before the budget walker runs. Off by default — caller opts in
|
|
877
|
+
* via `contextPruningConfig.enabled`.
|
|
878
|
+
*/
|
|
879
|
+
if (factoryParams.contextPruningConfig?.enabled) {
|
|
880
|
+
applyContextPruning({
|
|
881
|
+
messages: params.messages,
|
|
882
|
+
indexTokenCountMap,
|
|
883
|
+
tokenCounter: factoryParams.tokenCounter,
|
|
884
|
+
config: factoryParams.contextPruningConfig,
|
|
885
|
+
});
|
|
886
|
+
}
|
|
413
887
|
const { context, thinkingStartIndex, messagesToRefine } = getMessagesWithinTokenLimit({
|
|
414
888
|
maxContextTokens: factoryParams.maxTokens,
|
|
415
889
|
messages: params.messages,
|
|
@@ -425,10 +899,33 @@ function createPruneMessages(factoryParams) {
|
|
|
425
899
|
: undefined,
|
|
426
900
|
});
|
|
427
901
|
runThinkingStartIndex = thinkingStartIndex ?? -1;
|
|
902
|
+
/*
|
|
903
|
+
* Orphan repair pass — drops tool messages whose AIMessage was pruned and
|
|
904
|
+
* strips orphan tool_use blocks from AIMessages whose tool results are
|
|
905
|
+
* missing. Without this, the budget walker can split tool_use ↔ tool_result
|
|
906
|
+
* pairs and the provider rejects the request with a structural 400.
|
|
907
|
+
* Dropped messages flow into messagesToRefine for summarization.
|
|
908
|
+
*/
|
|
909
|
+
const repaired = repairOrphanedToolMessages({
|
|
910
|
+
context,
|
|
911
|
+
allMessages: params.messages,
|
|
912
|
+
tokenCounter: factoryParams.tokenCounter,
|
|
913
|
+
indexTokenCountMap,
|
|
914
|
+
});
|
|
915
|
+
const finalContext = repaired.context;
|
|
916
|
+
const finalMessagesToRefine = repaired.droppedMessages.length > 0
|
|
917
|
+
? [...messagesToRefine, ...repaired.droppedMessages]
|
|
918
|
+
: messagesToRefine;
|
|
428
919
|
/** The index is the first value of `context`, index relative to `params.messages` */
|
|
429
920
|
lastCutOffIndex = Math.max(params.messages.length -
|
|
430
|
-
(
|
|
431
|
-
|
|
921
|
+
(finalContext.length -
|
|
922
|
+
(finalContext[0]?.getType() === 'system' ? 1 : 0)), 0);
|
|
923
|
+
return {
|
|
924
|
+
context: finalContext,
|
|
925
|
+
indexTokenCountMap,
|
|
926
|
+
messagesToRefine: finalMessagesToRefine,
|
|
927
|
+
originalToolContent,
|
|
928
|
+
};
|
|
432
929
|
};
|
|
433
930
|
}
|
|
434
931
|
/** Calculates context utilization as a percentage (0-100) */
|
|
@@ -442,5 +939,5 @@ function getContextUtilization(indexTokenCountMap, instructionTokens, maxContext
|
|
|
442
939
|
return (totalTokens / maxContextTokens) * 100;
|
|
443
940
|
}
|
|
444
941
|
|
|
445
|
-
export { calculateTotalTokens, checkValidNumber, createPruneMessages, getContextUtilization, getMessagesWithinTokenLimit };
|
|
942
|
+
export { calculateTotalTokens, checkValidNumber, createPruneMessages, getContextUtilization, getMessagesWithinTokenLimit, preFlightTruncateToolCallInputs, preFlightTruncateToolResults, repairOrphanedToolMessages, sanitizeOrphanToolBlocks };
|
|
446
943
|
//# sourceMappingURL=prune.mjs.map
|