@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,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utilities for measuring, classifying, and previewing content.
|
|
3
|
-
* Used by the content_tool and MCP auto-caching (Phase 2) to decide
|
|
4
|
-
* when content is "large" and how to summarize it for the LLM.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Threshold in characters above which content is considered "large"
|
|
9
|
-
* and should be stored in ContentStore rather than inlined.
|
|
10
|
-
* 50K chars ~ 12.5K tokens ~ 6% of 200K context window.
|
|
11
|
-
*/
|
|
12
|
-
const LARGE_CONTENT_THRESHOLD = 50_000;
|
|
13
|
-
|
|
14
|
-
/** Content size measurements. */
|
|
15
|
-
export interface ContentMeasurement {
|
|
16
|
-
totalChars: number;
|
|
17
|
-
totalLines: number;
|
|
18
|
-
/** True if content exceeds the large-content threshold. */
|
|
19
|
-
isLarge: boolean;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** Detected content type. */
|
|
23
|
-
export type ContentType = 'json_array' | 'json_object' | 'text' | 'mixed';
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Measure content size and determine if it exceeds the large-content threshold.
|
|
27
|
-
* @param text - The content to measure.
|
|
28
|
-
* @returns Measurement with char count, line count, and large flag.
|
|
29
|
-
*/
|
|
30
|
-
export function measureContent(text: string): ContentMeasurement {
|
|
31
|
-
return {
|
|
32
|
-
totalChars: text.length,
|
|
33
|
-
totalLines: text.split('\n').length,
|
|
34
|
-
isLarge: text.length > LARGE_CONTENT_THRESHOLD,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Detect the structural type of content.
|
|
40
|
-
* @param text - The content to classify.
|
|
41
|
-
* @returns The detected type: 'json_array', 'json_object', 'text', or 'mixed'.
|
|
42
|
-
*/
|
|
43
|
-
export function detectContentType(text: string): ContentType {
|
|
44
|
-
const trimmed = text.trim();
|
|
45
|
-
if (!trimmed) {
|
|
46
|
-
return 'text';
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Fast check: does it look like JSON?
|
|
50
|
-
if (trimmed[0] === '[' || trimmed[0] === '{') {
|
|
51
|
-
try {
|
|
52
|
-
const parsed = JSON.parse(trimmed);
|
|
53
|
-
if (Array.isArray(parsed)) {
|
|
54
|
-
return 'json_array';
|
|
55
|
-
}
|
|
56
|
-
if (typeof parsed === 'object' && parsed !== null) {
|
|
57
|
-
return 'json_object';
|
|
58
|
-
}
|
|
59
|
-
} catch {
|
|
60
|
-
// Not valid JSON — might be mixed content
|
|
61
|
-
if (trimmed[0] === '[' || trimmed[0] === '{') {
|
|
62
|
-
return 'mixed';
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return 'text';
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Generate a preview/summary of content for the LLM context.
|
|
72
|
-
* For JSON arrays, shows the first N items. For text, truncates with an ellipsis.
|
|
73
|
-
*
|
|
74
|
-
* @param text - The full content to preview.
|
|
75
|
-
* @param opts - Options controlling preview size.
|
|
76
|
-
* @returns A truncated preview string.
|
|
77
|
-
*/
|
|
78
|
-
export function generatePreview(
|
|
79
|
-
text: string,
|
|
80
|
-
opts?: { maxItems?: number; maxChars?: number }
|
|
81
|
-
): string {
|
|
82
|
-
const maxItems = opts?.maxItems ?? 5;
|
|
83
|
-
const maxChars = opts?.maxChars ?? 2048;
|
|
84
|
-
const contentType = detectContentType(text);
|
|
85
|
-
|
|
86
|
-
if (contentType === 'json_array') {
|
|
87
|
-
try {
|
|
88
|
-
const arr = JSON.parse(text.trim()) as unknown[];
|
|
89
|
-
if (arr.length <= maxItems) {
|
|
90
|
-
return text.trim();
|
|
91
|
-
}
|
|
92
|
-
const preview = arr.slice(0, maxItems);
|
|
93
|
-
const result = JSON.stringify(preview, null, 2);
|
|
94
|
-
return `${result}\n... (${arr.length - maxItems} more items, ${arr.length} total)`;
|
|
95
|
-
} catch {
|
|
96
|
-
// Fall through to text truncation
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (text.length <= maxChars) {
|
|
101
|
-
return text;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return `${text.substring(0, maxChars)}\n... (truncated, ${text.length} chars total)`;
|
|
105
|
-
}
|
package/src/content/index.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @illuma-ai/agents/content — per-conversation content + artifact stores.
|
|
3
|
-
*
|
|
4
|
-
* Host-agnostic primitives for keeping large tool / agent output out of
|
|
5
|
-
* the LLM context window:
|
|
6
|
-
*
|
|
7
|
-
* - {@link ContentStore} — ephemeral per-conversation cache (backed by
|
|
8
|
-
* any caller-provided {@link Keyv} instance; recommended with
|
|
9
|
-
* @keyv/redis for multi-instance deployments).
|
|
10
|
-
* - {@link ArtifactStore} — extends {@link ContentStore} with
|
|
11
|
-
* durable persistence via caller-provided {@link S3Strategy} and
|
|
12
|
-
* {@link FileModel} adapters.
|
|
13
|
-
* - {@link interceptMcpResult} — MCP tool-result auto-caching with
|
|
14
|
-
* gate semantics (no-op when the agent can't dereference
|
|
15
|
-
* `content_id`s).
|
|
16
|
-
* - {@link measureContent} / {@link detectContentType} /
|
|
17
|
-
* {@link generatePreview} — content classifiers shared by
|
|
18
|
-
* consumers that need to decide when to store vs inline.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
export { ContentStore, CONTENT_TTL_MS } from './ContentStore';
|
|
22
|
-
export {
|
|
23
|
-
ArtifactStore,
|
|
24
|
-
sanitizeName,
|
|
25
|
-
type S3Strategy,
|
|
26
|
-
type FileModel,
|
|
27
|
-
type Logger,
|
|
28
|
-
} from './ArtifactStore';
|
|
29
|
-
export {
|
|
30
|
-
measureContent,
|
|
31
|
-
detectContentType,
|
|
32
|
-
generatePreview,
|
|
33
|
-
type ContentMeasurement,
|
|
34
|
-
type ContentType,
|
|
35
|
-
} from './contentAnalyzer';
|
|
36
|
-
export type {
|
|
37
|
-
StoreEntry,
|
|
38
|
-
StoredEntry,
|
|
39
|
-
ContentMetadata,
|
|
40
|
-
ReadResult,
|
|
41
|
-
ReadAllResult,
|
|
42
|
-
SearchMatch,
|
|
43
|
-
EditResult,
|
|
44
|
-
} from './types';
|
|
45
|
-
export {
|
|
46
|
-
interceptMcpResult,
|
|
47
|
-
extractUiMarkers,
|
|
48
|
-
buildCachedResponse,
|
|
49
|
-
type AutoCacheContext,
|
|
50
|
-
type AutoCacheResult,
|
|
51
|
-
} from './mcpAutoCache';
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Auto-Caching Interceptor
|
|
3
|
-
*
|
|
4
|
-
* When an MCP tool returns a large text result (>50K chars / ~12.5K tokens),
|
|
5
|
-
* stores it in the caller-provided {@link ContentStore} and returns a
|
|
6
|
-
* compact metadata reference. The LLM then uses a `content_reader` tool
|
|
7
|
-
* (read/search/list/info) to pull relevant pieces of the stored result
|
|
8
|
-
* without burning tokens on the full payload.
|
|
9
|
-
*
|
|
10
|
-
* Gate: callers MUST pass `contentReaderEnabled: true` on the context —
|
|
11
|
-
* otherwise the interceptor returns the original text unchanged, because
|
|
12
|
-
* caching without a reader tool leaves the agent with a content_id it
|
|
13
|
-
* cannot dereference.
|
|
14
|
-
*
|
|
15
|
-
* Design:
|
|
16
|
-
* - Only text content is cached. Images and UI resources pass through.
|
|
17
|
-
* - UI resource markers (\ui{...}) are preserved in the returned text.
|
|
18
|
-
* - Artifacts (second element of the tuple) are never modified.
|
|
19
|
-
* - Cached response is a compact one-liner (~30 tokens) — no preview blob.
|
|
20
|
-
* - If the store write fails, degrades gracefully — returns original text.
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
import { ContentStore } from './ContentStore';
|
|
24
|
-
import { measureContent, detectContentType } from './contentAnalyzer';
|
|
25
|
-
import type { Logger } from './ArtifactStore';
|
|
26
|
-
import type { ContentMeasurement } from './contentAnalyzer';
|
|
27
|
-
|
|
28
|
-
/** Context for the auto-cache interceptor. */
|
|
29
|
-
export interface AutoCacheContext {
|
|
30
|
-
/**
|
|
31
|
-
* Pre-constructed {@link ContentStore} instance scoped to the current
|
|
32
|
-
* conversation. Caller owns the underlying cache lifecycle.
|
|
33
|
-
*/
|
|
34
|
-
store: ContentStore;
|
|
35
|
-
/** MCP server name (e.g. "sharepoint", "github"). */
|
|
36
|
-
serverName: string;
|
|
37
|
-
/** MCP tool name (e.g. "read_file", "search_code"). */
|
|
38
|
-
toolName: string;
|
|
39
|
-
/**
|
|
40
|
-
* Whether the current agent has `content_reader` available. When false,
|
|
41
|
-
* the interceptor passes the large text through unchanged — caching
|
|
42
|
-
* without a reader tool leaves the agent with a content_id it cannot
|
|
43
|
-
* dereference, which is worse than returning the raw text.
|
|
44
|
-
*/
|
|
45
|
-
contentReaderEnabled: boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Optional diagnostic echo. Typically the conversation ID so operators
|
|
48
|
-
* can correlate the log line with upstream traces.
|
|
49
|
-
*/
|
|
50
|
-
conversationId?: string;
|
|
51
|
-
/** Optional logger; defaults to silence. */
|
|
52
|
-
logger?: Logger;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/** Result of the auto-cache interception. */
|
|
56
|
-
export interface AutoCacheResult {
|
|
57
|
-
/** The (possibly modified) text content to return to the LLM. */
|
|
58
|
-
text: string;
|
|
59
|
-
/** Whether the content was cached. */
|
|
60
|
-
cached: boolean;
|
|
61
|
-
/** The content_id if cached. */
|
|
62
|
-
contentId?: string;
|
|
63
|
-
/** Content measurement data. */
|
|
64
|
-
measurement?: ContentMeasurement;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Regex to detect UI resource markers: \ui{...}
|
|
69
|
-
* These MUST be preserved in the returned text even after caching.
|
|
70
|
-
*/
|
|
71
|
-
const UI_MARKER_REGEX = /\\ui\{[^}]+\}/g;
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Extract all UI resource markers from text.
|
|
75
|
-
* @param text - The text to scan.
|
|
76
|
-
* @returns Array of marker strings (e.g. ['\\ui{abc123}', '\\ui{def456}'])
|
|
77
|
-
*/
|
|
78
|
-
export function extractUiMarkers(text: string): string[] {
|
|
79
|
-
return text.match(UI_MARKER_REGEX) ?? [];
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Build a compact metadata reference for the cached content.
|
|
84
|
-
* Keeps token usage minimal (~30 tokens) while giving the LLM all it needs
|
|
85
|
-
* to access the data via content_tool.
|
|
86
|
-
*
|
|
87
|
-
* @param contentId - ContentStore entry ID.
|
|
88
|
-
* @param measurement - Size data.
|
|
89
|
-
* @param toolName - The MCP tool that produced the result.
|
|
90
|
-
* @param uiMarkers - UI markers extracted from the original text.
|
|
91
|
-
*/
|
|
92
|
-
export function buildCachedResponse(
|
|
93
|
-
contentId: string,
|
|
94
|
-
measurement: ContentMeasurement,
|
|
95
|
-
toolName: string,
|
|
96
|
-
uiMarkers: string[]
|
|
97
|
-
): string {
|
|
98
|
-
const sizeKB = (measurement.totalChars / 1024).toFixed(0);
|
|
99
|
-
let response = `[Stored: ${toolName} result | ${sizeKB}KB | ${measurement.totalLines} lines | content_id: ${contentId}]\nUse content_reader (action: read or search) with this content_id to access the full result — do NOT re-run the MCP tool.`;
|
|
100
|
-
|
|
101
|
-
if (uiMarkers.length > 0) {
|
|
102
|
-
response += '\n\n' + uiMarkers.join('\n');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return response;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Core auto-cache interceptor for MCP tool results.
|
|
110
|
-
*
|
|
111
|
-
* If the text exceeds the large-content threshold (50K chars), stores it
|
|
112
|
-
* in ContentStore and returns a preview + content_id. Otherwise passes through.
|
|
113
|
-
*
|
|
114
|
-
* @param text - The text content from the MCP tool result.
|
|
115
|
-
* @param context - MCP tool and conversation context.
|
|
116
|
-
* @returns AutoCacheResult with possibly-modified text and caching metadata.
|
|
117
|
-
*/
|
|
118
|
-
export async function interceptMcpResult(
|
|
119
|
-
text: string,
|
|
120
|
-
context: AutoCacheContext
|
|
121
|
-
): Promise<AutoCacheResult> {
|
|
122
|
-
const measurement = measureContent(text);
|
|
123
|
-
const log = context.logger;
|
|
124
|
-
|
|
125
|
-
if (!measurement.isLarge) {
|
|
126
|
-
return { text, cached: false, measurement };
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Gate: caching only makes sense when the agent can read back the stub.
|
|
130
|
-
// If content_reader is disabled, returning a content_id the agent can't
|
|
131
|
-
// dereference is strictly worse than returning the full text — the model
|
|
132
|
-
// would either hallucinate tool calls or flag the result as inaccessible.
|
|
133
|
-
if (!context.contentReaderEnabled) {
|
|
134
|
-
log?.debug(
|
|
135
|
-
`[MCP Auto-Cache] Skipped caching for ${context.serverName}:${context.toolName} — content_reader disabled on this agent`,
|
|
136
|
-
{
|
|
137
|
-
totalChars: measurement.totalChars,
|
|
138
|
-
totalLines: measurement.totalLines,
|
|
139
|
-
conversationId: context.conversationId,
|
|
140
|
-
}
|
|
141
|
-
);
|
|
142
|
-
return { text, cached: false, measurement };
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
try {
|
|
146
|
-
const contentType = detectContentType(text);
|
|
147
|
-
|
|
148
|
-
const contentId = await context.store.store({
|
|
149
|
-
name: `${context.toolName} result`,
|
|
150
|
-
type: contentType === 'text' ? 'text/plain' : 'application/json',
|
|
151
|
-
content: text,
|
|
152
|
-
source: `mcp:${context.serverName}`,
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
const uiMarkers = extractUiMarkers(text);
|
|
156
|
-
|
|
157
|
-
const replacementText = buildCachedResponse(
|
|
158
|
-
contentId,
|
|
159
|
-
measurement,
|
|
160
|
-
context.toolName,
|
|
161
|
-
uiMarkers
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
log?.debug(
|
|
165
|
-
`[MCP Auto-Cache] Cached large result from ${context.serverName}:${context.toolName}`,
|
|
166
|
-
{
|
|
167
|
-
contentId,
|
|
168
|
-
totalChars: measurement.totalChars,
|
|
169
|
-
totalLines: measurement.totalLines,
|
|
170
|
-
conversationId: context.conversationId,
|
|
171
|
-
contentType,
|
|
172
|
-
uiMarkersPreserved: uiMarkers.length,
|
|
173
|
-
}
|
|
174
|
-
);
|
|
175
|
-
|
|
176
|
-
return { text: replacementText, cached: true, contentId, measurement };
|
|
177
|
-
} catch (error) {
|
|
178
|
-
// PERF: If caching fails, fall through silently — full content goes to LLM
|
|
179
|
-
log?.warn(
|
|
180
|
-
`[MCP Auto-Cache] Failed to cache result from ${context.serverName}:${context.toolName}, passing through`,
|
|
181
|
-
{ error: (error as Error).message }
|
|
182
|
-
);
|
|
183
|
-
return { text, cached: false, measurement };
|
|
184
|
-
}
|
|
185
|
-
}
|
package/src/content/types.ts
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Types for the per-conversation content store.
|
|
3
|
-
* Content entries are ephemeral (Redis-backed, 5 min TTL) and used to keep
|
|
4
|
-
* large tool results out of the LLM context window.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/** Input when storing new content. */
|
|
8
|
-
export interface StoreEntry {
|
|
9
|
-
/** Human-readable name (e.g. "Q1 Sales Report.xlsx") */
|
|
10
|
-
name: string;
|
|
11
|
-
/** MIME-like type: "text/plain", "application/json", "mcp_response", "artifact" */
|
|
12
|
-
type: string;
|
|
13
|
-
/** The raw content string */
|
|
14
|
-
content: string;
|
|
15
|
-
/** Origin identifier: "mcp:sharepoint", "artifact:msg123", "agent", etc. */
|
|
16
|
-
source: string;
|
|
17
|
-
/** Arbitrary extra data attached to the entry */
|
|
18
|
-
metadata?: Record<string, unknown>;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** Metadata returned by info() and list() — content is NOT included. */
|
|
22
|
-
export interface ContentMetadata {
|
|
23
|
-
id: string;
|
|
24
|
-
name: string;
|
|
25
|
-
type: string;
|
|
26
|
-
source: string;
|
|
27
|
-
totalLines: number;
|
|
28
|
-
totalChars: number;
|
|
29
|
-
createdAt: number;
|
|
30
|
-
/** MongoDB File.file_id after persistence to S3 (set by ArtifactStore) */
|
|
31
|
-
fileId?: string;
|
|
32
|
-
/** Owner user ID (set by ArtifactStore for S3 path construction) */
|
|
33
|
-
userId?: string;
|
|
34
|
-
/** Conversation scope (set by ArtifactStore for S3 path construction) */
|
|
35
|
-
conversationId?: string;
|
|
36
|
-
/** True when the file exists in MongoDB but hasn't been ingested into ContentStore yet */
|
|
37
|
-
needsIngestion?: boolean;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** Result of a readLines() call. */
|
|
41
|
-
export interface ReadResult {
|
|
42
|
-
/** Formatted content with line numbers */
|
|
43
|
-
content: string;
|
|
44
|
-
startLine: number;
|
|
45
|
-
endLine: number;
|
|
46
|
-
totalLines: number;
|
|
47
|
-
totalChars: number;
|
|
48
|
-
/** True if there are more lines beyond endLine */
|
|
49
|
-
truncated: boolean;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/** Result of a readAll() call — raw content without line-number formatting. */
|
|
53
|
-
export interface ReadAllResult {
|
|
54
|
-
/** Raw content string (no line-number prefixes) */
|
|
55
|
-
content: string;
|
|
56
|
-
totalLines: number;
|
|
57
|
-
totalChars: number;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/** A single search match within content. */
|
|
61
|
-
export interface SearchMatch {
|
|
62
|
-
lineNumber: number;
|
|
63
|
-
content: string;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/** Result of a strReplace() edit. */
|
|
67
|
-
export interface EditResult {
|
|
68
|
-
success: boolean;
|
|
69
|
-
/** Human-readable diff snippet */
|
|
70
|
-
diff: string;
|
|
71
|
-
/** Line number where the replacement occurred */
|
|
72
|
-
lineNumber: number;
|
|
73
|
-
/** Number of lines affected by the edit */
|
|
74
|
-
linesAffected: number;
|
|
75
|
-
error?: string;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** Internal shape stored in Redis for each content entry. */
|
|
79
|
-
export interface StoredEntry {
|
|
80
|
-
content: string;
|
|
81
|
-
metadata: ContentMetadata;
|
|
82
|
-
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import type { BaseMessage } from '@langchain/core/messages';
|
|
2
|
-
import type * as t from '@/types';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Tracks the lifecycle of a spawned handoff child agent.
|
|
6
|
-
*/
|
|
7
|
-
export type HandoffRecord = {
|
|
8
|
-
/** Agent identity (destination agentId) — stable across multiple spawns of the same agent */
|
|
9
|
-
id: string;
|
|
10
|
-
/** Unique internal key for this specific spawn (agentId + monotonic counter) */
|
|
11
|
-
spawnKey: string;
|
|
12
|
-
/** Display name of the child agent */
|
|
13
|
-
name: string;
|
|
14
|
-
/** Task description / instructions passed to child */
|
|
15
|
-
task: string;
|
|
16
|
-
/** When the handoff was spawned */
|
|
17
|
-
spawnedAt: number;
|
|
18
|
-
/** Current status */
|
|
19
|
-
status: 'pending' | 'running' | 'completed' | 'failed';
|
|
20
|
-
/** The background promise executing the child subgraph */
|
|
21
|
-
promise: Promise<t.BaseGraphState>;
|
|
22
|
-
/** Resolved result text (populated on completion) */
|
|
23
|
-
resultText?: string;
|
|
24
|
-
/** Error message (populated on failure) */
|
|
25
|
-
error?: string;
|
|
26
|
-
/** Duration in ms (populated on completion/failure) */
|
|
27
|
-
durationMs?: number;
|
|
28
|
-
/** Number of messages in child's output */
|
|
29
|
-
resultMessageCount?: number;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Registry for async handoff execution.
|
|
34
|
-
*
|
|
35
|
-
* Enables the autonomous orchestration pattern:
|
|
36
|
-
* 1. Orchestrator spawns children (non-blocking)
|
|
37
|
-
* 2. Orchestrator stays alive to reason, spawn more, or check status
|
|
38
|
-
* 3. Orchestrator collects results when ready
|
|
39
|
-
*
|
|
40
|
-
* Scoped per MultiAgentGraph instance — each orchestrator graph gets its own registry.
|
|
41
|
-
*/
|
|
42
|
-
export class HandoffRegistry {
|
|
43
|
-
private records: Map<string, HandoffRecord> = new Map();
|
|
44
|
-
/** Monotonically increasing counter for unique spawn IDs */
|
|
45
|
-
private spawnCounter = 0;
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Register a spawned handoff child.
|
|
49
|
-
* The promise runs in the background — not awaited here.
|
|
50
|
-
* Uses a unique key per spawn so the same agent can be spawned multiple times
|
|
51
|
-
* across rounds without overwriting prior records.
|
|
52
|
-
*/
|
|
53
|
-
spawn(params: {
|
|
54
|
-
id: string;
|
|
55
|
-
name: string;
|
|
56
|
-
task: string;
|
|
57
|
-
promise: Promise<t.BaseGraphState>;
|
|
58
|
-
extractResult: (messages: BaseMessage[], agentId: string) => string;
|
|
59
|
-
truncateResult: (text: string, maxChars: number) => string;
|
|
60
|
-
maxResultChars: number;
|
|
61
|
-
/** Callback when child completes (for SSE events) */
|
|
62
|
-
onComplete?: (record: HandoffRecord) => void;
|
|
63
|
-
}): void {
|
|
64
|
-
// Unique internal key: agentId + counter to support multiple spawns of same agent.
|
|
65
|
-
// record.id stays as the agent identity so callers/observability can attribute
|
|
66
|
-
// results to the agent regardless of which spawn round they came from.
|
|
67
|
-
const spawnKey = `${params.id}__${this.spawnCounter++}`;
|
|
68
|
-
const record: HandoffRecord = {
|
|
69
|
-
id: params.id,
|
|
70
|
-
spawnKey,
|
|
71
|
-
name: params.name,
|
|
72
|
-
task: params.task,
|
|
73
|
-
spawnedAt: Date.now(),
|
|
74
|
-
status: 'running',
|
|
75
|
-
promise: params.promise,
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
// Wire up the promise to update the record on completion
|
|
79
|
-
params.promise
|
|
80
|
-
.then((result) => {
|
|
81
|
-
const resultText = params.extractResult(result.messages, params.id);
|
|
82
|
-
const truncated = params.truncateResult(
|
|
83
|
-
resultText,
|
|
84
|
-
params.maxResultChars
|
|
85
|
-
);
|
|
86
|
-
record.status = 'completed';
|
|
87
|
-
record.resultText = truncated;
|
|
88
|
-
record.durationMs = Date.now() - record.spawnedAt;
|
|
89
|
-
record.resultMessageCount = result.messages.length;
|
|
90
|
-
params.onComplete?.(record);
|
|
91
|
-
})
|
|
92
|
-
.catch((err) => {
|
|
93
|
-
record.status = 'failed';
|
|
94
|
-
record.error = err instanceof Error ? err.message : String(err);
|
|
95
|
-
record.durationMs = Date.now() - record.spawnedAt;
|
|
96
|
-
params.onComplete?.(record);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
this.records.set(spawnKey, record);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/** List all pending (running) handoffs */
|
|
103
|
-
listPending(): HandoffRecord[] {
|
|
104
|
-
return Array.from(this.records.values()).filter(
|
|
105
|
-
(r) => r.status === 'running'
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** List all completed handoffs (not yet collected) */
|
|
110
|
-
listCompleted(): HandoffRecord[] {
|
|
111
|
-
return Array.from(this.records.values()).filter(
|
|
112
|
-
(r) => r.status === 'completed' || r.status === 'failed'
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/** List all handoffs regardless of status */
|
|
117
|
-
listAll(): HandoffRecord[] {
|
|
118
|
-
return Array.from(this.records.values());
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Get a handoff record by either its unique spawnKey or by agentId.
|
|
123
|
-
* - Exact spawnKey match wins (O(1)).
|
|
124
|
-
* - Falls back to the most recently spawned record for that agentId — matching
|
|
125
|
-
* lookups by callers that only know the agent identity, not the spawn round.
|
|
126
|
-
*/
|
|
127
|
-
get(idOrSpawnKey: string): HandoffRecord | undefined {
|
|
128
|
-
const direct = this.records.get(idOrSpawnKey);
|
|
129
|
-
if (direct) return direct;
|
|
130
|
-
let latest: HandoffRecord | undefined;
|
|
131
|
-
for (const record of this.records.values()) {
|
|
132
|
-
if (record.id !== idOrSpawnKey) continue;
|
|
133
|
-
if (!latest || record.spawnedAt >= latest.spawnedAt) latest = record;
|
|
134
|
-
}
|
|
135
|
-
return latest;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/** Check if any handoffs are still running */
|
|
139
|
-
hasPending(): boolean {
|
|
140
|
-
return this.listPending().length > 0;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Wait for ALL pending handoffs to complete and return all records.
|
|
145
|
-
* Records are NOT auto-cleared — caller removes collected records via remove().
|
|
146
|
-
*/
|
|
147
|
-
async waitForAll(): Promise<HandoffRecord[]> {
|
|
148
|
-
const pending = this.listPending();
|
|
149
|
-
if (pending.length > 0) {
|
|
150
|
-
await Promise.allSettled(pending.map((r) => r.promise));
|
|
151
|
-
}
|
|
152
|
-
const results = this.listAll();
|
|
153
|
-
return results;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Wait for ANY pending handoff to complete.
|
|
158
|
-
* Returns the newly completed record(s).
|
|
159
|
-
*/
|
|
160
|
-
async waitForAny(): Promise<HandoffRecord[]> {
|
|
161
|
-
const pending = this.listPending();
|
|
162
|
-
if (pending.length === 0) {
|
|
163
|
-
return this.listCompleted();
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Race all pending promises — at least one will resolve
|
|
167
|
-
await Promise.race(
|
|
168
|
-
pending.map((r) => r.promise.then(() => r).catch(() => r))
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
// Small yield to let promise handlers update records
|
|
172
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
173
|
-
|
|
174
|
-
return this.listCompleted();
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Remove record(s) by spawnKey or agentId.
|
|
179
|
-
* - Exact spawnKey match removes only that record.
|
|
180
|
-
* - agentId match removes ALL records for that agent (covers callers that
|
|
181
|
-
* want to forget everything tied to a given agent).
|
|
182
|
-
*/
|
|
183
|
-
remove(idOrSpawnKey: string): void {
|
|
184
|
-
if (this.records.delete(idOrSpawnKey)) return;
|
|
185
|
-
for (const [key, record] of this.records) {
|
|
186
|
-
if (record.id === idOrSpawnKey) this.records.delete(key);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/** Clear all records (for cleanup between graph invocations) */
|
|
191
|
-
clear(): void {
|
|
192
|
-
this.records.clear();
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/** Number of total tracked handoffs */
|
|
196
|
-
get size(): number {
|
|
197
|
-
return this.records.size;
|
|
198
|
-
}
|
|
199
|
-
}
|