@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/format.ts
CHANGED
|
@@ -274,18 +274,90 @@ export const formatFromLangChain = (
|
|
|
274
274
|
};
|
|
275
275
|
};
|
|
276
276
|
|
|
277
|
+
/* DeepSeek reasoning roundtrip: when active, accumulate reasoning text
|
|
278
|
+
* from THINK/THINKING/REASONING blocks and attach to the next AI message
|
|
279
|
+
* as `additional_kwargs.reasoning_content` so it survives multi-turn
|
|
280
|
+
* replays through the OpenAI-compatible DeepSeek API. Upstream PR #136. */
|
|
281
|
+
interface FormatAssistantMessageOptions {
|
|
282
|
+
preserveReasoningContent?: boolean;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
interface FormatAgentMessagesOptions {
|
|
286
|
+
provider?: Providers;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function extractReasoningContent(
|
|
290
|
+
part: MessageContentComplex | undefined | null
|
|
291
|
+
): string {
|
|
292
|
+
if (part == null || typeof part !== 'object') return '';
|
|
293
|
+
if (part.type === ContentTypes.THINK) {
|
|
294
|
+
const think = (part as ReasoningContentText).think;
|
|
295
|
+
return typeof think === 'string' ? think : '';
|
|
296
|
+
}
|
|
297
|
+
if (part.type === ContentTypes.THINKING) {
|
|
298
|
+
const thinking = (part as { thinking?: string }).thinking;
|
|
299
|
+
return typeof thinking === 'string' ? thinking : '';
|
|
300
|
+
}
|
|
301
|
+
if (part.type === ContentTypes.REASONING) {
|
|
302
|
+
const reasoning = (part as { reasoning?: string }).reasoning;
|
|
303
|
+
return typeof reasoning === 'string' ? reasoning : '';
|
|
304
|
+
}
|
|
305
|
+
if (part.type === ContentTypes.REASONING_CONTENT) {
|
|
306
|
+
/* Bedrock/Google nested shape: { reasoningContent: { text: ... } } */
|
|
307
|
+
const nested = (part as { reasoningContent?: { text?: string } })
|
|
308
|
+
.reasoningContent;
|
|
309
|
+
if (nested && typeof nested.text === 'string') return nested.text;
|
|
310
|
+
}
|
|
311
|
+
return '';
|
|
312
|
+
}
|
|
313
|
+
|
|
277
314
|
/**
|
|
278
315
|
* Helper function to format an assistant message
|
|
279
316
|
* @param message The message to format
|
|
317
|
+
* @param options Optional formatting options (e.g. DeepSeek reasoning roundtrip)
|
|
280
318
|
* @returns Array of formatted messages
|
|
281
319
|
*/
|
|
282
320
|
function formatAssistantMessage(
|
|
283
|
-
message: Partial<TMessage
|
|
321
|
+
message: Partial<TMessage>,
|
|
322
|
+
options?: FormatAssistantMessageOptions
|
|
284
323
|
): Array<AIMessage | ToolMessage> {
|
|
285
324
|
const formattedMessages: Array<AIMessage | ToolMessage> = [];
|
|
286
325
|
let currentContent: MessageContentComplex[] = [];
|
|
287
326
|
let lastAIMessage: AIMessage | null = null;
|
|
288
327
|
let hasReasoning = false;
|
|
328
|
+
let pendingReasoningContent = '';
|
|
329
|
+
const shouldPreserveReasoningContent =
|
|
330
|
+
options?.preserveReasoningContent === true;
|
|
331
|
+
|
|
332
|
+
const takePendingReasoningContent = (): string | undefined => {
|
|
333
|
+
if (!shouldPreserveReasoningContent || !pendingReasoningContent) {
|
|
334
|
+
return undefined;
|
|
335
|
+
}
|
|
336
|
+
const reasoningContent = pendingReasoningContent;
|
|
337
|
+
pendingReasoningContent = '';
|
|
338
|
+
return reasoningContent;
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
const createAIMessage = (
|
|
342
|
+
content: string | MessageContentComplex[]
|
|
343
|
+
): AIMessage => {
|
|
344
|
+
const reasoningContent = takePendingReasoningContent();
|
|
345
|
+
return new AIMessage({
|
|
346
|
+
content,
|
|
347
|
+
...(reasoningContent != null && {
|
|
348
|
+
additional_kwargs: { reasoning_content: reasoningContent },
|
|
349
|
+
}),
|
|
350
|
+
});
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
const attachPendingReasoningContent = (aiMessage: AIMessage): void => {
|
|
354
|
+
const reasoningContent = takePendingReasoningContent();
|
|
355
|
+
if (reasoningContent == null) return;
|
|
356
|
+
aiMessage.additional_kwargs.reasoning_content =
|
|
357
|
+
typeof aiMessage.additional_kwargs.reasoning_content === 'string'
|
|
358
|
+
? `${aiMessage.additional_kwargs.reasoning_content}${reasoningContent}`
|
|
359
|
+
: reasoningContent;
|
|
360
|
+
};
|
|
289
361
|
|
|
290
362
|
if (Array.isArray(message.content)) {
|
|
291
363
|
for (const part of message.content as Array<
|
|
@@ -308,15 +380,15 @@ function formatAssistantMessage(
|
|
|
308
380
|
}, '');
|
|
309
381
|
content =
|
|
310
382
|
`${content}\n${part[ContentTypes.TEXT] ?? part.text ?? ''}`.trim();
|
|
311
|
-
lastAIMessage =
|
|
383
|
+
lastAIMessage = createAIMessage(content);
|
|
312
384
|
formattedMessages.push(lastAIMessage);
|
|
313
385
|
currentContent = [];
|
|
314
386
|
continue;
|
|
315
387
|
}
|
|
316
388
|
// Create a new AIMessage with this text and prepare for tool calls
|
|
317
|
-
lastAIMessage =
|
|
318
|
-
|
|
319
|
-
|
|
389
|
+
lastAIMessage = createAIMessage(
|
|
390
|
+
part.text != null ? part.text : ''
|
|
391
|
+
);
|
|
320
392
|
formattedMessages.push(lastAIMessage);
|
|
321
393
|
} else if (part.type === ContentTypes.TOOL_CALL) {
|
|
322
394
|
// Skip malformed tool call entries without tool_call property
|
|
@@ -341,8 +413,10 @@ function formatAssistantMessage(
|
|
|
341
413
|
|
|
342
414
|
if (!lastAIMessage) {
|
|
343
415
|
// "Heal" the payload by creating an AIMessage to precede the tool call
|
|
344
|
-
lastAIMessage =
|
|
416
|
+
lastAIMessage = createAIMessage('');
|
|
345
417
|
formattedMessages.push(lastAIMessage);
|
|
418
|
+
} else {
|
|
419
|
+
attachPendingReasoningContent(lastAIMessage);
|
|
346
420
|
}
|
|
347
421
|
|
|
348
422
|
const tool_call: ToolCallPart = _tool_call;
|
|
@@ -385,10 +459,12 @@ function formatAssistantMessage(
|
|
|
385
459
|
} else if (
|
|
386
460
|
part.type === ContentTypes.THINK ||
|
|
387
461
|
part.type === ContentTypes.THINKING ||
|
|
462
|
+
part.type === ContentTypes.REASONING ||
|
|
388
463
|
part.type === ContentTypes.REASONING_CONTENT ||
|
|
389
464
|
part.type === 'redacted_thinking'
|
|
390
465
|
) {
|
|
391
466
|
hasReasoning = true;
|
|
467
|
+
pendingReasoningContent += extractReasoningContent(part);
|
|
392
468
|
continue;
|
|
393
469
|
} else if (
|
|
394
470
|
part.type === ContentTypes.ERROR ||
|
|
@@ -418,10 +494,10 @@ function formatAssistantMessage(
|
|
|
418
494
|
.trim();
|
|
419
495
|
|
|
420
496
|
if (content) {
|
|
421
|
-
formattedMessages.push(
|
|
497
|
+
formattedMessages.push(createAIMessage(content));
|
|
422
498
|
}
|
|
423
499
|
} else if (currentContent.length > 0) {
|
|
424
|
-
formattedMessages.push(
|
|
500
|
+
formattedMessages.push(createAIMessage(currentContent));
|
|
425
501
|
}
|
|
426
502
|
|
|
427
503
|
return formattedMessages;
|
|
@@ -689,18 +765,41 @@ function extractToolNamesFromSearchOutput(output: string): string[] {
|
|
|
689
765
|
return [];
|
|
690
766
|
}
|
|
691
767
|
|
|
768
|
+
/** Extracts the skillName from a skill tool_call's args (string or object). */
|
|
769
|
+
function extractSkillName(args: unknown): string | undefined {
|
|
770
|
+
let parsed: Record<string, unknown> | undefined;
|
|
771
|
+
if (typeof args === 'string') {
|
|
772
|
+
try {
|
|
773
|
+
parsed = JSON.parse(args) as Record<string, unknown>;
|
|
774
|
+
} catch {
|
|
775
|
+
/* malformed args — skip */
|
|
776
|
+
}
|
|
777
|
+
} else {
|
|
778
|
+
parsed = args as Record<string, unknown> | undefined;
|
|
779
|
+
}
|
|
780
|
+
const name = parsed?.skillName;
|
|
781
|
+
return typeof name === 'string' && name !== '' ? name : undefined;
|
|
782
|
+
}
|
|
783
|
+
|
|
692
784
|
/**
|
|
693
785
|
* Formats an array of messages for LangChain, handling tool calls and creating ToolMessage instances.
|
|
694
786
|
*
|
|
695
787
|
* @param payload - The array of messages to format.
|
|
696
788
|
* @param indexTokenCountMap - Optional map of message indices to token counts.
|
|
697
789
|
* @param tools - Optional set of tool names that are allowed in the request.
|
|
790
|
+
* @param skills - Optional map of skill name to body for reconstructing skill HumanMessages.
|
|
791
|
+
* When SkillTool is invoked, the body is injected as a HumanMessage into LangGraph state
|
|
792
|
+
* but NOT persisted to conversation history. On follow-up runs the skill body is lost.
|
|
793
|
+
* Pass `skills` to reconstruct the HumanMessage at the right position after each skill
|
|
794
|
+
* ToolMessage. Upstream PRs #96 / #97.
|
|
698
795
|
* @returns - Object containing formatted messages and updated indexTokenCountMap if provided.
|
|
699
796
|
*/
|
|
700
797
|
export const formatAgentMessages = (
|
|
701
798
|
payload: TPayload,
|
|
702
799
|
indexTokenCountMap?: Record<number, number | undefined>,
|
|
703
|
-
tools?: Set<string
|
|
800
|
+
tools?: Set<string>,
|
|
801
|
+
skills?: Map<string, string>,
|
|
802
|
+
options?: FormatAgentMessagesOptions
|
|
704
803
|
): {
|
|
705
804
|
messages: Array<HumanMessage | AIMessage | SystemMessage | ToolMessage>;
|
|
706
805
|
indexTokenCountMap?: Record<number, number>;
|
|
@@ -753,6 +852,7 @@ export const formatAgentMessages = (
|
|
|
753
852
|
* - Dynamically expand the set when tool_search results are encountered
|
|
754
853
|
*/
|
|
755
854
|
let processedMessage = message;
|
|
855
|
+
let pendingSkillNames: Set<string> | undefined;
|
|
756
856
|
if (discoveredTools) {
|
|
757
857
|
const content = message.content;
|
|
758
858
|
if (content && Array.isArray(content)) {
|
|
@@ -803,6 +903,16 @@ export const formatAgentMessages = (
|
|
|
803
903
|
if (discoveredTools.has(toolName)) {
|
|
804
904
|
/** Valid tool - keep it */
|
|
805
905
|
filteredContent.push(part);
|
|
906
|
+
// Skill body reconstruction (upstream PRs #96/#97): when a
|
|
907
|
+
// SkillTool tool_call is present in this assistant turn, mark
|
|
908
|
+
// the skill name so we can reconstruct the body HumanMessage
|
|
909
|
+
// after the assistant turn has been pushed.
|
|
910
|
+
if (toolName === Constants.SKILL_TOOL && skills?.size) {
|
|
911
|
+
const skillName = extractSkillName(part.tool_call.args);
|
|
912
|
+
if (skillName) {
|
|
913
|
+
(pendingSkillNames ??= new Set()).add(skillName);
|
|
914
|
+
}
|
|
915
|
+
}
|
|
806
916
|
} else {
|
|
807
917
|
/** Invalid tool - convert to string for context preservation */
|
|
808
918
|
if (
|
|
@@ -878,13 +988,55 @@ export const formatAgentMessages = (
|
|
|
878
988
|
}
|
|
879
989
|
}
|
|
880
990
|
|
|
991
|
+
// When tools filtering is off, still detect skill tool_calls for body reconstruction.
|
|
992
|
+
if (!discoveredTools && skills?.size) {
|
|
993
|
+
const content = processedMessage.content;
|
|
994
|
+
if (Array.isArray(content)) {
|
|
995
|
+
for (const part of content) {
|
|
996
|
+
if (
|
|
997
|
+
part.type !== ContentTypes.TOOL_CALL ||
|
|
998
|
+
part.tool_call?.name !== Constants.SKILL_TOOL
|
|
999
|
+
) {
|
|
1000
|
+
continue;
|
|
1001
|
+
}
|
|
1002
|
+
const skillName = extractSkillName(part.tool_call.args);
|
|
1003
|
+
if (skillName) {
|
|
1004
|
+
(pendingSkillNames ??= new Set()).add(skillName);
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
|
|
881
1010
|
// Process the assistant message using the helper function
|
|
882
|
-
const formattedMessages = formatAssistantMessage(processedMessage
|
|
1011
|
+
const formattedMessages = formatAssistantMessage(processedMessage, {
|
|
1012
|
+
preserveReasoningContent: options?.provider === Providers.DEEPSEEK,
|
|
1013
|
+
});
|
|
883
1014
|
messages.push(...formattedMessages);
|
|
884
1015
|
|
|
885
|
-
//
|
|
886
|
-
//
|
|
1016
|
+
// Capture index range BEFORE skill body injection so injected
|
|
1017
|
+
// HumanMessages are excluded from the assistant's token distribution
|
|
1018
|
+
// (upstream PR #97 fix).
|
|
887
1019
|
const endMessageIndex = messages.length;
|
|
1020
|
+
|
|
1021
|
+
if (pendingSkillNames?.size) {
|
|
1022
|
+
for (const skillName of pendingSkillNames) {
|
|
1023
|
+
const body = skills?.get(skillName);
|
|
1024
|
+
if (body) {
|
|
1025
|
+
messages.push(
|
|
1026
|
+
new HumanMessage({
|
|
1027
|
+
content: body,
|
|
1028
|
+
additional_kwargs: {
|
|
1029
|
+
role: 'user',
|
|
1030
|
+
isMeta: true,
|
|
1031
|
+
source: 'skill',
|
|
1032
|
+
skillName,
|
|
1033
|
+
},
|
|
1034
|
+
})
|
|
1035
|
+
);
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
|
|
888
1040
|
const resultIndices = [];
|
|
889
1041
|
for (let j = startMessageIndex; j < endMessageIndex; j++) {
|
|
890
1042
|
resultIndices.push(j);
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { HumanMessage } from '@langchain/core/messages';
|
|
2
|
+
import type { TPayload } from '@/types';
|
|
3
|
+
import { formatAgentMessages } from './format';
|
|
4
|
+
import { ContentTypes, Constants } from '@/common';
|
|
5
|
+
|
|
6
|
+
/** Helper to build a skill tool_call content part */
|
|
7
|
+
function skillToolCall(
|
|
8
|
+
id: string,
|
|
9
|
+
skillName: string,
|
|
10
|
+
output = 'Skill loaded.'
|
|
11
|
+
): Record<string, unknown> {
|
|
12
|
+
return {
|
|
13
|
+
type: ContentTypes.TOOL_CALL,
|
|
14
|
+
tool_call: {
|
|
15
|
+
id,
|
|
16
|
+
name: Constants.SKILL_TOOL,
|
|
17
|
+
args: JSON.stringify({ skillName }),
|
|
18
|
+
output,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
describe('formatAgentMessages skill body reconstruction', () => {
|
|
24
|
+
const skillBodies = new Map([
|
|
25
|
+
['pdf-analyzer', '# PDF Analyzer\nAnalyze PDF files step by step.'],
|
|
26
|
+
['code-review', '# Code Review\nReview the code for issues.'],
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
describe('with discoveredTools (tools filtering active)', () => {
|
|
30
|
+
const tools = new Set([Constants.SKILL_TOOL, 'web_search']);
|
|
31
|
+
|
|
32
|
+
it('reconstructs HumanMessage after skill ToolMessage', () => {
|
|
33
|
+
const payload: TPayload = [
|
|
34
|
+
{ role: 'user', content: 'Analyze this PDF' },
|
|
35
|
+
{
|
|
36
|
+
role: 'assistant',
|
|
37
|
+
content: [
|
|
38
|
+
{
|
|
39
|
+
type: ContentTypes.TEXT,
|
|
40
|
+
[ContentTypes.TEXT]: "I'll invoke the skill.",
|
|
41
|
+
tool_call_ids: ['call_1'],
|
|
42
|
+
},
|
|
43
|
+
skillToolCall('call_1', 'pdf-analyzer'),
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const { messages } = formatAgentMessages(
|
|
49
|
+
payload,
|
|
50
|
+
undefined,
|
|
51
|
+
tools,
|
|
52
|
+
skillBodies
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// user, AI, ToolMessage, injected HumanMessage
|
|
56
|
+
expect(messages.length).toBeGreaterThanOrEqual(4);
|
|
57
|
+
const last = messages[messages.length - 1];
|
|
58
|
+
expect(last).toBeInstanceOf(HumanMessage);
|
|
59
|
+
expect(last.content).toBe(
|
|
60
|
+
'# PDF Analyzer\nAnalyze PDF files step by step.'
|
|
61
|
+
);
|
|
62
|
+
expect((last as HumanMessage).additional_kwargs.source).toBe('skill');
|
|
63
|
+
expect((last as HumanMessage).additional_kwargs.skillName).toBe(
|
|
64
|
+
'pdf-analyzer'
|
|
65
|
+
);
|
|
66
|
+
expect((last as HumanMessage).additional_kwargs.isMeta).toBe(true);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('does NOT inject body when skill tool is not in discoveredTools', () => {
|
|
70
|
+
const restrictedTools = new Set(['web_search']); // skill NOT allowed
|
|
71
|
+
const payload: TPayload = [
|
|
72
|
+
{ role: 'user', content: 'Analyze this' },
|
|
73
|
+
{
|
|
74
|
+
role: 'assistant',
|
|
75
|
+
content: [skillToolCall('call_1', 'pdf-analyzer')],
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
const { messages } = formatAgentMessages(
|
|
80
|
+
payload,
|
|
81
|
+
undefined,
|
|
82
|
+
restrictedTools,
|
|
83
|
+
skillBodies
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const humanMessages = messages.filter((m) => m instanceof HumanMessage);
|
|
87
|
+
// Only the user message, no injected skill body
|
|
88
|
+
expect(humanMessages).toHaveLength(1);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('does not inject when skill name is not in skills Map', () => {
|
|
92
|
+
const payload: TPayload = [
|
|
93
|
+
{ role: 'user', content: 'Hello' },
|
|
94
|
+
{
|
|
95
|
+
role: 'assistant',
|
|
96
|
+
content: [skillToolCall('call_1', 'unknown-skill')],
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
|
|
100
|
+
const { messages } = formatAgentMessages(
|
|
101
|
+
payload,
|
|
102
|
+
undefined,
|
|
103
|
+
tools,
|
|
104
|
+
skillBodies
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
const humanMessages = messages.filter((m) => m instanceof HumanMessage);
|
|
108
|
+
expect(humanMessages).toHaveLength(1); // only the user message
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
describe('without discoveredTools (no tools filtering)', () => {
|
|
113
|
+
it('reconstructs HumanMessage when skills Map provided', () => {
|
|
114
|
+
const payload: TPayload = [
|
|
115
|
+
{ role: 'user', content: 'Review my code' },
|
|
116
|
+
{
|
|
117
|
+
role: 'assistant',
|
|
118
|
+
content: [skillToolCall('call_1', 'code-review')],
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
|
|
122
|
+
const { messages } = formatAgentMessages(
|
|
123
|
+
payload,
|
|
124
|
+
undefined,
|
|
125
|
+
undefined,
|
|
126
|
+
skillBodies
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
const injected = messages.filter(
|
|
130
|
+
(m) =>
|
|
131
|
+
m instanceof HumanMessage &&
|
|
132
|
+
(m as HumanMessage).additional_kwargs?.source === 'skill'
|
|
133
|
+
);
|
|
134
|
+
expect(injected).toHaveLength(1);
|
|
135
|
+
expect(injected[0].content).toBe(
|
|
136
|
+
'# Code Review\nReview the code for issues.'
|
|
137
|
+
);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('no injection when skills Map is undefined', () => {
|
|
141
|
+
const payload: TPayload = [
|
|
142
|
+
{ role: 'user', content: 'Hello' },
|
|
143
|
+
{
|
|
144
|
+
role: 'assistant',
|
|
145
|
+
content: [skillToolCall('call_1', 'pdf-analyzer')],
|
|
146
|
+
},
|
|
147
|
+
];
|
|
148
|
+
|
|
149
|
+
const { messages } = formatAgentMessages(
|
|
150
|
+
payload,
|
|
151
|
+
undefined,
|
|
152
|
+
undefined,
|
|
153
|
+
undefined
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
const injected = messages.filter(
|
|
157
|
+
(m) =>
|
|
158
|
+
m instanceof HumanMessage &&
|
|
159
|
+
(m as HumanMessage).additional_kwargs?.source === 'skill'
|
|
160
|
+
);
|
|
161
|
+
expect(injected).toHaveLength(0);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('no injection when skills Map is empty', () => {
|
|
165
|
+
const payload: TPayload = [
|
|
166
|
+
{ role: 'user', content: 'Hello' },
|
|
167
|
+
{
|
|
168
|
+
role: 'assistant',
|
|
169
|
+
content: [skillToolCall('call_1', 'pdf-analyzer')],
|
|
170
|
+
},
|
|
171
|
+
];
|
|
172
|
+
|
|
173
|
+
const { messages } = formatAgentMessages(
|
|
174
|
+
payload,
|
|
175
|
+
undefined,
|
|
176
|
+
undefined,
|
|
177
|
+
new Map()
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
const injected = messages.filter(
|
|
181
|
+
(m) =>
|
|
182
|
+
m instanceof HumanMessage &&
|
|
183
|
+
(m as HumanMessage).additional_kwargs?.source === 'skill'
|
|
184
|
+
);
|
|
185
|
+
expect(injected).toHaveLength(0);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
describe('extractSkillName edge cases', () => {
|
|
190
|
+
const tools = new Set([Constants.SKILL_TOOL]);
|
|
191
|
+
|
|
192
|
+
it('handles object args (not stringified)', () => {
|
|
193
|
+
const payload: TPayload = [
|
|
194
|
+
{ role: 'user', content: 'Go' },
|
|
195
|
+
{
|
|
196
|
+
role: 'assistant',
|
|
197
|
+
content: [
|
|
198
|
+
{
|
|
199
|
+
type: ContentTypes.TOOL_CALL,
|
|
200
|
+
tool_call: {
|
|
201
|
+
id: 'call_1',
|
|
202
|
+
name: Constants.SKILL_TOOL,
|
|
203
|
+
args: { skillName: 'pdf-analyzer' }, // object, not string
|
|
204
|
+
output: 'Loaded.',
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
},
|
|
209
|
+
];
|
|
210
|
+
|
|
211
|
+
const { messages } = formatAgentMessages(
|
|
212
|
+
payload,
|
|
213
|
+
undefined,
|
|
214
|
+
tools,
|
|
215
|
+
skillBodies
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
const injected = messages.filter(
|
|
219
|
+
(m) =>
|
|
220
|
+
m instanceof HumanMessage &&
|
|
221
|
+
(m as HumanMessage).additional_kwargs?.source === 'skill'
|
|
222
|
+
);
|
|
223
|
+
expect(injected).toHaveLength(1);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('gracefully skips malformed JSON args', () => {
|
|
227
|
+
const payload: TPayload = [
|
|
228
|
+
{ role: 'user', content: 'Go' },
|
|
229
|
+
{
|
|
230
|
+
role: 'assistant',
|
|
231
|
+
content: [
|
|
232
|
+
{
|
|
233
|
+
type: ContentTypes.TOOL_CALL,
|
|
234
|
+
tool_call: {
|
|
235
|
+
id: 'call_1',
|
|
236
|
+
name: Constants.SKILL_TOOL,
|
|
237
|
+
args: '{bad json',
|
|
238
|
+
output: 'Loaded.',
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
],
|
|
242
|
+
},
|
|
243
|
+
];
|
|
244
|
+
|
|
245
|
+
const { messages } = formatAgentMessages(
|
|
246
|
+
payload,
|
|
247
|
+
undefined,
|
|
248
|
+
tools,
|
|
249
|
+
skillBodies
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
const injected = messages.filter(
|
|
253
|
+
(m) =>
|
|
254
|
+
m instanceof HumanMessage &&
|
|
255
|
+
(m as HumanMessage).additional_kwargs?.source === 'skill'
|
|
256
|
+
);
|
|
257
|
+
expect(injected).toHaveLength(0); // gracefully skipped
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
it('skips empty skillName', () => {
|
|
261
|
+
const payload: TPayload = [
|
|
262
|
+
{ role: 'user', content: 'Go' },
|
|
263
|
+
{
|
|
264
|
+
role: 'assistant',
|
|
265
|
+
content: [
|
|
266
|
+
{
|
|
267
|
+
type: ContentTypes.TOOL_CALL,
|
|
268
|
+
tool_call: {
|
|
269
|
+
id: 'call_1',
|
|
270
|
+
name: Constants.SKILL_TOOL,
|
|
271
|
+
args: JSON.stringify({ skillName: '' }),
|
|
272
|
+
output: 'Loaded.',
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
},
|
|
277
|
+
];
|
|
278
|
+
|
|
279
|
+
const { messages } = formatAgentMessages(
|
|
280
|
+
payload,
|
|
281
|
+
undefined,
|
|
282
|
+
tools,
|
|
283
|
+
skillBodies
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
const injected = messages.filter(
|
|
287
|
+
(m) =>
|
|
288
|
+
m instanceof HumanMessage &&
|
|
289
|
+
(m as HumanMessage).additional_kwargs?.source === 'skill'
|
|
290
|
+
);
|
|
291
|
+
expect(injected).toHaveLength(0);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
describe('deduplication', () => {
|
|
296
|
+
const tools = new Set([Constants.SKILL_TOOL]);
|
|
297
|
+
|
|
298
|
+
it('injects body only once when same skill invoked twice in one message', () => {
|
|
299
|
+
const payload: TPayload = [
|
|
300
|
+
{ role: 'user', content: 'Go' },
|
|
301
|
+
{
|
|
302
|
+
role: 'assistant',
|
|
303
|
+
content: [
|
|
304
|
+
skillToolCall('call_1', 'pdf-analyzer'),
|
|
305
|
+
skillToolCall('call_2', 'pdf-analyzer'),
|
|
306
|
+
],
|
|
307
|
+
},
|
|
308
|
+
];
|
|
309
|
+
|
|
310
|
+
const { messages } = formatAgentMessages(
|
|
311
|
+
payload,
|
|
312
|
+
undefined,
|
|
313
|
+
tools,
|
|
314
|
+
skillBodies
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
const injected = messages.filter(
|
|
318
|
+
(m) =>
|
|
319
|
+
m instanceof HumanMessage &&
|
|
320
|
+
(m as HumanMessage).additional_kwargs?.source === 'skill'
|
|
321
|
+
);
|
|
322
|
+
expect(injected).toHaveLength(1);
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
it('injects body for each distinct skill invoked', () => {
|
|
326
|
+
const payload: TPayload = [
|
|
327
|
+
{ role: 'user', content: 'Go' },
|
|
328
|
+
{
|
|
329
|
+
role: 'assistant',
|
|
330
|
+
content: [
|
|
331
|
+
skillToolCall('call_1', 'pdf-analyzer'),
|
|
332
|
+
skillToolCall('call_2', 'code-review'),
|
|
333
|
+
],
|
|
334
|
+
},
|
|
335
|
+
];
|
|
336
|
+
|
|
337
|
+
const { messages } = formatAgentMessages(
|
|
338
|
+
payload,
|
|
339
|
+
undefined,
|
|
340
|
+
tools,
|
|
341
|
+
skillBodies
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
const injected = messages.filter(
|
|
345
|
+
(m) =>
|
|
346
|
+
m instanceof HumanMessage &&
|
|
347
|
+
(m as HumanMessage).additional_kwargs?.source === 'skill'
|
|
348
|
+
);
|
|
349
|
+
expect(injected).toHaveLength(2);
|
|
350
|
+
const names = injected.map(
|
|
351
|
+
(m) => (m as HumanMessage).additional_kwargs.skillName
|
|
352
|
+
);
|
|
353
|
+
expect(names).toContain('pdf-analyzer');
|
|
354
|
+
expect(names).toContain('code-review');
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
describe('indexTokenCountMap distribution', () => {
|
|
359
|
+
const tools = new Set([Constants.SKILL_TOOL]);
|
|
360
|
+
|
|
361
|
+
it('excludes injected HumanMessages from assistant token distribution', () => {
|
|
362
|
+
const payload: TPayload = [
|
|
363
|
+
{ role: 'user', content: 'Analyze this' },
|
|
364
|
+
{
|
|
365
|
+
role: 'assistant',
|
|
366
|
+
content: [
|
|
367
|
+
{
|
|
368
|
+
type: ContentTypes.TEXT,
|
|
369
|
+
[ContentTypes.TEXT]: 'Invoking skill.',
|
|
370
|
+
tool_call_ids: ['call_1'],
|
|
371
|
+
},
|
|
372
|
+
skillToolCall('call_1', 'pdf-analyzer'),
|
|
373
|
+
],
|
|
374
|
+
},
|
|
375
|
+
];
|
|
376
|
+
|
|
377
|
+
const inputTokenMap: Record<number, number | undefined> = {
|
|
378
|
+
0: 100, // user message
|
|
379
|
+
1: 500, // assistant message
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
const { messages, indexTokenCountMap } = formatAgentMessages(
|
|
383
|
+
payload,
|
|
384
|
+
inputTokenMap,
|
|
385
|
+
tools,
|
|
386
|
+
skillBodies
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
// There should be messages: user, AI, ToolMessage, injected HumanMessage
|
|
390
|
+
expect(messages.length).toBeGreaterThanOrEqual(4);
|
|
391
|
+
const lastMsg = messages[messages.length - 1];
|
|
392
|
+
expect(lastMsg).toBeInstanceOf(HumanMessage);
|
|
393
|
+
expect((lastMsg as HumanMessage).additional_kwargs.source).toBe('skill');
|
|
394
|
+
|
|
395
|
+
// Token map must be defined when input was provided
|
|
396
|
+
expect(indexTokenCountMap).toBeDefined();
|
|
397
|
+
|
|
398
|
+
// The injected HumanMessage's index should NOT be in the token map
|
|
399
|
+
const injectedIndex = messages.length - 1;
|
|
400
|
+
expect(indexTokenCountMap![injectedIndex]).toBeUndefined();
|
|
401
|
+
|
|
402
|
+
// The assistant's 500 tokens should be distributed only across
|
|
403
|
+
// the AI + ToolMessage, NOT the injected HumanMessage
|
|
404
|
+
let assistantTotal = 0;
|
|
405
|
+
for (const [idx, count] of Object.entries(indexTokenCountMap!)) {
|
|
406
|
+
if (Number(idx) > 0 && Number(idx) < injectedIndex) {
|
|
407
|
+
assistantTotal += count ?? 0;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
expect(assistantTotal).toBe(500);
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
});
|