@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
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Child-agent context preparation utilities.
|
|
3
|
-
*
|
|
4
|
-
* When a parent agent invokes a child agent — via handoff, sequence edge,
|
|
5
|
-
* or scoped subgraph — the child cannot just receive `state.messages`
|
|
6
|
-
* verbatim. The parent's conversation contains tool_use/tool_result blocks
|
|
7
|
-
* that are (a) often incompatible with the child's tool registry, and
|
|
8
|
-
* (b) actively harmful to the child's ability to reason cleanly about its
|
|
9
|
-
* own task (noise → schema confusion → malformed tool_use).
|
|
10
|
-
*
|
|
11
|
-
* This module provides the two canonical strategies, extracted from
|
|
12
|
-
* `MultiAgentGraph` so they can be unit-tested in isolation and reused by
|
|
13
|
-
* future sub-agent orchestrators:
|
|
14
|
-
*
|
|
15
|
-
* 1. `prepareHandoffMessages` — "cleaned parent history"
|
|
16
|
-
* Used when the child still needs the orchestrator's context (it's
|
|
17
|
-
* the handoff target). Drops orphaned tool_use, compacts paired
|
|
18
|
-
* tool_use/tool_result into text summaries, and guarantees the tail
|
|
19
|
-
* is a HumanMessage so Bedrock/VertexAI won't reject the conversation
|
|
20
|
-
* with "assistant message prefill" errors.
|
|
21
|
-
*
|
|
22
|
-
* 2. `prepareIsolatedChildMessages` — "fresh session"
|
|
23
|
-
* Used for downstream sequence-node children inside a scoped subgraph.
|
|
24
|
-
* The child sees only the original user request plus a synthetic
|
|
25
|
-
* HumanMessage summarizing the upstream agent's final text output and
|
|
26
|
-
* directing the child to act. Raw upstream tool_use/tool_result blocks
|
|
27
|
-
* are discarded.
|
|
28
|
-
*
|
|
29
|
-
* Both helpers are pure functions over message arrays — no I/O, no
|
|
30
|
-
* LangGraph coupling — so they can be exercised by unit tests with
|
|
31
|
-
* synthetic message fixtures.
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
import { AIMessage, HumanMessage, ToolMessage } from '@langchain/core/messages';
|
|
35
|
-
import type { AIMessageChunk, BaseMessage } from '@langchain/core/messages';
|
|
36
|
-
|
|
37
|
-
/* -------------------------------------------------------------------------- */
|
|
38
|
-
/* Prompt template constants (kept outside the functions for reuse/tuning) */
|
|
39
|
-
/* -------------------------------------------------------------------------- */
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Prefix injected in front of a trailing AIMessage when we flip it to a
|
|
43
|
-
* HumanMessage to satisfy provider "last message must be user" rules.
|
|
44
|
-
*/
|
|
45
|
-
export const HANDOFF_TAIL_CONTEXT_PREFIX = '[Context from orchestrator]: ';
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Directive task-framing wrapper for downstream scoped-subgraph children.
|
|
49
|
-
*
|
|
50
|
-
* Design notes — each line is load-bearing:
|
|
51
|
-
* - "Prior step output" names the upstream role without leaking the
|
|
52
|
-
* agent's internal id.
|
|
53
|
-
* - "You MUST now perform..." replaces ambiguity with obligation.
|
|
54
|
-
* - "system instructions" references the agent's stored system prompt
|
|
55
|
-
* as the source of task definition — so operators can tune behavior
|
|
56
|
-
* via data, not code.
|
|
57
|
-
* - The tool-first clause prevents small/fast models from stalling on a
|
|
58
|
-
* text-only acknowledgement when a tool action is expected.
|
|
59
|
-
*/
|
|
60
|
-
export function buildIsolatedChildPrompt(upstreamText: string): string {
|
|
61
|
-
return (
|
|
62
|
-
'## Prior step output\n\n' +
|
|
63
|
-
upstreamText +
|
|
64
|
-
'\n\n---\n\n' +
|
|
65
|
-
'## Your task\n\n' +
|
|
66
|
-
'The previous step in this workflow has completed. You MUST now ' +
|
|
67
|
-
'perform your own task as defined in your system instructions, ' +
|
|
68
|
-
"using the prior step's output as input where relevant.\n\n" +
|
|
69
|
-
'If your task requires calling a tool, call it directly — do not ' +
|
|
70
|
-
'ask for clarification and do not produce a text-only response when ' +
|
|
71
|
-
'a tool action is expected.'
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/* -------------------------------------------------------------------------- */
|
|
76
|
-
/* Internal helpers */
|
|
77
|
-
/* -------------------------------------------------------------------------- */
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Extract concatenated text content from an AI message's content field.
|
|
81
|
-
* Handles both the string shape (OpenAI/plain) and the array-of-blocks
|
|
82
|
-
* shape (Anthropic/Bedrock).
|
|
83
|
-
*/
|
|
84
|
-
function extractAIText(msg: AIMessage | AIMessageChunk): string {
|
|
85
|
-
const content = msg.content;
|
|
86
|
-
if (typeof content === 'string') return content;
|
|
87
|
-
if (!Array.isArray(content)) return '';
|
|
88
|
-
return (content as Array<{ type?: string; text?: string }>)
|
|
89
|
-
.filter((b) => b.type === 'text' && typeof b.text === 'string')
|
|
90
|
-
.map((b) => b.text ?? '')
|
|
91
|
-
.join('\n');
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/* -------------------------------------------------------------------------- */
|
|
95
|
-
/* Strategy 1: cleaned parent history (handoff target / root subgraph) */
|
|
96
|
-
/* -------------------------------------------------------------------------- */
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Prepare messages for a handoff child agent.
|
|
100
|
-
*
|
|
101
|
-
* Handles two problems that break Bedrock/Anthropic conversations:
|
|
102
|
-
*
|
|
103
|
-
* 1. **Orphaned tool_use**: The parent's AI message contains a `tool_use`
|
|
104
|
-
* block for the handoff tool itself, with no matching `tool_result`.
|
|
105
|
-
* Providers (Bedrock/Anthropic) reject this.
|
|
106
|
-
*
|
|
107
|
-
* 2. **Paired tool_use/tool_result in history**: The child may not have
|
|
108
|
-
* the same tools as the parent. Bedrock requires `toolConfig` when any
|
|
109
|
-
* tool_use/tool_result blocks exist in the history. Compacting these
|
|
110
|
-
* into text summaries avoids the requirement and reduces context bloat.
|
|
111
|
-
*
|
|
112
|
-
* Also ensures the tail is a HumanMessage — some providers reject a
|
|
113
|
-
* conversation that ends with an assistant message.
|
|
114
|
-
*
|
|
115
|
-
* @param messages - Current state messages from the parent
|
|
116
|
-
* @returns A sanitized copy, safe to pass to any provider as the child's
|
|
117
|
-
* input regardless of which tools the child has registered.
|
|
118
|
-
*/
|
|
119
|
-
export function prepareHandoffMessages(messages: BaseMessage[]): BaseMessage[] {
|
|
120
|
-
if (messages.length === 0) return messages;
|
|
121
|
-
|
|
122
|
-
/** Collect tool_result IDs so we know which tool_use blocks are paired */
|
|
123
|
-
const pairedToolCallIds = new Set<string>();
|
|
124
|
-
for (const msg of messages) {
|
|
125
|
-
if (msg.getType() === 'tool') {
|
|
126
|
-
const tm = msg as ToolMessage;
|
|
127
|
-
if (tm.tool_call_id) pairedToolCallIds.add(tm.tool_call_id);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Pass 1: Drop all ToolMessages (paired ones are compacted in pass 2),
|
|
133
|
-
* rewrite AI messages with tool_calls into plain-text summaries, leave
|
|
134
|
-
* other messages untouched.
|
|
135
|
-
*/
|
|
136
|
-
const cleaned: BaseMessage[] = [];
|
|
137
|
-
for (const msg of messages) {
|
|
138
|
-
if (msg.getType() === 'tool') continue;
|
|
139
|
-
|
|
140
|
-
if (msg.getType() !== 'ai') {
|
|
141
|
-
cleaned.push(msg);
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const aiMsg = msg as AIMessage | AIMessageChunk;
|
|
146
|
-
const toolCalls = aiMsg.tool_calls ?? [];
|
|
147
|
-
if (toolCalls.length === 0) {
|
|
148
|
-
cleaned.push(msg);
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const textContent = extractAIText(aiMsg);
|
|
153
|
-
|
|
154
|
-
const toolSummaries: string[] = [];
|
|
155
|
-
for (const tc of toolCalls) {
|
|
156
|
-
if (tc.id != null && pairedToolCallIds.has(tc.id)) {
|
|
157
|
-
const toolResult = messages.find(
|
|
158
|
-
(m) =>
|
|
159
|
-
m.getType() === 'tool' && (m as ToolMessage).tool_call_id === tc.id
|
|
160
|
-
) as ToolMessage | undefined;
|
|
161
|
-
const resultContent = toolResult
|
|
162
|
-
? typeof toolResult.content === 'string'
|
|
163
|
-
? toolResult.content.slice(0, 500)
|
|
164
|
-
: '[complex result]'
|
|
165
|
-
: '[no result]';
|
|
166
|
-
toolSummaries.push(`[Tool "${tc.name}": ${resultContent}]`);
|
|
167
|
-
}
|
|
168
|
-
// Orphaned tool_use blocks (no matching result) are silently dropped.
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
const parts = [textContent, ...toolSummaries].filter(Boolean);
|
|
172
|
-
if (parts.length > 0) {
|
|
173
|
-
cleaned.push(
|
|
174
|
-
new AIMessage({ content: parts.join('\n\n'), id: aiMsg.id })
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Ensure messages end with a HumanMessage. After stripping tool artifacts
|
|
181
|
-
* the tail may be an AIMessage, which Bedrock/VertexAI reject. Convert it
|
|
182
|
-
* to a HumanMessage preserving whatever text content was present, or drop
|
|
183
|
-
* it entirely if empty.
|
|
184
|
-
*/
|
|
185
|
-
if (cleaned.length > 0 && cleaned[cleaned.length - 1].getType() === 'ai') {
|
|
186
|
-
const lastAI = cleaned[cleaned.length - 1];
|
|
187
|
-
const content = typeof lastAI.content === 'string' ? lastAI.content : '';
|
|
188
|
-
if (content.trim()) {
|
|
189
|
-
cleaned[cleaned.length - 1] = new HumanMessage(
|
|
190
|
-
`${HANDOFF_TAIL_CONTEXT_PREFIX}${content}`
|
|
191
|
-
);
|
|
192
|
-
} else {
|
|
193
|
-
cleaned.pop();
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return cleaned;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/* -------------------------------------------------------------------------- */
|
|
201
|
-
/* Strategy 2: isolated fresh session (downstream scoped-subgraph child) */
|
|
202
|
-
/* -------------------------------------------------------------------------- */
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Build an ISOLATED message context for a downstream scoped-subgraph node.
|
|
206
|
-
*
|
|
207
|
-
* Unlike `prepareHandoffMessages` (which cleans up tool_use artifacts but
|
|
208
|
-
* preserves most of the parent history), this helper produces a fresh
|
|
209
|
-
* minimal context containing only:
|
|
210
|
-
*
|
|
211
|
-
* 1. The original user request (first HumanMessage in the history)
|
|
212
|
-
* 2. A synthetic HumanMessage summarizing the upstream agent's final
|
|
213
|
-
* text output and directing the downstream agent to act on it
|
|
214
|
-
*
|
|
215
|
-
* Tool_use / tool_result blocks from the upstream agent are discarded —
|
|
216
|
-
* the downstream agent shouldn't reason about how the upstream agent did
|
|
217
|
-
* its work, only about the result.
|
|
218
|
-
*
|
|
219
|
-
* This "fresh subagent session" pattern is the primary defense against
|
|
220
|
-
* schema confusion / malformed tool_use JSON that occurs when downstream
|
|
221
|
-
* models see a noisy upstream conversation.
|
|
222
|
-
*
|
|
223
|
-
* Defensive fallback: if the messages array contains neither a user
|
|
224
|
-
* message nor a non-empty upstream AI message, return the input unchanged
|
|
225
|
-
* so the caller still has something to invoke on. This only matters for
|
|
226
|
-
* malformed state fixtures in tests.
|
|
227
|
-
*/
|
|
228
|
-
export function prepareIsolatedChildMessages(
|
|
229
|
-
messages: BaseMessage[]
|
|
230
|
-
): BaseMessage[] {
|
|
231
|
-
if (messages.length === 0) return messages;
|
|
232
|
-
|
|
233
|
-
/** First HumanMessage is the original user request */
|
|
234
|
-
const originalUser = messages.find((m) => m.getType() === 'human');
|
|
235
|
-
|
|
236
|
-
/** Most recent AIMessage with non-empty text content */
|
|
237
|
-
let upstreamText = '';
|
|
238
|
-
for (let i = messages.length - 1; i >= 0; i--) {
|
|
239
|
-
const msg = messages[i];
|
|
240
|
-
if (msg.getType() !== 'ai') continue;
|
|
241
|
-
const text = extractAIText(msg as AIMessage | AIMessageChunk);
|
|
242
|
-
if (text.trim()) {
|
|
243
|
-
upstreamText = text;
|
|
244
|
-
break;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
const result: BaseMessage[] = [];
|
|
249
|
-
if (originalUser) result.push(originalUser);
|
|
250
|
-
|
|
251
|
-
if (upstreamText.trim()) {
|
|
252
|
-
result.push(new HumanMessage(buildIsolatedChildPrompt(upstreamText)));
|
|
253
|
-
} else if (result.length === 0) {
|
|
254
|
-
/** Defensive: nothing to isolate — fall back to raw messages */
|
|
255
|
-
return messages;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
return result;
|
|
259
|
-
}
|
package/src/utils/credentials.ts
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Credential merging utility for capability providers.
|
|
3
|
-
*
|
|
4
|
-
* The host is the source of truth for credential values. It resolves them
|
|
5
|
-
* from env vars, user settings, or active OAuth sessions, then passes a
|
|
6
|
-
* flat CredentialMap to the provider.
|
|
7
|
-
*
|
|
8
|
-
* This utility helps hosts build that map from multiple sources with clear
|
|
9
|
-
* precedence rules. Providers themselves do NOT use this — they just receive
|
|
10
|
-
* the finished map.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import type {
|
|
14
|
-
AuthConfigEntry,
|
|
15
|
-
Capability,
|
|
16
|
-
CredentialMap,
|
|
17
|
-
} from '@/providers/types';
|
|
18
|
-
import { AuthSource } from '@/providers/types';
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Source of a credential value in the merged result. Useful for logging
|
|
22
|
-
* and debugging which layer won a given authField.
|
|
23
|
-
*/
|
|
24
|
-
export enum CredentialOrigin {
|
|
25
|
-
/** From the caller's process env (typically the CLI). */
|
|
26
|
-
ENV = 'env',
|
|
27
|
-
/** From the agent definition's tool_credentials block. */
|
|
28
|
-
AGENT = 'agent',
|
|
29
|
-
/** From the user's stored credentials in the host's credential store. */
|
|
30
|
-
USER = 'user',
|
|
31
|
-
/** From an active OAuth session forwarded by the host. */
|
|
32
|
-
SESSION = 'session',
|
|
33
|
-
/** Injected by the host at runtime for another reason. */
|
|
34
|
-
RUNTIME = 'runtime',
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** One layer of credentials with its origin. */
|
|
38
|
-
export interface CredentialLayer {
|
|
39
|
-
origin: CredentialOrigin;
|
|
40
|
-
values: CredentialMap;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Merge credential layers with earlier layers overriding later ones.
|
|
45
|
-
*
|
|
46
|
-
* Typical host flow (in order of precedence):
|
|
47
|
-
* 1. runtime overrides (e.g., test injection) → RUNTIME
|
|
48
|
-
* 2. active OAuth session tokens → SESSION
|
|
49
|
-
* 3. agent-defined tool_credentials → AGENT
|
|
50
|
-
* 4. user's stored credentials → USER
|
|
51
|
-
* 5. process env → ENV
|
|
52
|
-
*
|
|
53
|
-
* Caller passes layers in precedence order (highest first).
|
|
54
|
-
*/
|
|
55
|
-
export function mergeCredentials(...layers: CredentialLayer[]): CredentialMap {
|
|
56
|
-
const merged: CredentialMap = {};
|
|
57
|
-
// Iterate reverse so first-declared layer wins on collision.
|
|
58
|
-
for (let i = layers.length - 1; i >= 0; i--) {
|
|
59
|
-
const layer = layers[i];
|
|
60
|
-
for (const [key, value] of Object.entries(layer.values)) {
|
|
61
|
-
if (value !== undefined && value !== null && value !== '') {
|
|
62
|
-
merged[key] = value;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return merged;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Given a set of capabilities, return the union of authField names they
|
|
71
|
-
* require. Useful for hosts that want to pre-resolve credentials before
|
|
72
|
-
* calling createRunnables.
|
|
73
|
-
*/
|
|
74
|
-
export function collectRequiredAuthFields(
|
|
75
|
-
capabilities: Capability[]
|
|
76
|
-
): string[] {
|
|
77
|
-
const fields = new Set<string>();
|
|
78
|
-
for (const cap of capabilities) {
|
|
79
|
-
for (const entry of cap.authConfig) {
|
|
80
|
-
fields.add(entry.authField);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return Array.from(fields);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Filter out credentials that the provider is expected to resolve itself
|
|
88
|
-
* (source === SERVER). Hosts call this before forwarding — these values
|
|
89
|
-
* live in the provider's own environment and shouldn't be sent.
|
|
90
|
-
*
|
|
91
|
-
* Precedence: entries without `source` default to USER (must be forwarded).
|
|
92
|
-
*/
|
|
93
|
-
export function filterForwardableCredentials(
|
|
94
|
-
credentials: CredentialMap,
|
|
95
|
-
capabilities: Capability[]
|
|
96
|
-
): CredentialMap {
|
|
97
|
-
const serverManagedFields = new Set<string>();
|
|
98
|
-
for (const cap of capabilities) {
|
|
99
|
-
for (const entry of cap.authConfig) {
|
|
100
|
-
if (entry.source === AuthSource.SERVER) {
|
|
101
|
-
serverManagedFields.add(entry.authField);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
const forwardable: CredentialMap = {};
|
|
106
|
-
for (const [key, value] of Object.entries(credentials)) {
|
|
107
|
-
if (!serverManagedFields.has(key)) {
|
|
108
|
-
forwardable[key] = value;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return forwardable;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Validate that all required credentials for a capability are present in
|
|
116
|
-
* the provided map. Returns the list of missing authFields (empty array
|
|
117
|
-
* if all satisfied). Credentials with `source === SERVER` are excluded
|
|
118
|
-
* from the check since the provider resolves them.
|
|
119
|
-
*/
|
|
120
|
-
export function findMissingCredentials(
|
|
121
|
-
capability: Capability,
|
|
122
|
-
credentials: CredentialMap
|
|
123
|
-
): string[] {
|
|
124
|
-
const missing: string[] = [];
|
|
125
|
-
for (const entry of capability.authConfig) {
|
|
126
|
-
if (entry.source === AuthSource.SERVER) continue;
|
|
127
|
-
if (!entry.required) continue;
|
|
128
|
-
if (!credentials[entry.authField]) {
|
|
129
|
-
missing.push(entry.authField);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return missing;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Build a CredentialLayer from process env given a list of authField names.
|
|
137
|
-
* Values that aren't set in env are omitted (not set to empty string).
|
|
138
|
-
*/
|
|
139
|
-
export function credentialsFromEnv(
|
|
140
|
-
authFields: readonly string[],
|
|
141
|
-
env: NodeJS.ProcessEnv = process.env
|
|
142
|
-
): CredentialLayer {
|
|
143
|
-
const values: CredentialMap = {};
|
|
144
|
-
for (const field of authFields) {
|
|
145
|
-
const value = env[field];
|
|
146
|
-
if (value) values[field] = value;
|
|
147
|
-
}
|
|
148
|
-
return { origin: CredentialOrigin.ENV, values };
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Type guard: check whether an auth config entry should be forwarded by
|
|
153
|
-
* the host (vs resolved by the provider itself).
|
|
154
|
-
*/
|
|
155
|
-
export function isForwardable(entry: AuthConfigEntry): boolean {
|
|
156
|
-
return entry.source !== AuthSource.SERVER;
|
|
157
|
-
}
|
package/src/utils/httpClient.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP client utility for capability providers.
|
|
3
|
-
*
|
|
4
|
-
* Wraps axios with proxy support, default headers, and consistent retry
|
|
5
|
-
* behavior so every provider doesn't reinvent the wheel. Used by
|
|
6
|
-
* ToolsServerCapabilityProvider and (future) any HTTP-backed provider.
|
|
7
|
-
*
|
|
8
|
-
* Proxy resolution follows the existing pattern in this codebase:
|
|
9
|
-
* the PROXY env var is read and an HttpsProxyAgent is attached if present.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios';
|
|
13
|
-
import { HttpsProxyAgent } from 'https-proxy-agent';
|
|
14
|
-
|
|
15
|
-
/** Configuration for creating an HTTP client. */
|
|
16
|
-
export interface HttpClientConfig {
|
|
17
|
-
/** Base URL prepended to all requests. */
|
|
18
|
-
baseURL: string;
|
|
19
|
-
/** Optional API key — if present, sent as `x-api-key` header. */
|
|
20
|
-
apiKey?: string;
|
|
21
|
-
/** Custom header map merged into every request. */
|
|
22
|
-
headers?: Record<string, string>;
|
|
23
|
-
/** Request timeout in milliseconds. Defaults to 30_000. */
|
|
24
|
-
timeoutMs?: number;
|
|
25
|
-
/**
|
|
26
|
-
* Override for the PROXY env var. Useful for tests. If undefined,
|
|
27
|
-
* falls back to process.env.PROXY.
|
|
28
|
-
*/
|
|
29
|
-
proxy?: string | null;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Build an axios instance configured per HttpClientConfig.
|
|
34
|
-
*
|
|
35
|
-
* The returned instance should be retained (not recreated per request) so
|
|
36
|
-
* keepalive connections can be reused.
|
|
37
|
-
*/
|
|
38
|
-
export function createHttpClient(config: HttpClientConfig): AxiosInstance {
|
|
39
|
-
const { baseURL, apiKey, headers = {}, timeoutMs = 30_000, proxy } = config;
|
|
40
|
-
|
|
41
|
-
const resolvedProxy = proxy === undefined ? process.env.PROXY : proxy;
|
|
42
|
-
|
|
43
|
-
const defaultHeaders: Record<string, string> = {
|
|
44
|
-
'content-type': 'application/json',
|
|
45
|
-
...headers,
|
|
46
|
-
};
|
|
47
|
-
if (apiKey) {
|
|
48
|
-
defaultHeaders['x-api-key'] = apiKey;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const axiosConfig: AxiosRequestConfig = {
|
|
52
|
-
baseURL,
|
|
53
|
-
timeout: timeoutMs,
|
|
54
|
-
headers: defaultHeaders,
|
|
55
|
-
// Don't throw on non-2xx — callers handle status codes explicitly.
|
|
56
|
-
validateStatus: () => true,
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
if (resolvedProxy) {
|
|
60
|
-
// axios respects `httpsAgent` for outbound proxying
|
|
61
|
-
axiosConfig.httpsAgent = new HttpsProxyAgent(resolvedProxy);
|
|
62
|
-
axiosConfig.httpAgent = new HttpsProxyAgent(resolvedProxy);
|
|
63
|
-
// Disable axios's built-in proxy logic in favor of the agent.
|
|
64
|
-
axiosConfig.proxy = false;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return axios.create(axiosConfig);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Thin wrapper around an axios response that throws with a structured error
|
|
72
|
-
* on non-2xx status codes. Providers use this to get uniform error surface.
|
|
73
|
-
*/
|
|
74
|
-
export class HttpError extends Error {
|
|
75
|
-
readonly status: number;
|
|
76
|
-
readonly body: unknown;
|
|
77
|
-
readonly url: string;
|
|
78
|
-
constructor(status: number, url: string, body: unknown) {
|
|
79
|
-
super(`HTTP ${status} on ${url}`);
|
|
80
|
-
this.name = 'HttpError';
|
|
81
|
-
this.status = status;
|
|
82
|
-
this.url = url;
|
|
83
|
-
this.body = body;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** Assert that an axios response is a 2xx; throw HttpError otherwise. */
|
|
88
|
-
export function assertOk(status: number, url: string, body: unknown): void {
|
|
89
|
-
if (status < 200 || status >= 300) {
|
|
90
|
-
throw new HttpError(status, url, body);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool manifest cache.
|
|
3
|
-
*
|
|
4
|
-
* Providers fetch a manifest at init and potentially on refresh. This
|
|
5
|
-
* utility provides a minimal TTL cache so repeated fetchManifest() calls
|
|
6
|
-
* don't hammer the backing server.
|
|
7
|
-
*
|
|
8
|
-
* Caching is opt-in — providers that want fresh data every time (e.g.,
|
|
9
|
-
* MCP with dynamic tool lists) can skip this entirely.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import type { Capability, CapabilityFilter } from '@/providers/types';
|
|
13
|
-
|
|
14
|
-
/** Entry in the manifest cache. */
|
|
15
|
-
interface CacheEntry {
|
|
16
|
-
expiresAt: number;
|
|
17
|
-
capabilities: Capability[];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface ManifestCacheConfig {
|
|
21
|
-
/** Time-to-live in milliseconds. 0 disables caching. Defaults to 60_000 (1 min). */
|
|
22
|
-
ttlMs?: number;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Simple in-memory TTL cache for manifests, keyed by a caller-supplied
|
|
27
|
-
* cache key (e.g., the filter hash or a fixed constant for unfiltered).
|
|
28
|
-
*
|
|
29
|
-
* Thread-safety: the cache uses a plain Map. Node's single-threaded event
|
|
30
|
-
* loop makes this safe for typical use. Not safe across workers — each
|
|
31
|
-
* worker keeps its own cache (fine, since manifests are small).
|
|
32
|
-
*/
|
|
33
|
-
export class ManifestCache {
|
|
34
|
-
private readonly ttlMs: number;
|
|
35
|
-
private readonly store = new Map<string, CacheEntry>();
|
|
36
|
-
|
|
37
|
-
constructor(config: ManifestCacheConfig = {}) {
|
|
38
|
-
this.ttlMs = config.ttlMs ?? 60_000;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** Retrieve cached capabilities, or undefined on miss / expiry. */
|
|
42
|
-
get(key: string): Capability[] | undefined {
|
|
43
|
-
const entry = this.store.get(key);
|
|
44
|
-
if (!entry) return undefined;
|
|
45
|
-
if (entry.expiresAt < Date.now()) {
|
|
46
|
-
this.store.delete(key);
|
|
47
|
-
return undefined;
|
|
48
|
-
}
|
|
49
|
-
return entry.capabilities;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/** Insert or replace cached capabilities for the given key. */
|
|
53
|
-
set(key: string, capabilities: Capability[]): void {
|
|
54
|
-
if (this.ttlMs <= 0) return;
|
|
55
|
-
this.store.set(key, {
|
|
56
|
-
expiresAt: Date.now() + this.ttlMs,
|
|
57
|
-
capabilities,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** Remove all cached entries. */
|
|
62
|
-
clear(): void {
|
|
63
|
-
this.store.clear();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/** For tests / diagnostics. */
|
|
67
|
-
get size(): number {
|
|
68
|
-
return this.store.size;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Build a deterministic cache key from a CapabilityFilter.
|
|
74
|
-
*
|
|
75
|
-
* Two identical filters always produce the same key. Providers use this
|
|
76
|
-
* so `fetchManifest(filter)` and `fetchManifest(sameFilter)` hit the
|
|
77
|
-
* same cache entry.
|
|
78
|
-
*/
|
|
79
|
-
export function filterToCacheKey(filter?: CapabilityFilter): string {
|
|
80
|
-
if (!filter) return '__all__';
|
|
81
|
-
const parts: string[] = [];
|
|
82
|
-
if (filter.kind) parts.push(`kind=${filter.kind}`);
|
|
83
|
-
if (filter.tags?.length)
|
|
84
|
-
parts.push(`tags=${[...filter.tags].sort().join(',')}`);
|
|
85
|
-
if (filter.names?.length)
|
|
86
|
-
parts.push(`names=${[...filter.names].sort().join(',')}`);
|
|
87
|
-
return parts.length ? parts.join('|') : '__all__';
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Apply a CapabilityFilter to a pre-fetched manifest. Used by providers
|
|
92
|
-
* that fetch the full manifest once and filter in memory.
|
|
93
|
-
*/
|
|
94
|
-
export function applyFilter(
|
|
95
|
-
capabilities: Capability[],
|
|
96
|
-
filter?: CapabilityFilter
|
|
97
|
-
): Capability[] {
|
|
98
|
-
if (!filter) return capabilities;
|
|
99
|
-
return capabilities.filter((cap) => {
|
|
100
|
-
if (filter.kind && cap.kind !== filter.kind) return false;
|
|
101
|
-
if (filter.names && !filter.names.includes(cap.name)) return false;
|
|
102
|
-
if (filter.tags?.length) {
|
|
103
|
-
const capTags = new Set(cap.metadata.tags ?? []);
|
|
104
|
-
const anyMatch = filter.tags.some((t) => capTags.has(t));
|
|
105
|
-
if (!anyMatch) return false;
|
|
106
|
-
}
|
|
107
|
-
return true;
|
|
108
|
-
});
|
|
109
|
-
}
|
|
File without changes
|