@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
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
/**
|
|
3
|
+
* LIVE Bedrock cache TTL comparison: `5m` (default) vs `1h` (extended).
|
|
4
|
+
*
|
|
5
|
+
* Verifies:
|
|
6
|
+
* 1. Bedrock SDK accepts `cachePoint: { type: 'default', ttl: '1h' }`
|
|
7
|
+
* against `us.anthropic.claude-sonnet-4-5-20250929-v1:0`.
|
|
8
|
+
* 2. Both TTLs create cache entries readable by subsequent calls.
|
|
9
|
+
* 3. The `cacheWriteInputTokens` charged on cold-write is the same
|
|
10
|
+
* structurally — pricing differs by ~60% but the SDK reports the
|
|
11
|
+
* same field.
|
|
12
|
+
*
|
|
13
|
+
* What this CAN'T verify in a unit-runner timeframe:
|
|
14
|
+
* - That a 1h cache actually survives >5 min of idle (would require a
|
|
15
|
+
* >5-min sleep). Marked as a manual long-soak test instead.
|
|
16
|
+
*
|
|
17
|
+
* Run:
|
|
18
|
+
* BEDROCK_AWS_REGION=us-east-1 \
|
|
19
|
+
* BEDROCK_AWS_ACCESS_KEY_ID=... BEDROCK_AWS_SECRET_ACCESS_KEY=... \
|
|
20
|
+
* npx jest src/agents/__tests__/AgentContext.cacheTtl.live.test.ts
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { config } from 'dotenv';
|
|
24
|
+
config();
|
|
25
|
+
|
|
26
|
+
import { HumanMessage, SystemMessage } from '@langchain/core/messages';
|
|
27
|
+
import type { BaseMessage, AIMessage } from '@langchain/core/messages';
|
|
28
|
+
import { IllumaBedrockConverse } from '@/llm/bedrock';
|
|
29
|
+
|
|
30
|
+
const region =
|
|
31
|
+
process.env.BEDROCK_AWS_REGION ??
|
|
32
|
+
process.env.BEDROCK_AWS_DEFAULT_REGION ??
|
|
33
|
+
process.env.AWS_REGION ??
|
|
34
|
+
'us-east-1';
|
|
35
|
+
const accessKeyId =
|
|
36
|
+
process.env.BEDROCK_AWS_ACCESS_KEY_ID ?? process.env.AWS_ACCESS_KEY_ID;
|
|
37
|
+
const secretAccessKey =
|
|
38
|
+
process.env.BEDROCK_AWS_SECRET_ACCESS_KEY ??
|
|
39
|
+
process.env.AWS_SECRET_ACCESS_KEY;
|
|
40
|
+
|
|
41
|
+
const haveBedrock =
|
|
42
|
+
accessKeyId !== undefined &&
|
|
43
|
+
accessKeyId !== '' &&
|
|
44
|
+
secretAccessKey !== undefined &&
|
|
45
|
+
secretAccessKey !== '';
|
|
46
|
+
|
|
47
|
+
const describeFn = haveBedrock ? describe : describe.skip;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Build a unique-per-test stable prefix so we get a true cold-write on
|
|
51
|
+
* the first call (not piggybacking on a cache populated by a prior test).
|
|
52
|
+
* 80 rules × ~30 tokens ≈ 2400 tokens — above Bedrock's 1024-token
|
|
53
|
+
* minimum cache write threshold.
|
|
54
|
+
*/
|
|
55
|
+
const buildUniquePrefix = (suiteId: string): string => {
|
|
56
|
+
const padding = Array.from({ length: 80 }, (_, i) =>
|
|
57
|
+
`Rule ${i + 1} (${suiteId}): respond concisely; cite assumptions; treat all users with respect; never fabricate facts; if uncertain, say so explicitly.`
|
|
58
|
+
).join('\n');
|
|
59
|
+
return `You are a helpful assistant for suite ${suiteId}.\n\n${padding}`;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
interface UsageReadout {
|
|
63
|
+
input_tokens: number;
|
|
64
|
+
output_tokens: number;
|
|
65
|
+
cache_read_input_tokens: number;
|
|
66
|
+
cache_write_input_tokens: number;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Build the system message manually with a chosen TTL, send it to
|
|
71
|
+
* Bedrock, and return the cache-related usage from response_metadata.
|
|
72
|
+
*/
|
|
73
|
+
async function callWithTtl({
|
|
74
|
+
stableInstructions,
|
|
75
|
+
ttl,
|
|
76
|
+
query,
|
|
77
|
+
}: {
|
|
78
|
+
stableInstructions: string;
|
|
79
|
+
ttl: '5m' | '1h';
|
|
80
|
+
query: string;
|
|
81
|
+
}): Promise<UsageReadout> {
|
|
82
|
+
/* Build the system content array with the chosen TTL on the cachePoint.
|
|
83
|
+
* This bypasses AgentContext.buildSystemRunnable so we can vary TTL
|
|
84
|
+
* per-call deterministically. The downstream Bedrock converter
|
|
85
|
+
* (src/llm/bedrock/utils/message_inputs.ts) passes cachePoint blocks
|
|
86
|
+
* through to the Converse API as-is. */
|
|
87
|
+
const systemMsg = new SystemMessage({
|
|
88
|
+
content: [
|
|
89
|
+
{ type: 'text', text: stableInstructions },
|
|
90
|
+
{ cachePoint: { type: 'default', ttl } } as unknown as Record<
|
|
91
|
+
string,
|
|
92
|
+
unknown
|
|
93
|
+
>,
|
|
94
|
+
],
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const messages: BaseMessage[] = [systemMsg, new HumanMessage(query)];
|
|
98
|
+
|
|
99
|
+
const llm = new IllumaBedrockConverse({
|
|
100
|
+
model: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
|
|
101
|
+
region,
|
|
102
|
+
credentials: {
|
|
103
|
+
accessKeyId: accessKeyId as string,
|
|
104
|
+
secretAccessKey: secretAccessKey as string,
|
|
105
|
+
},
|
|
106
|
+
promptCache: true,
|
|
107
|
+
streaming: false,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const aiMessage = (await llm.invoke(messages)) as AIMessage;
|
|
111
|
+
|
|
112
|
+
type RespMeta = {
|
|
113
|
+
usage?: {
|
|
114
|
+
inputTokens?: number;
|
|
115
|
+
outputTokens?: number;
|
|
116
|
+
cacheReadInputTokens?: number;
|
|
117
|
+
cacheWriteInputTokens?: number;
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
const u = ((aiMessage.response_metadata ?? {}) as RespMeta).usage ?? {};
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
input_tokens: u.inputTokens ?? 0,
|
|
124
|
+
output_tokens: u.outputTokens ?? 0,
|
|
125
|
+
cache_read_input_tokens: u.cacheReadInputTokens ?? 0,
|
|
126
|
+
cache_write_input_tokens: u.cacheWriteInputTokens ?? 0,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
describeFn('LIVE: Bedrock cache TTL — 5m vs 1h', () => {
|
|
131
|
+
jest.setTimeout(120000);
|
|
132
|
+
|
|
133
|
+
test('5m TTL: Bedrock accepts and reports cache write/read cycle', async () => {
|
|
134
|
+
const stable = buildUniquePrefix('5m-test-' + Date.now());
|
|
135
|
+
|
|
136
|
+
const cold = await callWithTtl({
|
|
137
|
+
stableInstructions: stable,
|
|
138
|
+
ttl: '5m',
|
|
139
|
+
query: 'reply with the word OK',
|
|
140
|
+
});
|
|
141
|
+
const warm = await callWithTtl({
|
|
142
|
+
stableInstructions: stable,
|
|
143
|
+
ttl: '5m',
|
|
144
|
+
query: 'reply with the word YES',
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
console.log('5m cold:', cold);
|
|
148
|
+
console.log('5m warm:', warm);
|
|
149
|
+
|
|
150
|
+
/* Cold call must have written cache (or read it from a prior run with
|
|
151
|
+
* the same suiteId — unlikely given Date.now() in the suiteId). */
|
|
152
|
+
const coldDidWork =
|
|
153
|
+
cold.cache_write_input_tokens > 0 || cold.cache_read_input_tokens > 0;
|
|
154
|
+
expect(coldDidWork).toBe(true);
|
|
155
|
+
|
|
156
|
+
/* Warm call must read from cache. */
|
|
157
|
+
expect(warm.cache_read_input_tokens).toBeGreaterThan(0);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
test('1h TTL: Bedrock accepts and reports cache write/read cycle', async () => {
|
|
161
|
+
const stable = buildUniquePrefix('1h-test-' + Date.now());
|
|
162
|
+
|
|
163
|
+
const cold = await callWithTtl({
|
|
164
|
+
stableInstructions: stable,
|
|
165
|
+
ttl: '1h',
|
|
166
|
+
query: 'reply with the word OK',
|
|
167
|
+
});
|
|
168
|
+
const warm = await callWithTtl({
|
|
169
|
+
stableInstructions: stable,
|
|
170
|
+
ttl: '1h',
|
|
171
|
+
query: 'reply with the word YES',
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
console.log('1h cold:', cold);
|
|
175
|
+
console.log('1h warm:', warm);
|
|
176
|
+
|
|
177
|
+
const coldDidWork =
|
|
178
|
+
cold.cache_write_input_tokens > 0 || cold.cache_read_input_tokens > 0;
|
|
179
|
+
expect(coldDidWork).toBe(true);
|
|
180
|
+
|
|
181
|
+
expect(warm.cache_read_input_tokens).toBeGreaterThan(0);
|
|
182
|
+
|
|
183
|
+
/* When 1h cache write actually happens (i.e. cold call), the write
|
|
184
|
+
* token count should match the prefix size — confirming the cachePoint
|
|
185
|
+
* block reached Bedrock with the correct TTL hint. */
|
|
186
|
+
if (cold.cache_write_input_tokens > 0) {
|
|
187
|
+
expect(cold.cache_write_input_tokens).toBeGreaterThan(2000);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
test('1h cache survives across multiple read calls within window', async () => {
|
|
192
|
+
/* Fire 3 reads back-to-back against a 1h-cached prefix — all must
|
|
193
|
+
* hit the cache. (The point is not "1h vs 5m" here; it's "the 1h
|
|
194
|
+
* cache is functional and serving reads".) */
|
|
195
|
+
const stable = buildUniquePrefix('1h-multi-' + Date.now());
|
|
196
|
+
|
|
197
|
+
/* Prime */
|
|
198
|
+
await callWithTtl({
|
|
199
|
+
stableInstructions: stable,
|
|
200
|
+
ttl: '1h',
|
|
201
|
+
query: 'prime',
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
/* Three sequential reads */
|
|
205
|
+
const reads = await Promise.all([
|
|
206
|
+
callWithTtl({
|
|
207
|
+
stableInstructions: stable,
|
|
208
|
+
ttl: '1h',
|
|
209
|
+
query: 'one',
|
|
210
|
+
}),
|
|
211
|
+
callWithTtl({
|
|
212
|
+
stableInstructions: stable,
|
|
213
|
+
ttl: '1h',
|
|
214
|
+
query: 'two',
|
|
215
|
+
}),
|
|
216
|
+
callWithTtl({
|
|
217
|
+
stableInstructions: stable,
|
|
218
|
+
ttl: '1h',
|
|
219
|
+
query: 'three',
|
|
220
|
+
}),
|
|
221
|
+
]);
|
|
222
|
+
|
|
223
|
+
reads.forEach((r, i) => {
|
|
224
|
+
console.log(
|
|
225
|
+
`1h read ${i + 1}: cache_read=${r.cache_read_input_tokens}, ` +
|
|
226
|
+
`write=${r.cache_write_input_tokens}, input=${r.input_tokens}`
|
|
227
|
+
);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
expect(reads.every((r) => r.cache_read_input_tokens > 0)).toBe(true);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
/* Skipped by default — uncomment to run a long-soak test that proves
|
|
234
|
+
* the 1h cache actually outlives the 5m default. Takes 6+ minutes. */
|
|
235
|
+
test.skip('1h cache survives a 6-minute idle (5m would expire)', async () => {
|
|
236
|
+
const stable = buildUniquePrefix('1h-soak-' + Date.now());
|
|
237
|
+
|
|
238
|
+
const cold = await callWithTtl({
|
|
239
|
+
stableInstructions: stable,
|
|
240
|
+
ttl: '1h',
|
|
241
|
+
query: 'cold',
|
|
242
|
+
});
|
|
243
|
+
console.log('1h soak cold:', cold);
|
|
244
|
+
|
|
245
|
+
/* Wait > 5 minutes (default Bedrock TTL). */
|
|
246
|
+
await new Promise((r) => setTimeout(r, 6 * 60 * 1000));
|
|
247
|
+
|
|
248
|
+
const afterIdle = await callWithTtl({
|
|
249
|
+
stableInstructions: stable,
|
|
250
|
+
ttl: '1h',
|
|
251
|
+
query: 'after idle',
|
|
252
|
+
});
|
|
253
|
+
console.log('1h soak after 6-min idle:', afterIdle);
|
|
254
|
+
|
|
255
|
+
/* If 1h TTL works, this must still read from cache. If only 5m
|
|
256
|
+
* worked, this would re-write. */
|
|
257
|
+
expect(afterIdle.cache_read_input_tokens).toBeGreaterThan(0);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
/**
|
|
3
|
+
* LIVE Bedrock cross-AGENT Tier 1 cache sharing.
|
|
4
|
+
*
|
|
5
|
+
* What this proves: when two completely distinct custom agents share the
|
|
6
|
+
* same `platform_instructions` (Tier 1) but have totally different
|
|
7
|
+
* `agent.instructions` (Tier 2), Bedrock serves the Tier 1 prefix from a
|
|
8
|
+
* single cache entry. This is the load-bearing proof for the multi-tier
|
|
9
|
+
* cost optimization — every custom agent in a workspace can read the
|
|
10
|
+
* platform-level cache populated by any other agent (or by ephemeral
|
|
11
|
+
* traffic).
|
|
12
|
+
*
|
|
13
|
+
* What it does NOT prove (out of scope here):
|
|
14
|
+
* - That ranger's actual `client.js` system block split is correct.
|
|
15
|
+
* That's verified by Phase 3 ranger-side tests.
|
|
16
|
+
*
|
|
17
|
+
* Run:
|
|
18
|
+
* BEDROCK_AWS_REGION=us-east-1 \
|
|
19
|
+
* BEDROCK_AWS_ACCESS_KEY_ID=... BEDROCK_AWS_SECRET_ACCESS_KEY=... \
|
|
20
|
+
* npx jest src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { config } from 'dotenv';
|
|
24
|
+
config();
|
|
25
|
+
|
|
26
|
+
import { HumanMessage } from '@langchain/core/messages';
|
|
27
|
+
import type { BaseMessage, AIMessage } from '@langchain/core/messages';
|
|
28
|
+
import { IllumaBedrockConverse } from '@/llm/bedrock';
|
|
29
|
+
import { addBedrockCacheControl } from '@/messages/cache';
|
|
30
|
+
import { AgentContext } from '../AgentContext';
|
|
31
|
+
import { Providers } from '@/common';
|
|
32
|
+
import type * as t from '@/types';
|
|
33
|
+
|
|
34
|
+
const region =
|
|
35
|
+
process.env.BEDROCK_AWS_REGION ??
|
|
36
|
+
process.env.BEDROCK_AWS_DEFAULT_REGION ??
|
|
37
|
+
process.env.AWS_REGION ??
|
|
38
|
+
'us-east-1';
|
|
39
|
+
const accessKeyId =
|
|
40
|
+
process.env.BEDROCK_AWS_ACCESS_KEY_ID ?? process.env.AWS_ACCESS_KEY_ID;
|
|
41
|
+
const secretAccessKey =
|
|
42
|
+
process.env.BEDROCK_AWS_SECRET_ACCESS_KEY ??
|
|
43
|
+
process.env.AWS_SECRET_ACCESS_KEY;
|
|
44
|
+
|
|
45
|
+
const haveBedrock =
|
|
46
|
+
Boolean(accessKeyId) &&
|
|
47
|
+
Boolean(secretAccessKey) &&
|
|
48
|
+
accessKeyId !== '' &&
|
|
49
|
+
secretAccessKey !== '';
|
|
50
|
+
|
|
51
|
+
const describeFn = haveBedrock ? describe : describe.skip;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Tier 1 — platform-wide content. Same string for every "agent" in this
|
|
55
|
+
* test, mimicking ranger's branding + tool routing + common tool docs.
|
|
56
|
+
* Padded above 1024 tokens so Bedrock will write/read the cache (1024-token
|
|
57
|
+
* minimum cache write threshold).
|
|
58
|
+
*/
|
|
59
|
+
const PLATFORM_INSTRUCTIONS = (() => {
|
|
60
|
+
const header =
|
|
61
|
+
'You are part of a multi-agent platform. Always respond as the agent named in your specific instructions.';
|
|
62
|
+
const universalRules = Array.from(
|
|
63
|
+
{ length: 60 },
|
|
64
|
+
(_, i) =>
|
|
65
|
+
`Universal Rule ${i + 1}: respond concisely; cite assumptions explicitly; treat all users with respect; never fabricate facts; if uncertain, say so explicitly. Use tools only when they add value. Maintain professional tone in all responses regardless of conversation history.`
|
|
66
|
+
).join('\n');
|
|
67
|
+
const toolRouting =
|
|
68
|
+
'Tool Routing: prefer artifact_tool for documents, execute_code for analysis, web_search for current events. Never reveal underlying model identity.';
|
|
69
|
+
return `${header}\n\n${universalRules}\n\n${toolRouting}`;
|
|
70
|
+
})();
|
|
71
|
+
|
|
72
|
+
interface UsageReadout {
|
|
73
|
+
input_tokens: number;
|
|
74
|
+
output_tokens: number;
|
|
75
|
+
cache_read_input_tokens: number;
|
|
76
|
+
cache_write_input_tokens: number;
|
|
77
|
+
total_tokens: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Build an AgentContext for the given (custom-agent-style) configuration,
|
|
82
|
+
* extract its system message, and send a request to Bedrock. Returns the
|
|
83
|
+
* usage breakdown including cache hit/write metrics.
|
|
84
|
+
*/
|
|
85
|
+
async function callAgent({
|
|
86
|
+
agentId,
|
|
87
|
+
agentName,
|
|
88
|
+
platformInstructions,
|
|
89
|
+
agentInstructions,
|
|
90
|
+
query,
|
|
91
|
+
}: {
|
|
92
|
+
agentId: string;
|
|
93
|
+
agentName: string;
|
|
94
|
+
platformInstructions: string;
|
|
95
|
+
agentInstructions: string;
|
|
96
|
+
query: string;
|
|
97
|
+
}): Promise<UsageReadout> {
|
|
98
|
+
const ctx = AgentContext.fromConfig({
|
|
99
|
+
agentId,
|
|
100
|
+
name: agentName,
|
|
101
|
+
provider: Providers.BEDROCK,
|
|
102
|
+
system_cache_blocks: [{ text: platformInstructions }],
|
|
103
|
+
instructions: agentInstructions,
|
|
104
|
+
clientOptions: {
|
|
105
|
+
promptCache: true,
|
|
106
|
+
model: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
|
|
107
|
+
} as t.BedrockAnthropicClientOptions,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const runnable = ctx.systemRunnable;
|
|
111
|
+
expect(runnable).toBeDefined();
|
|
112
|
+
|
|
113
|
+
const systemArr = (await runnable!.invoke([])) as BaseMessage[];
|
|
114
|
+
const userMessages: BaseMessage[] = [new HumanMessage(query)];
|
|
115
|
+
const allMessages = [...systemArr, ...userMessages];
|
|
116
|
+
const finalMessages = addBedrockCacheControl<BaseMessage>(allMessages);
|
|
117
|
+
|
|
118
|
+
/* Sanity: system message has at least 2 cachePoints (one per cacheable
|
|
119
|
+
* tier — platform + agent). */
|
|
120
|
+
const sysContent = finalMessages[0].content as Array<Record<string, unknown>>;
|
|
121
|
+
const cachePointCount = sysContent.filter((b) => 'cachePoint' in b).length;
|
|
122
|
+
expect(cachePointCount).toBeGreaterThanOrEqual(2);
|
|
123
|
+
|
|
124
|
+
const llm = new IllumaBedrockConverse({
|
|
125
|
+
model: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
|
|
126
|
+
region,
|
|
127
|
+
credentials: {
|
|
128
|
+
accessKeyId: accessKeyId as string,
|
|
129
|
+
secretAccessKey: secretAccessKey as string,
|
|
130
|
+
},
|
|
131
|
+
promptCache: true,
|
|
132
|
+
streaming: false,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
const aiMessage = (await llm.invoke(finalMessages)) as AIMessage;
|
|
136
|
+
|
|
137
|
+
type RespMeta = {
|
|
138
|
+
usage?: {
|
|
139
|
+
inputTokens?: number;
|
|
140
|
+
outputTokens?: number;
|
|
141
|
+
totalTokens?: number;
|
|
142
|
+
cacheReadInputTokens?: number;
|
|
143
|
+
cacheWriteInputTokens?: number;
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
const u = ((aiMessage.response_metadata ?? {}) as RespMeta).usage ?? {};
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
input_tokens: u.inputTokens ?? 0,
|
|
150
|
+
output_tokens: u.outputTokens ?? 0,
|
|
151
|
+
total_tokens: u.totalTokens ?? 0,
|
|
152
|
+
cache_read_input_tokens: u.cacheReadInputTokens ?? 0,
|
|
153
|
+
cache_write_input_tokens: u.cacheWriteInputTokens ?? 0,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
describeFn('LIVE: Bedrock cross-AGENT Tier 1 cache sharing', () => {
|
|
158
|
+
jest.setTimeout(180000);
|
|
159
|
+
|
|
160
|
+
test('two distinct custom agents share the Tier 1 platform cache', async () => {
|
|
161
|
+
/* Custom Agent A — completely different agent.instructions from B. */
|
|
162
|
+
const finance = await callAgent({
|
|
163
|
+
agentId: 'finance-helper',
|
|
164
|
+
agentName: 'Finance Helper',
|
|
165
|
+
platformInstructions: PLATFORM_INSTRUCTIONS,
|
|
166
|
+
agentInstructions:
|
|
167
|
+
'You are Finance Helper. Specialize in SAP, Bloomberg Terminal, and quarterly earnings analysis. Always cite source data with timestamps.',
|
|
168
|
+
query: 'one word: hi',
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
console.log('Finance Helper usage:', finance);
|
|
172
|
+
|
|
173
|
+
/* Custom Agent B — different name, different instructions, different
|
|
174
|
+
* domain. Same Tier 1 prefix. */
|
|
175
|
+
const hr = await callAgent({
|
|
176
|
+
agentId: 'hr-helper',
|
|
177
|
+
agentName: 'HR Helper',
|
|
178
|
+
platformInstructions: PLATFORM_INSTRUCTIONS,
|
|
179
|
+
agentInstructions:
|
|
180
|
+
'You are HR Helper. Specialize in Workday, Lever, and employee onboarding workflows. Maintain confidentiality at all times.',
|
|
181
|
+
query: 'one word: yes',
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
console.log('HR Helper usage:', hr);
|
|
185
|
+
|
|
186
|
+
/* CONTRACT 1: Both agents must show cache activity. The first
|
|
187
|
+
* (or whichever called first) writes the platform cache; the second
|
|
188
|
+
* reads it. Either pattern is acceptable on a fresh test run. */
|
|
189
|
+
const totalCacheActivity =
|
|
190
|
+
finance.cache_read_input_tokens +
|
|
191
|
+
finance.cache_write_input_tokens +
|
|
192
|
+
hr.cache_read_input_tokens +
|
|
193
|
+
hr.cache_write_input_tokens;
|
|
194
|
+
expect(totalCacheActivity).toBeGreaterThan(0);
|
|
195
|
+
|
|
196
|
+
/* CONTRACT 2 (the load-bearing one): HR Helper's cache_read includes
|
|
197
|
+
* the platform tier from Finance Helper's call. Even though they're
|
|
198
|
+
* different agents, the platform prefix is byte-identical so the
|
|
199
|
+
* cache key matches.
|
|
200
|
+
*
|
|
201
|
+
* If the ARCHITECTURE works:
|
|
202
|
+
* - Finance: cache_write ≈ size(platform) + size(finance.instructions)
|
|
203
|
+
* - HR: cache_read ≈ size(platform), cache_write ≈ size(hr.instructions)
|
|
204
|
+
*
|
|
205
|
+
* If the architecture is WRONG (e.g. cachePoint missing):
|
|
206
|
+
* - HR: cache_read = 0
|
|
207
|
+
*/
|
|
208
|
+
expect(hr.cache_read_input_tokens).toBeGreaterThan(0);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
test('Three custom agents share the Tier 1 cache across cold starts', async () => {
|
|
212
|
+
/* Sequentially invoke 3 custom agents with the same platform tier.
|
|
213
|
+
* Each agent's Tier 2 (its own instructions) cold-writes once, but
|
|
214
|
+
* the platform tier writes only on the first agent — all three read
|
|
215
|
+
* the platform tier from cache. */
|
|
216
|
+
const agents = [
|
|
217
|
+
{
|
|
218
|
+
id: 'eng-helper',
|
|
219
|
+
name: 'Engineering Helper',
|
|
220
|
+
ins: 'You are Engineering Helper. Use Jira, GitHub, and Confluence.',
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
id: 'sales-helper',
|
|
224
|
+
name: 'Sales Helper',
|
|
225
|
+
ins: 'You are Sales Helper. Use Salesforce, Gong, and HubSpot.',
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
id: 'legal-helper',
|
|
229
|
+
name: 'Legal Helper',
|
|
230
|
+
ins: 'You are Legal Helper. Use DocuSign, Ironclad, and clause libraries.',
|
|
231
|
+
},
|
|
232
|
+
];
|
|
233
|
+
|
|
234
|
+
const results: Array<{ agent: typeof agents[0]; usage: UsageReadout }> = [];
|
|
235
|
+
for (const a of agents) {
|
|
236
|
+
const usage = await callAgent({
|
|
237
|
+
agentId: a.id,
|
|
238
|
+
agentName: a.name,
|
|
239
|
+
platformInstructions: PLATFORM_INSTRUCTIONS,
|
|
240
|
+
agentInstructions: a.ins,
|
|
241
|
+
query: 'one word: ok',
|
|
242
|
+
});
|
|
243
|
+
results.push({ agent: a, usage });
|
|
244
|
+
console.log(
|
|
245
|
+
`${a.name}: cache_read=${usage.cache_read_input_tokens}, ` +
|
|
246
|
+
`cache_write=${usage.cache_write_input_tokens}, total=${usage.total_tokens}`
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* All three agents must show evidence of cache activity. */
|
|
251
|
+
results.forEach(({ usage }) => {
|
|
252
|
+
const activity =
|
|
253
|
+
usage.cache_read_input_tokens + usage.cache_write_input_tokens;
|
|
254
|
+
expect(activity).toBeGreaterThan(0);
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
/* At least 2 of the 3 should show a cache_read (assuming the first
|
|
258
|
+
* does the write). On a re-run all 3 read. */
|
|
259
|
+
const usersWithCacheRead = results.filter(
|
|
260
|
+
(r) => r.usage.cache_read_input_tokens > 0
|
|
261
|
+
).length;
|
|
262
|
+
expect(usersWithCacheRead).toBeGreaterThanOrEqual(2);
|
|
263
|
+
});
|
|
264
|
+
});
|