@illuma-ai/agents 1.0.89 → 1.0.93
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/dist/cjs/agents/AgentContext.cjs +98 -49
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/constants.cjs +25 -0
- package/dist/cjs/common/constants.cjs.map +1 -0
- package/dist/cjs/common/enum.cjs +30 -0
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/events.cjs +9 -4
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +397 -92
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +223 -92
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +30 -14
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +43 -11
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +10 -7
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +32 -0
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +129 -101
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +489 -0
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -0
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +176 -0
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -0
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +1 -1
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +59 -5
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/text.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +80 -2
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +60 -27
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +131 -108
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/content.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +3 -0
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +265 -47
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/ids.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +55 -2
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/summarize.cjs +170 -0
- package/dist/cjs/messages/summarize.cjs.map +1 -0
- package/dist/cjs/messages/tools.cjs.map +1 -1
- package/dist/cjs/run.cjs +87 -30
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/schemas/validate.cjs.map +1 -1
- package/dist/cjs/splitStream.cjs.map +1 -1
- package/dist/cjs/stream.cjs +59 -25
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/AskUser.cjs +131 -0
- package/dist/cjs/tools/AskUser.cjs.map +1 -0
- package/dist/cjs/tools/BrowserTools.cjs +11 -7
- package/dist/cjs/tools/BrowserTools.cjs.map +1 -1
- package/dist/cjs/tools/Calculator.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +46 -4
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +36 -53
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/StreamingToolCallBuffer.cjs +208 -0
- package/dist/cjs/tools/StreamingToolCallBuffer.cjs.map +1 -0
- package/dist/cjs/tools/ToolNode.cjs +333 -30
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/ToolSearch.cjs +66 -30
- package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +94 -8
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/content.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/highlights.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +1 -0
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/types/graph.cjs +1 -1
- package/dist/cjs/types/graph.cjs.map +1 -1
- package/dist/cjs/utils/contextAnalytics.cjs +23 -6
- package/dist/cjs/utils/contextAnalytics.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/graph.cjs.map +1 -1
- package/dist/cjs/utils/handlers.cjs.map +1 -1
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/misc.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs +3 -1
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/cjs/utils/schema.cjs.map +1 -1
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +33 -58
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/cjs/utils/toolCallContinuation.cjs +55 -0
- package/dist/cjs/utils/toolCallContinuation.cjs.map +1 -0
- package/dist/cjs/utils/toonFormat.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +98 -49
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/constants.mjs +22 -0
- package/dist/esm/common/constants.mjs.map +1 -0
- package/dist/esm/common/enum.mjs +31 -1
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/events.mjs +9 -4
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +393 -88
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +224 -93
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +30 -14
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +43 -11
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +10 -7
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +32 -0
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +128 -101
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +484 -0
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -0
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs +171 -0
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -0
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +1 -1
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +59 -5
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/text.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +80 -2
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/main.mjs +8 -3
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +131 -108
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/content.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +4 -1
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +267 -49
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/ids.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +56 -4
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/summarize.mjs +161 -0
- package/dist/esm/messages/summarize.mjs.map +1 -0
- package/dist/esm/messages/tools.mjs.map +1 -1
- package/dist/esm/run.mjs +88 -31
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/schemas/validate.mjs.map +1 -1
- package/dist/esm/splitStream.mjs.map +1 -1
- package/dist/esm/stream.mjs +60 -26
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/AskUser.mjs +125 -0
- package/dist/esm/tools/AskUser.mjs.map +1 -0
- package/dist/esm/tools/BrowserTools.mjs +11 -7
- package/dist/esm/tools/BrowserTools.mjs.map +1 -1
- package/dist/esm/tools/Calculator.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +46 -4
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +37 -54
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/StreamingToolCallBuffer.mjs +206 -0
- package/dist/esm/tools/StreamingToolCallBuffer.mjs.map +1 -0
- package/dist/esm/tools/ToolNode.mjs +333 -30
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/ToolSearch.mjs +66 -30
- package/dist/esm/tools/ToolSearch.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +95 -9
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/schema.mjs.map +1 -1
- package/dist/esm/tools/search/content.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/highlights.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +1 -0
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/types/graph.mjs +1 -1
- package/dist/esm/types/graph.mjs.map +1 -1
- package/dist/esm/utils/contextAnalytics.mjs +23 -6
- package/dist/esm/utils/contextAnalytics.mjs.map +1 -1
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/graph.mjs.map +1 -1
- package/dist/esm/utils/handlers.mjs.map +1 -1
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/misc.mjs.map +1 -1
- package/dist/esm/utils/run.mjs +3 -1
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/esm/utils/schema.mjs.map +1 -1
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +33 -59
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/esm/utils/toolCallContinuation.mjs +52 -0
- package/dist/esm/utils/toolCallContinuation.mjs.map +1 -0
- package/dist/esm/utils/toonFormat.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +14 -7
- package/dist/types/common/constants.d.ts +18 -0
- package/dist/types/common/enum.d.ts +28 -0
- package/dist/types/common/index.d.ts +1 -0
- package/dist/types/events.d.ts +10 -3
- package/dist/types/graphs/Graph.d.ts +37 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/llm/anthropic/index.d.ts +7 -1
- package/dist/types/llm/anthropic/types.d.ts +5 -2
- package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
- package/dist/types/llm/bedrock/index.d.ts +40 -33
- package/dist/types/llm/bedrock/utils/message_outputs.d.ts +1 -1
- package/dist/types/llm/google/index.d.ts +2 -3
- package/dist/types/llm/openrouter/index.d.ts +21 -1
- package/dist/types/llm/vertexai/index.d.ts +3 -2
- package/dist/types/messages/cache.d.ts +1 -1
- package/dist/types/messages/index.d.ts +1 -0
- package/dist/types/messages/prune.d.ts +2 -7
- package/dist/types/messages/summarize.d.ts +33 -0
- package/dist/types/run.d.ts +6 -0
- package/dist/types/tools/AskUser.d.ts +408 -0
- package/dist/types/tools/BrowserTools.d.ts +2 -2
- package/dist/types/tools/CodeExecutor.d.ts +2 -2
- package/dist/types/tools/StreamingToolCallBuffer.d.ts +106 -0
- package/dist/types/tools/ToolNode.d.ts +55 -3
- package/dist/types/tools/ToolSearch.d.ts +9 -5
- package/dist/types/tools/handlers.d.ts +2 -2
- package/dist/types/types/graph.d.ts +9 -2
- package/dist/types/types/llm.d.ts +8 -3
- package/dist/types/types/run.d.ts +2 -0
- package/dist/types/types/tools.d.ts +20 -2
- package/dist/types/utils/contextAnalytics.d.ts +5 -4
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/tokens.d.ts +6 -19
- package/dist/types/utils/toolCallContinuation.d.ts +30 -0
- package/package.json +15 -8
- package/src/agents/AgentContext.js +782 -0
- package/src/agents/AgentContext.js.map +1 -0
- package/src/agents/AgentContext.test.js +421 -0
- package/src/agents/AgentContext.test.js.map +1 -0
- package/src/agents/AgentContext.ts +132 -64
- package/src/agents/__tests__/AgentContext.test.js +678 -0
- package/src/agents/__tests__/AgentContext.test.js.map +1 -0
- package/src/agents/__tests__/AgentContext.test.ts +25 -4
- package/src/agents/__tests__/resolveStructuredOutputMode.test.js +117 -0
- package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
- package/src/common/__tests__/enum.test.ts +135 -0
- package/src/common/constants.ts +21 -0
- package/src/common/enum.js +192 -0
- package/src/common/enum.js.map +1 -0
- package/src/common/enum.ts +30 -0
- package/src/common/index.js +3 -0
- package/src/common/index.js.map +1 -0
- package/src/common/index.ts +2 -1
- package/src/events.js +166 -0
- package/src/events.js.map +1 -0
- package/src/events.ts +11 -14
- package/src/graphs/Graph.js +1857 -0
- package/src/graphs/Graph.js.map +1 -0
- package/src/graphs/Graph.ts +580 -162
- package/src/graphs/MultiAgentGraph.js +1092 -0
- package/src/graphs/MultiAgentGraph.js.map +1 -0
- package/src/graphs/MultiAgentGraph.ts +331 -112
- package/src/graphs/__tests__/adaptive-thinking.test.ts +369 -0
- package/src/graphs/__tests__/graph-direct-tool-names.test.ts +210 -0
- package/src/graphs/__tests__/multi-agent-edges.test.ts +237 -0
- package/src/graphs/__tests__/structured-output.integration.test.js +624 -0
- package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
- package/src/graphs/__tests__/structured-output.test.js +144 -0
- package/src/graphs/__tests__/structured-output.test.js.map +1 -0
- package/src/graphs/contextManagement.e2e.test.js +718 -0
- package/src/graphs/contextManagement.e2e.test.js.map +1 -0
- package/src/graphs/contextManagement.e2e.test.ts +990 -0
- package/src/graphs/contextManagement.test.js +485 -0
- package/src/graphs/contextManagement.test.js.map +1 -0
- package/src/graphs/contextManagement.test.ts +625 -0
- package/src/graphs/handoffValidation.test.js +276 -0
- package/src/graphs/handoffValidation.test.js.map +1 -0
- package/src/graphs/handoffValidation.test.ts +353 -0
- package/src/graphs/index.js +3 -0
- package/src/graphs/index.js.map +1 -0
- package/src/index.js +28 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +13 -0
- package/src/instrumentation.js +21 -0
- package/src/instrumentation.js.map +1 -0
- package/src/instrumentation.ts +38 -17
- package/src/llm/anthropic/index.js +319 -0
- package/src/llm/anthropic/index.js.map +1 -0
- package/src/llm/anthropic/index.ts +68 -15
- package/src/llm/anthropic/llm.spec.ts +402 -0
- package/src/llm/anthropic/types.js +46 -0
- package/src/llm/anthropic/types.js.map +1 -0
- package/src/llm/anthropic/types.ts +8 -2
- package/src/llm/anthropic/utils/message_inputs.js +627 -0
- package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
- package/src/llm/anthropic/utils/message_inputs.ts +16 -33
- package/src/llm/anthropic/utils/message_outputs.js +290 -0
- package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
- package/src/llm/anthropic/utils/message_outputs.ts +40 -1
- package/src/llm/anthropic/utils/output_parsers.js +89 -0
- package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
- package/src/llm/anthropic/utils/tools.js +25 -0
- package/src/llm/anthropic/utils/tools.js.map +1 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.js +392 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +24 -40
- package/src/llm/bedrock/index.js +303 -0
- package/src/llm/bedrock/index.js.map +1 -0
- package/src/llm/bedrock/index.ts +171 -134
- package/src/llm/bedrock/llm.spec.ts +395 -52
- package/src/llm/bedrock/types.js +2 -0
- package/src/llm/bedrock/types.js.map +1 -0
- package/src/llm/bedrock/utils/index.js +6 -0
- package/src/llm/bedrock/utils/index.js.map +1 -0
- package/src/llm/bedrock/utils/message_inputs.js +463 -0
- package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
- package/src/llm/bedrock/utils/message_inputs.ts +30 -5
- package/src/llm/bedrock/utils/message_outputs.js +269 -0
- package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
- package/src/llm/bedrock/utils/message_outputs.ts +70 -22
- package/src/llm/fake.js +92 -0
- package/src/llm/fake.js.map +1 -0
- package/src/llm/google/index.js +215 -0
- package/src/llm/google/index.js.map +1 -0
- package/src/llm/google/index.ts +2 -3
- package/src/llm/google/types.js +12 -0
- package/src/llm/google/types.js.map +1 -0
- package/src/llm/google/utils/common.js +670 -0
- package/src/llm/google/utils/common.js.map +1 -0
- package/src/llm/google/utils/tools.js +111 -0
- package/src/llm/google/utils/tools.js.map +1 -0
- package/src/llm/google/utils/zod_to_genai_parameters.js +47 -0
- package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
- package/src/llm/openai/index.js +1033 -0
- package/src/llm/openai/index.js.map +1 -0
- package/src/llm/openai/types.js +2 -0
- package/src/llm/openai/types.js.map +1 -0
- package/src/llm/openai/utils/index.js +756 -0
- package/src/llm/openai/utils/index.js.map +1 -0
- package/src/llm/openai/utils/isReasoningModel.test.js +79 -0
- package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
- package/src/llm/openrouter/index.js +261 -0
- package/src/llm/openrouter/index.js.map +1 -0
- package/src/llm/openrouter/index.ts +117 -6
- package/src/llm/openrouter/reasoning.test.js +181 -0
- package/src/llm/openrouter/reasoning.test.js.map +1 -0
- package/src/llm/openrouter/reasoning.test.ts +207 -0
- package/src/llm/providers.js +36 -0
- package/src/llm/providers.js.map +1 -0
- package/src/llm/text.js +65 -0
- package/src/llm/text.js.map +1 -0
- package/src/llm/vertexai/index.js +402 -0
- package/src/llm/vertexai/index.js.map +1 -0
- package/src/llm/vertexai/index.ts +115 -5
- package/src/llm/vertexai/llm.spec.ts +114 -0
- package/src/messages/__tests__/tools.test.js +392 -0
- package/src/messages/__tests__/tools.test.js.map +1 -0
- package/src/messages/cache.js +404 -0
- package/src/messages/cache.js.map +1 -0
- package/src/messages/cache.test.js +1167 -0
- package/src/messages/cache.test.js.map +1 -0
- package/src/messages/cache.test.ts +178 -16
- package/src/messages/cache.ts +152 -147
- package/src/messages/content.js +48 -0
- package/src/messages/content.js.map +1 -0
- package/src/messages/content.test.js +314 -0
- package/src/messages/content.test.js.map +1 -0
- package/src/messages/core.js +359 -0
- package/src/messages/core.js.map +1 -0
- package/src/messages/core.ts +5 -0
- package/src/messages/ensureThinkingBlock.test.js +997 -0
- package/src/messages/ensureThinkingBlock.test.js.map +1 -0
- package/src/messages/ensureThinkingBlock.test.ts +751 -10
- package/src/messages/format.js +973 -0
- package/src/messages/format.js.map +1 -0
- package/src/messages/format.ts +334 -57
- package/src/messages/formatAgentMessages.test.js +2278 -0
- package/src/messages/formatAgentMessages.test.js.map +1 -0
- package/src/messages/formatAgentMessages.test.ts +1175 -1
- package/src/messages/formatAgentMessages.tools.test.js +362 -0
- package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
- package/src/messages/formatMessage.test.js +608 -0
- package/src/messages/formatMessage.test.js.map +1 -0
- package/src/messages/ids.js +18 -0
- package/src/messages/ids.js.map +1 -0
- package/src/messages/index.js +9 -0
- package/src/messages/index.js.map +1 -0
- package/src/messages/index.ts +1 -0
- package/src/messages/labelContentByAgent.test.js +725 -0
- package/src/messages/labelContentByAgent.test.js.map +1 -0
- package/src/messages/prune.js +438 -0
- package/src/messages/prune.js.map +1 -0
- package/src/messages/prune.ts +87 -25
- package/src/messages/reducer.js +60 -0
- package/src/messages/reducer.js.map +1 -0
- package/src/messages/shiftIndexTokenCountMap.test.js +63 -0
- package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
- package/src/messages/summarize.js +146 -0
- package/src/messages/summarize.js.map +1 -0
- package/src/messages/summarize.test.js +332 -0
- package/src/messages/summarize.test.js.map +1 -0
- package/src/messages/summarize.test.ts +466 -0
- package/src/messages/summarize.ts +222 -0
- package/src/messages/tools.js +90 -0
- package/src/messages/tools.js.map +1 -0
- package/src/mockStream.js +81 -0
- package/src/mockStream.js.map +1 -0
- package/src/prompts/collab.js +7 -0
- package/src/prompts/collab.js.map +1 -0
- package/src/prompts/index.js +3 -0
- package/src/prompts/index.js.map +1 -0
- package/src/prompts/taskmanager.js +58 -0
- package/src/prompts/taskmanager.js.map +1 -0
- package/src/run.js +427 -0
- package/src/run.js.map +1 -0
- package/src/run.ts +101 -33
- package/src/schemas/index.js +3 -0
- package/src/schemas/index.js.map +1 -0
- package/src/schemas/schema-preparation.test.js +370 -0
- package/src/schemas/schema-preparation.test.js.map +1 -0
- package/src/schemas/validate.js +314 -0
- package/src/schemas/validate.js.map +1 -0
- package/src/schemas/validate.test.js +264 -0
- package/src/schemas/validate.test.js.map +1 -0
- package/src/scripts/abort.js +127 -0
- package/src/scripts/abort.js.map +1 -0
- package/src/scripts/ant_web_search.js +130 -0
- package/src/scripts/ant_web_search.js.map +1 -0
- package/src/scripts/ant_web_search.ts +1 -0
- package/src/scripts/ant_web_search_edge_case.js +133 -0
- package/src/scripts/ant_web_search_edge_case.js.map +1 -0
- package/src/scripts/ant_web_search_edge_case.ts +1 -0
- package/src/scripts/ant_web_search_error_edge_case.js +119 -0
- package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
- package/src/scripts/ant_web_search_error_edge_case.ts +1 -0
- package/src/scripts/args.js +41 -0
- package/src/scripts/args.js.map +1 -0
- package/src/scripts/bedrock-cache-debug.js +186 -0
- package/src/scripts/bedrock-cache-debug.js.map +1 -0
- package/src/scripts/bedrock-cache-debug.ts +250 -0
- package/src/scripts/bedrock-content-aggregation-test.js +195 -0
- package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
- package/src/scripts/bedrock-content-aggregation-test.ts +266 -0
- package/src/scripts/bedrock-merge-test.js +80 -0
- package/src/scripts/bedrock-merge-test.js.map +1 -0
- package/src/scripts/bedrock-merge-test.ts +107 -0
- package/src/scripts/bedrock-parallel-tools-test.js +150 -0
- package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
- package/src/scripts/bedrock-parallel-tools-test.ts +204 -0
- package/src/scripts/caching.js +106 -0
- package/src/scripts/caching.js.map +1 -0
- package/src/scripts/caching.ts +1 -0
- package/src/scripts/cli.js +152 -0
- package/src/scripts/cli.js.map +1 -0
- package/src/scripts/cli2.js +119 -0
- package/src/scripts/cli2.js.map +1 -0
- package/src/scripts/cli3.js +163 -0
- package/src/scripts/cli3.js.map +1 -0
- package/src/scripts/cli4.js +165 -0
- package/src/scripts/cli4.js.map +1 -0
- package/src/scripts/cli5.js +165 -0
- package/src/scripts/cli5.js.map +1 -0
- package/src/scripts/code_exec.js +171 -0
- package/src/scripts/code_exec.js.map +1 -0
- package/src/scripts/code_exec.ts +1 -0
- package/src/scripts/code_exec_files.js +180 -0
- package/src/scripts/code_exec_files.js.map +1 -0
- package/src/scripts/code_exec_files.ts +1 -0
- package/src/scripts/code_exec_multi_session.js +185 -0
- package/src/scripts/code_exec_multi_session.js.map +1 -0
- package/src/scripts/code_exec_multi_session.ts +9 -13
- package/src/scripts/code_exec_ptc.js +265 -0
- package/src/scripts/code_exec_ptc.js.map +1 -0
- package/src/scripts/code_exec_ptc.ts +1 -0
- package/src/scripts/code_exec_session.js +217 -0
- package/src/scripts/code_exec_session.js.map +1 -0
- package/src/scripts/code_exec_session.ts +1 -0
- package/src/scripts/code_exec_simple.js +120 -0
- package/src/scripts/code_exec_simple.js.map +1 -0
- package/src/scripts/code_exec_simple.ts +1 -0
- package/src/scripts/content.js +111 -0
- package/src/scripts/content.js.map +1 -0
- package/src/scripts/content.ts +1 -0
- package/src/scripts/empty_input.js +125 -0
- package/src/scripts/empty_input.js.map +1 -0
- package/src/scripts/handoff-test.js +96 -0
- package/src/scripts/handoff-test.js.map +1 -0
- package/src/scripts/image.js +138 -0
- package/src/scripts/image.js.map +1 -0
- package/src/scripts/image.ts +3 -1
- package/src/scripts/memory.js +83 -0
- package/src/scripts/memory.js.map +1 -0
- package/src/scripts/memory.ts +16 -6
- package/src/scripts/multi-agent-chain.js +271 -0
- package/src/scripts/multi-agent-chain.js.map +1 -0
- package/src/scripts/multi-agent-chain.ts +1 -0
- package/src/scripts/multi-agent-conditional.js +185 -0
- package/src/scripts/multi-agent-conditional.js.map +1 -0
- package/src/scripts/multi-agent-conditional.ts +1 -0
- package/src/scripts/multi-agent-document-review-chain.js +171 -0
- package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
- package/src/scripts/multi-agent-document-review-chain.ts +1 -0
- package/src/scripts/multi-agent-hybrid-flow.js +264 -0
- package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
- package/src/scripts/multi-agent-hybrid-flow.ts +1 -0
- package/src/scripts/multi-agent-parallel-start.js +214 -0
- package/src/scripts/multi-agent-parallel-start.js.map +1 -0
- package/src/scripts/multi-agent-parallel-start.ts +4 -4
- package/src/scripts/multi-agent-parallel.js +346 -0
- package/src/scripts/multi-agent-parallel.js.map +1 -0
- package/src/scripts/multi-agent-parallel.ts +1 -0
- package/src/scripts/multi-agent-sequence.js +184 -0
- package/src/scripts/multi-agent-sequence.js.map +1 -0
- package/src/scripts/multi-agent-sequence.ts +4 -4
- package/src/scripts/multi-agent-supervisor.js +324 -0
- package/src/scripts/multi-agent-supervisor.js.map +1 -0
- package/src/scripts/multi-agent-supervisor.ts +1 -0
- package/src/scripts/multi-agent-test.js +147 -0
- package/src/scripts/multi-agent-test.js.map +1 -0
- package/src/scripts/multi-agent-test.ts +1 -0
- package/src/scripts/parallel-asymmetric-tools-test.js +202 -0
- package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
- package/src/scripts/parallel-asymmetric-tools-test.ts +1 -0
- package/src/scripts/parallel-full-metadata-test.js +176 -0
- package/src/scripts/parallel-full-metadata-test.js.map +1 -0
- package/src/scripts/parallel-full-metadata-test.ts +1 -0
- package/src/scripts/parallel-tools-test.js +256 -0
- package/src/scripts/parallel-tools-test.js.map +1 -0
- package/src/scripts/parallel-tools-test.ts +1 -0
- package/src/scripts/poc-multi-agent-comprehensive.ts +1222 -0
- package/src/scripts/programmatic_exec.js +277 -0
- package/src/scripts/programmatic_exec.js.map +1 -0
- package/src/scripts/programmatic_exec_agent.js +168 -0
- package/src/scripts/programmatic_exec_agent.js.map +1 -0
- package/src/scripts/programmatic_exec_agent.ts +1 -0
- package/src/scripts/search.js +118 -0
- package/src/scripts/search.js.map +1 -0
- package/src/scripts/search.ts +1 -0
- package/src/scripts/sequential-full-metadata-test.js +143 -0
- package/src/scripts/sequential-full-metadata-test.js.map +1 -0
- package/src/scripts/sequential-full-metadata-test.ts +1 -0
- package/src/scripts/simple.js +174 -0
- package/src/scripts/simple.js.map +1 -0
- package/src/scripts/simple.ts +2 -1
- package/src/scripts/single-agent-metadata-test.js +152 -0
- package/src/scripts/single-agent-metadata-test.js.map +1 -0
- package/src/scripts/single-agent-metadata-test.ts +4 -6
- package/src/scripts/stream.js +113 -0
- package/src/scripts/stream.js.map +1 -0
- package/src/scripts/stream.ts +1 -0
- package/src/scripts/test-custom-prompt-key.js +132 -0
- package/src/scripts/test-custom-prompt-key.js.map +1 -0
- package/src/scripts/test-handoff-input.js +143 -0
- package/src/scripts/test-handoff-input.js.map +1 -0
- package/src/scripts/test-handoff-preamble.js +227 -0
- package/src/scripts/test-handoff-preamble.js.map +1 -0
- package/src/scripts/test-handoff-preamble.ts +1 -0
- package/src/scripts/test-handoff-steering.js +353 -0
- package/src/scripts/test-handoff-steering.js.map +1 -0
- package/src/scripts/test-handoff-steering.ts +430 -0
- package/src/scripts/test-multi-agent-list-handoff.js +318 -0
- package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
- package/src/scripts/test-multi-agent-list-handoff.ts +1 -0
- package/src/scripts/test-parallel-agent-labeling.js +253 -0
- package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
- package/src/scripts/test-parallel-agent-labeling.ts +2 -0
- package/src/scripts/test-parallel-handoffs.js +229 -0
- package/src/scripts/test-parallel-handoffs.js.map +1 -0
- package/src/scripts/test-parallel-handoffs.ts +1 -0
- package/src/scripts/test-thinking-handoff-bedrock.js +132 -0
- package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
- package/src/scripts/test-thinking-handoff-bedrock.ts +1 -0
- package/src/scripts/test-thinking-handoff.js +132 -0
- package/src/scripts/test-thinking-handoff.js.map +1 -0
- package/src/scripts/test-thinking-handoff.ts +1 -0
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js +140 -0
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +166 -0
- package/src/scripts/test-tool-before-handoff-role-order.js +223 -0
- package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
- package/src/scripts/test-tool-before-handoff-role-order.ts +276 -0
- package/src/scripts/test-tools-before-handoff.js +187 -0
- package/src/scripts/test-tools-before-handoff.js.map +1 -0
- package/src/scripts/test-tools-before-handoff.ts +4 -8
- package/src/scripts/test_code_api.js +263 -0
- package/src/scripts/test_code_api.js.map +1 -0
- package/src/scripts/thinking-bedrock.js +128 -0
- package/src/scripts/thinking-bedrock.js.map +1 -0
- package/src/scripts/thinking-bedrock.ts +1 -0
- package/src/scripts/thinking-vertexai.js +130 -0
- package/src/scripts/thinking-vertexai.js.map +1 -0
- package/src/scripts/thinking-vertexai.ts +168 -0
- package/src/scripts/thinking.js +134 -0
- package/src/scripts/thinking.js.map +1 -0
- package/src/scripts/thinking.ts +1 -0
- package/src/scripts/tool_search.js +114 -0
- package/src/scripts/tool_search.js.map +1 -0
- package/src/scripts/tools.js +125 -0
- package/src/scripts/tools.js.map +1 -0
- package/src/scripts/tools.ts +5 -19
- package/src/specs/agent-handoffs-bedrock.integration.test.js +280 -0
- package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
- package/src/specs/agent-handoffs-bedrock.integration.test.ts +412 -375
- package/src/specs/agent-handoffs.test.js +924 -0
- package/src/specs/agent-handoffs.test.js.map +1 -0
- package/src/specs/agent-handoffs.test.ts +152 -39
- package/src/specs/anthropic.simple.test.js +287 -0
- package/src/specs/anthropic.simple.test.js.map +1 -0
- package/src/specs/anthropic.simple.test.ts +7 -4
- package/src/specs/azure.simple.test.js +381 -0
- package/src/specs/azure.simple.test.js.map +1 -0
- package/src/specs/azure.simple.test.ts +143 -5
- package/src/specs/cache.simple.test.js +282 -0
- package/src/specs/cache.simple.test.js.map +1 -0
- package/src/specs/cache.simple.test.ts +9 -2
- package/src/specs/custom-event-await.test.js +148 -0
- package/src/specs/custom-event-await.test.js.map +1 -0
- package/src/specs/custom-event-await.test.ts +215 -0
- package/src/specs/deepseek.simple.test.js +189 -0
- package/src/specs/deepseek.simple.test.js.map +1 -0
- package/src/specs/deepseek.simple.test.ts +4 -2
- package/src/specs/emergency-prune.test.js +308 -0
- package/src/specs/emergency-prune.test.js.map +1 -0
- package/src/specs/moonshot.simple.test.js +237 -0
- package/src/specs/moonshot.simple.test.js.map +1 -0
- package/src/specs/moonshot.simple.test.ts +6 -2
- package/src/specs/observability.integration.test.js +1337 -0
- package/src/specs/observability.integration.test.js.map +1 -0
- package/src/specs/observability.integration.test.ts +2223 -0
- package/src/specs/openai.simple.test.js +233 -0
- package/src/specs/openai.simple.test.js.map +1 -0
- package/src/specs/openai.simple.test.ts +4 -2
- package/src/specs/openrouter.simple.test.js +202 -0
- package/src/specs/openrouter.simple.test.js.map +1 -0
- package/src/specs/openrouter.simple.test.ts +165 -4
- package/src/specs/prune.test.js +733 -0
- package/src/specs/prune.test.js.map +1 -0
- package/src/specs/prune.test.ts +1 -0
- package/src/specs/reasoning.test.js +144 -0
- package/src/specs/reasoning.test.js.map +1 -0
- package/src/specs/reasoning.test.ts +2 -2
- package/src/specs/spec.utils.js +4 -0
- package/src/specs/spec.utils.js.map +1 -0
- package/src/specs/thinking-handoff.test.js +486 -0
- package/src/specs/thinking-handoff.test.js.map +1 -0
- package/src/specs/thinking-handoff.test.ts +3 -2
- package/src/specs/thinking-prune.test.js +600 -0
- package/src/specs/thinking-prune.test.js.map +1 -0
- package/src/specs/token-distribution-edge-case.test.js +246 -0
- package/src/specs/token-distribution-edge-case.test.js.map +1 -0
- package/src/specs/token-memoization.test.js +32 -0
- package/src/specs/token-memoization.test.js.map +1 -0
- package/src/specs/token-memoization.test.ts +14 -5
- package/src/specs/tokens.test.js +49 -0
- package/src/specs/tokens.test.js.map +1 -0
- package/src/specs/tokens.test.ts +64 -0
- package/src/specs/tool-error.test.js +139 -0
- package/src/specs/tool-error.test.js.map +1 -0
- package/src/specs/tool-error.test.ts +2 -2
- package/src/splitStream.js +204 -0
- package/src/splitStream.js.map +1 -0
- package/src/splitStream.test.js +504 -0
- package/src/splitStream.test.js.map +1 -0
- package/src/stream.js +650 -0
- package/src/stream.js.map +1 -0
- package/src/stream.test.js +225 -0
- package/src/stream.test.js.map +1 -0
- package/src/stream.test.ts +25 -15
- package/src/stream.ts +82 -32
- package/src/test/mockTools.js +340 -0
- package/src/test/mockTools.js.map +1 -0
- package/src/tools/AskUser.ts +159 -0
- package/src/tools/BrowserTools.js +245 -0
- package/src/tools/BrowserTools.js.map +1 -0
- package/src/tools/BrowserTools.ts +12 -8
- package/src/tools/Calculator.js +38 -0
- package/src/tools/Calculator.js.map +1 -0
- package/src/tools/Calculator.test.js +225 -0
- package/src/tools/Calculator.test.js.map +1 -0
- package/src/tools/CodeExecutor.js +233 -0
- package/src/tools/CodeExecutor.js.map +1 -0
- package/src/tools/CodeExecutor.selfhealing.test.ts +435 -0
- package/src/tools/CodeExecutor.ts +62 -4
- package/src/tools/ProgrammaticToolCalling.js +602 -0
- package/src/tools/ProgrammaticToolCalling.js.map +1 -0
- package/src/tools/ProgrammaticToolCalling.ts +40 -52
- package/src/tools/StreamingToolCallBuffer.js +179 -0
- package/src/tools/StreamingToolCallBuffer.js.map +1 -0
- package/src/tools/StreamingToolCallBuffer.ts +218 -0
- package/src/tools/ToolNode.js +930 -0
- package/src/tools/ToolNode.js.map +1 -0
- package/src/tools/ToolNode.ts +454 -41
- package/src/tools/ToolSearch.js +904 -0
- package/src/tools/ToolSearch.js.map +1 -0
- package/src/tools/ToolSearch.ts +84 -33
- package/src/tools/__tests__/AskUser.test.ts +537 -0
- package/src/tools/__tests__/BrowserTools.test.js +306 -0
- package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
- package/src/tools/__tests__/BrowserTools.test.ts +131 -6
- package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js +276 -0
- package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
- package/src/tools/__tests__/ProgrammaticToolCalling.test.js +807 -0
- package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
- package/src/tools/__tests__/StreamingToolCallBuffer.test.js +175 -0
- package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +1 -0
- package/src/tools/__tests__/StreamingToolCallBuffer.test.ts +263 -0
- package/src/tools/__tests__/ToolApproval.test.js +675 -0
- package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
- package/src/tools/__tests__/ToolApproval.test.ts +194 -20
- package/src/tools/__tests__/ToolNode.hitl.test.ts +267 -0
- package/src/tools/__tests__/ToolNode.recovery.test.js +200 -0
- package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
- package/src/tools/__tests__/ToolNode.recovery.test.ts +276 -0
- package/src/tools/__tests__/ToolNode.session.test.js +319 -0
- package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
- package/src/tools/__tests__/ToolNode.session.test.ts +465 -0
- package/src/tools/__tests__/ToolSearch.integration.test.js +125 -0
- package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
- package/src/tools/__tests__/ToolSearch.test.js +812 -0
- package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
- package/src/tools/__tests__/ToolSearch.test.ts +78 -5
- package/src/tools/__tests__/handlers.test.js +799 -0
- package/src/tools/__tests__/handlers.test.js.map +1 -0
- package/src/tools/__tests__/handlers.test.ts +1100 -0
- package/src/tools/__tests__/truncation-recovery.integration.test.js +362 -0
- package/src/tools/__tests__/truncation-recovery.integration.test.js.map +1 -0
- package/src/tools/__tests__/truncation-recovery.integration.test.ts +560 -0
- package/src/tools/handlers.js +306 -0
- package/src/tools/handlers.js.map +1 -0
- package/src/tools/handlers.ts +119 -16
- package/src/tools/schema.js +25 -0
- package/src/tools/schema.js.map +1 -0
- package/src/tools/search/anthropic.js +34 -0
- package/src/tools/search/anthropic.js.map +1 -0
- package/src/tools/search/content.js +116 -0
- package/src/tools/search/content.js.map +1 -0
- package/src/tools/search/content.test.js +133 -0
- package/src/tools/search/content.test.js.map +1 -0
- package/src/tools/search/firecrawl.js +173 -0
- package/src/tools/search/firecrawl.js.map +1 -0
- package/src/tools/search/format.js +198 -0
- package/src/tools/search/format.js.map +1 -0
- package/src/tools/search/highlights.js +241 -0
- package/src/tools/search/highlights.js.map +1 -0
- package/src/tools/search/index.js +3 -0
- package/src/tools/search/index.js.map +1 -0
- package/src/tools/search/jina-reranker.test.js +106 -0
- package/src/tools/search/jina-reranker.test.js.map +1 -0
- package/src/tools/search/rerankers.js +165 -0
- package/src/tools/search/rerankers.js.map +1 -0
- package/src/tools/search/schema.js +102 -0
- package/src/tools/search/schema.js.map +1 -0
- package/src/tools/search/search.js +561 -0
- package/src/tools/search/search.js.map +1 -0
- package/src/tools/search/serper-scraper.js +126 -0
- package/src/tools/search/serper-scraper.js.map +1 -0
- package/src/tools/search/test.js +129 -0
- package/src/tools/search/test.js.map +1 -0
- package/src/tools/search/tool.js +453 -0
- package/src/tools/search/tool.js.map +1 -0
- package/src/tools/search/types.js +2 -0
- package/src/tools/search/types.js.map +1 -0
- package/src/tools/search/utils.js +59 -0
- package/src/tools/search/utils.js.map +1 -0
- package/src/types/graph.js +24 -0
- package/src/types/graph.js.map +1 -0
- package/src/types/graph.test.js +192 -0
- package/src/types/graph.test.js.map +1 -0
- package/src/types/graph.ts +26 -6
- package/src/types/index.js +7 -0
- package/src/types/index.js.map +1 -0
- package/src/types/llm.js +2 -0
- package/src/types/llm.js.map +1 -0
- package/src/types/llm.ts +8 -3
- package/src/types/messages.js +2 -0
- package/src/types/messages.js.map +1 -0
- package/src/types/run.js +2 -0
- package/src/types/run.js.map +1 -0
- package/src/types/run.ts +2 -0
- package/src/types/stream.js +2 -0
- package/src/types/stream.js.map +1 -0
- package/src/types/tools.js +2 -0
- package/src/types/tools.js.map +1 -0
- package/src/types/tools.ts +21 -2
- package/src/utils/contextAnalytics.js +79 -0
- package/src/utils/contextAnalytics.js.map +1 -0
- package/src/utils/contextAnalytics.test.js +166 -0
- package/src/utils/contextAnalytics.test.js.map +1 -0
- package/src/utils/contextAnalytics.test.ts +222 -0
- package/src/utils/contextAnalytics.ts +27 -9
- package/src/utils/events.js +26 -0
- package/src/utils/events.js.map +1 -0
- package/src/utils/graph.js +11 -0
- package/src/utils/graph.js.map +1 -0
- package/src/utils/handlers.js +65 -0
- package/src/utils/handlers.js.map +1 -0
- package/src/utils/index.js +10 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/llm.js +21 -0
- package/src/utils/llm.js.map +1 -0
- package/src/utils/llmConfig.js +205 -0
- package/src/utils/llmConfig.js.map +1 -0
- package/src/utils/llmConfig.ts +5 -5
- package/src/utils/logging.js +37 -0
- package/src/utils/logging.js.map +1 -0
- package/src/utils/misc.js +51 -0
- package/src/utils/misc.js.map +1 -0
- package/src/utils/run.js +69 -0
- package/src/utils/run.js.map +1 -0
- package/src/utils/run.ts +108 -106
- package/src/utils/schema.js +21 -0
- package/src/utils/schema.js.map +1 -0
- package/src/utils/title.js +119 -0
- package/src/utils/title.js.map +1 -0
- package/src/utils/tokens.js +92 -0
- package/src/utils/tokens.js.map +1 -0
- package/src/utils/tokens.ts +118 -142
- package/src/utils/toolCallContinuation.ts +55 -0
- package/src/utils/toonFormat.js +379 -0
- package/src/utils/toonFormat.js.map +1 -0
|
@@ -4,8 +4,12 @@ var tools = require('@langchain/core/tools');
|
|
|
4
4
|
var prompts = require('@langchain/core/prompts');
|
|
5
5
|
var messages = require('@langchain/core/messages');
|
|
6
6
|
var langgraph = require('@langchain/langgraph');
|
|
7
|
-
|
|
7
|
+
require('../messages/core.cjs');
|
|
8
|
+
require('nanoid');
|
|
8
9
|
var _enum = require('../common/enum.cjs');
|
|
10
|
+
require('../utils/toonFormat.cjs');
|
|
11
|
+
var summarize = require('../messages/summarize.cjs');
|
|
12
|
+
var Graph = require('./Graph.cjs');
|
|
9
13
|
|
|
10
14
|
/** Pattern to extract instructions from transfer ToolMessage content */
|
|
11
15
|
const HANDOFF_INSTRUCTIONS_PATTERN = /(?:Instructions?|Context):\s*(.+)/is;
|
|
@@ -50,6 +54,7 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
50
54
|
this.categorizeEdges();
|
|
51
55
|
this.analyzeGraph();
|
|
52
56
|
this.createHandoffTools();
|
|
57
|
+
console.debug(`[MultiAgentGraph] Constructor complete: ${this.agentContexts.size} agents, ${this.edges.length} edges`);
|
|
53
58
|
}
|
|
54
59
|
/**
|
|
55
60
|
* Categorize edges into handoff and direct types
|
|
@@ -58,10 +63,10 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
58
63
|
for (const edge of this.edges) {
|
|
59
64
|
// Default behavior: edges with conditions or explicit 'handoff' type are handoff edges
|
|
60
65
|
// Edges with explicit 'direct' type or multi-destination without conditions are direct edges
|
|
61
|
-
if (edge.edgeType ===
|
|
66
|
+
if (edge.edgeType === _enum.EdgeType.DIRECT) {
|
|
62
67
|
this.directEdges.push(edge);
|
|
63
68
|
}
|
|
64
|
-
else if (edge.edgeType ===
|
|
69
|
+
else if (edge.edgeType === _enum.EdgeType.HANDOFF || edge.condition != null) {
|
|
65
70
|
this.handoffEdges.push(edge);
|
|
66
71
|
}
|
|
67
72
|
else {
|
|
@@ -78,6 +83,7 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
85
|
}
|
|
86
|
+
console.debug(`[MultiAgentGraph] Edge categorization: ${this.handoffEdges.length} handoff, ${this.directEdges.length} direct (of ${this.edges.length} total)`);
|
|
81
87
|
}
|
|
82
88
|
/**
|
|
83
89
|
* Analyze graph structure to determine starting nodes and connections
|
|
@@ -99,6 +105,7 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
99
105
|
if (this.startingNodes.size === 0 && this.agentContexts.size > 0) {
|
|
100
106
|
this.startingNodes.add(this.agentContexts.keys().next().value);
|
|
101
107
|
}
|
|
108
|
+
console.debug(`[MultiAgentGraph] Starting nodes identified: [${Array.from(this.startingNodes).join(', ')}]`);
|
|
102
109
|
// Determine if graph has parallel execution capability
|
|
103
110
|
this.computeParallelCapability();
|
|
104
111
|
}
|
|
@@ -232,11 +239,11 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
232
239
|
for (const edge of edges) {
|
|
233
240
|
handoffTools.push(...this.createHandoffToolsForEdge(edge, agentId, sourceAgentName));
|
|
234
241
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
agentContext.tools = [];
|
|
242
|
+
if (!agentContext.graphTools) {
|
|
243
|
+
agentContext.graphTools = [];
|
|
238
244
|
}
|
|
239
|
-
agentContext.
|
|
245
|
+
agentContext.graphTools.push(...handoffTools);
|
|
246
|
+
console.debug(`[MultiAgentGraph] Handoff tools for "${agentId}": [${handoffTools.map((t) => t.name).join(', ')}]`);
|
|
240
247
|
}
|
|
241
248
|
}
|
|
242
249
|
/**
|
|
@@ -321,7 +328,8 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
321
328
|
for (const destination of destinations) {
|
|
322
329
|
const toolName = `${_enum.Constants.LC_TRANSFER_TO_}${destination}`;
|
|
323
330
|
const destContext = this.agentContexts.get(destination);
|
|
324
|
-
const toolDescription = edge.description ??
|
|
331
|
+
const toolDescription = edge.description ??
|
|
332
|
+
this.buildDefaultHandoffDescription(destContext, destination);
|
|
325
333
|
/** Check if we have a prompt for handoff input */
|
|
326
334
|
const hasHandoffInput = edge.prompt != null && typeof edge.prompt === 'string';
|
|
327
335
|
const handoffInputDescription = hasHandoffInput
|
|
@@ -438,7 +446,7 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
438
446
|
buildDefaultHandoffDescription(destContext, destinationId) {
|
|
439
447
|
const displayName = destContext?.name ?? destinationId;
|
|
440
448
|
const agentDescription = destContext?.description;
|
|
441
|
-
if (agentDescription) {
|
|
449
|
+
if (agentDescription != null && agentDescription !== '') {
|
|
442
450
|
return `Transfer to "${displayName}": ${agentDescription}`;
|
|
443
451
|
}
|
|
444
452
|
return `Transfer control to "${displayName}"`;
|
|
@@ -566,9 +574,13 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
566
574
|
if (hasTransferCalls) {
|
|
567
575
|
if (remainingToolCalls.length > 0 ||
|
|
568
576
|
(typeof aiMsg.content === 'string' && aiMsg.content.trim())) {
|
|
569
|
-
/** Keep the message but without transfer tool calls
|
|
577
|
+
/** Keep the message but without transfer tool calls.
|
|
578
|
+
* Trim trailing whitespace to prevent Bedrock validation errors. */
|
|
579
|
+
const trimmedContent = typeof aiMsg.content === 'string'
|
|
580
|
+
? aiMsg.content.trimEnd()
|
|
581
|
+
: aiMsg.content;
|
|
570
582
|
const filteredAiMsg = new messages.AIMessage({
|
|
571
|
-
content:
|
|
583
|
+
content: trimmedContent,
|
|
572
584
|
tool_calls: remainingToolCalls,
|
|
573
585
|
id: aiMsg.id,
|
|
574
586
|
});
|
|
@@ -583,83 +595,97 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
583
595
|
filteredMessages.push(msg);
|
|
584
596
|
}
|
|
585
597
|
/**
|
|
586
|
-
*
|
|
598
|
+
* Flatten tool call/result pairs into text summaries for handoff.
|
|
599
|
+
*
|
|
600
|
+
* When agent A uses tools and then hands off to agent B, agent B may not
|
|
601
|
+
* have the same tools configured. Providers like Bedrock require toolConfig
|
|
602
|
+
* when tool_use/tool_result blocks are in the message history. Converting
|
|
603
|
+
* tool interactions to text summaries avoids this and reduces context bloat.
|
|
587
604
|
*
|
|
588
|
-
*
|
|
589
|
-
*
|
|
590
|
-
*
|
|
591
|
-
*
|
|
605
|
+
* Strategy: Walk through messages and merge each (AIMessage-with-tool_calls +
|
|
606
|
+
* following ToolMessages) group into a single AIMessage containing the original
|
|
607
|
+
* text plus a textual summary of the tool interaction. This preserves proper
|
|
608
|
+
* message role ordering (human/assistant alternation).
|
|
592
609
|
*/
|
|
593
|
-
const compactedMessages =
|
|
610
|
+
const compactedMessages = [];
|
|
611
|
+
for (let i = 0; i < filteredMessages.length; i++) {
|
|
612
|
+
const msg = filteredMessages[i];
|
|
594
613
|
const msgType = msg.getType();
|
|
595
|
-
/** Compact content_tool ToolMessage outputs */
|
|
596
|
-
if (msgType === 'tool') {
|
|
597
|
-
const toolMsg = msg;
|
|
598
|
-
if (toolMsg.name !== 'content_tool')
|
|
599
|
-
return msg;
|
|
600
|
-
const content = typeof toolMsg.content === 'string'
|
|
601
|
-
? toolMsg.content
|
|
602
|
-
: Array.isArray(toolMsg.content)
|
|
603
|
-
? toolMsg.content
|
|
604
|
-
.filter((b) => typeof b === 'object' &&
|
|
605
|
-
b != null &&
|
|
606
|
-
'text' in b &&
|
|
607
|
-
typeof b.text === 'string')
|
|
608
|
-
.map((b) => b.text)
|
|
609
|
-
.join('\n')
|
|
610
|
-
: JSON.stringify(toolMsg.content);
|
|
611
|
-
if (content.length > 500) {
|
|
612
|
-
const firstLine = content.split('\n')[0];
|
|
613
|
-
return new messages.ToolMessage({
|
|
614
|
-
content: firstLine + ' [content summarized for handoff]',
|
|
615
|
-
name: toolMsg.name,
|
|
616
|
-
tool_call_id: toolMsg.tool_call_id,
|
|
617
|
-
status: toolMsg.status,
|
|
618
|
-
});
|
|
619
|
-
}
|
|
620
|
-
return msg;
|
|
621
|
-
}
|
|
622
|
-
/** Compact content_tool AI message args (remove large content/old_str/new_str fields) */
|
|
623
614
|
if (msgType === 'ai') {
|
|
624
615
|
const aiMsg = msg;
|
|
625
616
|
const toolCalls = aiMsg.tool_calls;
|
|
626
|
-
if (
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
if (
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
617
|
+
if (toolCalls && toolCalls.length > 0) {
|
|
618
|
+
/** Extract text content from the AIMessage */
|
|
619
|
+
const textContent = typeof aiMsg.content === 'string'
|
|
620
|
+
? aiMsg.content
|
|
621
|
+
: Array.isArray(aiMsg.content)
|
|
622
|
+
? aiMsg.content
|
|
623
|
+
.filter((b) => typeof b === 'object' &&
|
|
624
|
+
b.type === 'text' &&
|
|
625
|
+
'text' in b)
|
|
626
|
+
.map((b) => b.text)
|
|
627
|
+
.join('\n')
|
|
628
|
+
: '';
|
|
629
|
+
/** Collect tool_call_ids so we can match following ToolMessages */
|
|
630
|
+
const callIds = new Set(toolCalls.map((tc) => tc.id).filter(Boolean));
|
|
631
|
+
/** Build summary of what tools were called */
|
|
632
|
+
const callSummaries = toolCalls.map((tc) => `[Called "${tc.name}"]`);
|
|
633
|
+
/** Consume following ToolMessages that belong to this AI message */
|
|
634
|
+
const resultSummaries = [];
|
|
635
|
+
while (i + 1 < filteredMessages.length) {
|
|
636
|
+
const next = filteredMessages[i + 1];
|
|
637
|
+
if (next.getType() !== 'tool')
|
|
638
|
+
break;
|
|
639
|
+
const toolMsg = next;
|
|
640
|
+
if (!callIds.has(toolMsg.tool_call_id))
|
|
641
|
+
break;
|
|
642
|
+
/** Extract and summarize the tool result */
|
|
643
|
+
const rawContent = typeof toolMsg.content === 'string'
|
|
644
|
+
? toolMsg.content
|
|
645
|
+
: Array.isArray(toolMsg.content)
|
|
646
|
+
? toolMsg.content
|
|
647
|
+
.filter((b) => typeof b === 'object' &&
|
|
648
|
+
'text' in b &&
|
|
649
|
+
typeof b.text ===
|
|
650
|
+
'string')
|
|
651
|
+
.map((b) => b.text)
|
|
652
|
+
.join('\n')
|
|
653
|
+
: JSON.stringify(toolMsg.content);
|
|
654
|
+
const summary = rawContent.length > 500
|
|
655
|
+
? rawContent.split('\n')[0] + ' [truncated for handoff]'
|
|
656
|
+
: rawContent;
|
|
657
|
+
resultSummaries.push(`[Tool "${toolMsg.name}" returned: ${summary}]`);
|
|
658
|
+
i++; // Skip this ToolMessage in the outer loop
|
|
659
|
+
}
|
|
660
|
+
/** Merge everything into a single AIMessage */
|
|
661
|
+
const parts = [
|
|
662
|
+
textContent,
|
|
663
|
+
...callSummaries,
|
|
664
|
+
...resultSummaries,
|
|
665
|
+
].filter(Boolean);
|
|
666
|
+
/** Bedrock rejects messages with trailing whitespace */
|
|
667
|
+
const mergedContent = (parts.join('\n') || '[Agent processed tools]').trimEnd();
|
|
668
|
+
compactedMessages.push(new messages.AIMessage({
|
|
669
|
+
content: mergedContent,
|
|
657
670
|
id: aiMsg.id,
|
|
658
|
-
});
|
|
671
|
+
}));
|
|
672
|
+
continue;
|
|
659
673
|
}
|
|
660
674
|
}
|
|
661
|
-
|
|
662
|
-
|
|
675
|
+
/** Skip orphaned ToolMessages (their AI parent was already handled above,
|
|
676
|
+
* or they belong to a transfer that was already filtered out) */
|
|
677
|
+
if (msgType === 'tool') {
|
|
678
|
+
continue;
|
|
679
|
+
}
|
|
680
|
+
/** Trim trailing whitespace on AI messages to prevent Bedrock validation errors */
|
|
681
|
+
if (msgType === 'ai' &&
|
|
682
|
+
typeof msg.content === 'string' &&
|
|
683
|
+
msg.content !== msg.content.trimEnd()) {
|
|
684
|
+
compactedMessages.push(new messages.AIMessage({ content: msg.content.trimEnd(), id: msg.id }));
|
|
685
|
+
continue;
|
|
686
|
+
}
|
|
687
|
+
compactedMessages.push(msg);
|
|
688
|
+
}
|
|
663
689
|
return {
|
|
664
690
|
filteredMessages: compactedMessages,
|
|
665
691
|
instructions,
|
|
@@ -727,7 +753,8 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
727
753
|
/** Agent subgraph (includes agent + tools) */
|
|
728
754
|
const agentSubgraph = this.createAgentSubgraph(agentId);
|
|
729
755
|
/** Wrapper function that handles agentMessages channel, handoff reception, and conditional routing */
|
|
730
|
-
const agentWrapper = async (state) => {
|
|
756
|
+
const agentWrapper = async (state, config) => {
|
|
757
|
+
console.debug(`[MultiAgentGraph] Agent "${agentId}" wrapper ENTRY (messages: ${state.messages.length}, needsCommandRouting: ${needsCommandRouting})`);
|
|
731
758
|
let result;
|
|
732
759
|
/**
|
|
733
760
|
* Check if this agent is receiving a handoff.
|
|
@@ -738,6 +765,7 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
738
765
|
const handoffContext = this.processHandoffReception(state.messages, agentId);
|
|
739
766
|
if (handoffContext !== null) {
|
|
740
767
|
const { filteredMessages, instructions, sourceAgentName, parallelSiblings, } = handoffContext;
|
|
768
|
+
console.debug(`[MultiAgentGraph] Agent "${agentId}" receiving handoff from "${sourceAgentName}" (instructions: ${instructions != null}, parallelSiblings: ${parallelSiblings.length})`);
|
|
741
769
|
/**
|
|
742
770
|
* Set handoff context on the receiving agent.
|
|
743
771
|
* Uses pre-computed graph position for depth and parallel info.
|
|
@@ -750,13 +778,36 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
750
778
|
}
|
|
751
779
|
/** Build messages for the receiving agent */
|
|
752
780
|
let messagesForAgent = filteredMessages;
|
|
753
|
-
/**
|
|
781
|
+
/**
|
|
782
|
+
* If there are instructions, inject them as a HumanMessage to
|
|
783
|
+
* ground the receiving agent.
|
|
784
|
+
*
|
|
785
|
+
* When the last filtered message is a ToolMessage (e.g. from a
|
|
786
|
+
* non-handoff tool the router called before handing off), a
|
|
787
|
+
* synthetic AIMessage is inserted first to satisfy the
|
|
788
|
+
* tool → assistant role ordering required by chat APIs. Without
|
|
789
|
+
* this bridge, appending a HumanMessage directly after a
|
|
790
|
+
* ToolMessage causes "400 Unexpected role 'user' after role
|
|
791
|
+
* 'tool'" errors (see issue #54).
|
|
792
|
+
*/
|
|
754
793
|
const hasInstructions = instructions !== null && instructions !== '';
|
|
755
794
|
if (hasInstructions) {
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
795
|
+
const lastMsg = filteredMessages.length > 0
|
|
796
|
+
? filteredMessages[filteredMessages.length - 1]
|
|
797
|
+
: null;
|
|
798
|
+
if (lastMsg != null && lastMsg.getType() === 'tool') {
|
|
799
|
+
messagesForAgent = [
|
|
800
|
+
...filteredMessages,
|
|
801
|
+
new messages.AIMessage(`[Processed tool result and transferring to ${agentId}]`),
|
|
802
|
+
new messages.HumanMessage(instructions),
|
|
803
|
+
];
|
|
804
|
+
}
|
|
805
|
+
else {
|
|
806
|
+
messagesForAgent = [
|
|
807
|
+
...filteredMessages,
|
|
808
|
+
new messages.HumanMessage(instructions),
|
|
809
|
+
];
|
|
810
|
+
}
|
|
760
811
|
}
|
|
761
812
|
/** Update token map if we have a token counter */
|
|
762
813
|
if (agentContext?.tokenCounter && hasInstructions) {
|
|
@@ -767,17 +818,17 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
767
818
|
freshTokenMap[i] = tokenCount;
|
|
768
819
|
}
|
|
769
820
|
}
|
|
770
|
-
/** Add tokens for the instructions
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
821
|
+
/** Add tokens for the bridge AIMessage + instructions HumanMessage */
|
|
822
|
+
for (let i = filteredMessages.length; i < messagesForAgent.length; i++) {
|
|
823
|
+
freshTokenMap[i] = agentContext.tokenCounter(messagesForAgent[i]);
|
|
824
|
+
}
|
|
774
825
|
agentContext.updateTokenMapWithInstructions(freshTokenMap);
|
|
775
826
|
}
|
|
776
827
|
const transformedState = {
|
|
777
828
|
...state,
|
|
778
829
|
messages: messagesForAgent,
|
|
779
830
|
};
|
|
780
|
-
result = await agentSubgraph.invoke(transformedState);
|
|
831
|
+
result = await agentSubgraph.invoke(transformedState, config);
|
|
781
832
|
result = {
|
|
782
833
|
...result,
|
|
783
834
|
agentMessages: [],
|
|
@@ -818,7 +869,7 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
818
869
|
...state,
|
|
819
870
|
messages: state.agentMessages,
|
|
820
871
|
};
|
|
821
|
-
result = await agentSubgraph.invoke(transformedState);
|
|
872
|
+
result = await agentSubgraph.invoke(transformedState, config);
|
|
822
873
|
result = {
|
|
823
874
|
...result,
|
|
824
875
|
/** Clear agentMessages for next agent */
|
|
@@ -826,10 +877,11 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
826
877
|
};
|
|
827
878
|
}
|
|
828
879
|
else {
|
|
829
|
-
result = await agentSubgraph.invoke(state);
|
|
880
|
+
result = await agentSubgraph.invoke(state, config);
|
|
830
881
|
}
|
|
831
882
|
/** Track the last agent that produced output for continuation support */
|
|
832
883
|
this.lastActiveAgentId = agentId;
|
|
884
|
+
console.debug(`[MultiAgentGraph] Agent "${agentId}" wrapper EXIT (result messages: ${result.messages.length})`);
|
|
833
885
|
/** If agent has both handoff and direct edges, use Command for exclusive routing */
|
|
834
886
|
if (needsCommandRouting) {
|
|
835
887
|
/** Check if a handoff occurred */
|
|
@@ -840,6 +892,84 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
840
892
|
lastMessage.name.startsWith(_enum.Constants.LC_TRANSFER_TO_)) {
|
|
841
893
|
/** Handoff occurred - extract destination and navigate there exclusively */
|
|
842
894
|
const handoffDest = lastMessage.name.replace(_enum.Constants.LC_TRANSFER_TO_, '');
|
|
895
|
+
console.debug(`[MultiAgentGraph] Command routing: "${agentId}" -> handoff to "${handoffDest}" (direct edges skipped: [${Array.from(directDestinations).join(', ')}])`);
|
|
896
|
+
/** Validate destination agent exists */
|
|
897
|
+
if (!this.agentContexts.has(handoffDest)) {
|
|
898
|
+
const availableAgents = Array.from(this.agentContexts.keys()).join(', ');
|
|
899
|
+
console.error(`[MultiAgentGraph] Handoff to non-existent agent "${handoffDest}". Available: ${availableAgents}`);
|
|
900
|
+
/** Return error to model so it can self-correct */
|
|
901
|
+
const errorMsg = new messages.ToolMessage({
|
|
902
|
+
content: `Transfer failed: agent "${handoffDest}" does not exist. Available agents: ${availableAgents}. Please choose a valid agent to transfer to.`,
|
|
903
|
+
tool_call_id: lastMessage.tool_call_id,
|
|
904
|
+
name: lastMessage.name,
|
|
905
|
+
});
|
|
906
|
+
errorMsg.status = 'error';
|
|
907
|
+
return {
|
|
908
|
+
messages: [...result.messages, errorMsg],
|
|
909
|
+
};
|
|
910
|
+
}
|
|
911
|
+
/** Pre-handoff context compaction: if receiving agent has smaller budget */
|
|
912
|
+
const receiverContext = this.agentContexts.get(handoffDest);
|
|
913
|
+
const senderContext = this.agentContexts.get(agentId);
|
|
914
|
+
if (receiverContext?.maxContextTokens != null &&
|
|
915
|
+
senderContext?.tokenCounter != null &&
|
|
916
|
+
receiverContext.maxContextTokens > 0) {
|
|
917
|
+
let currentSize = 0;
|
|
918
|
+
for (const msg of result.messages) {
|
|
919
|
+
currentSize += senderContext.tokenCounter(msg);
|
|
920
|
+
}
|
|
921
|
+
const receiverBudget = receiverContext.maxContextTokens;
|
|
922
|
+
if (currentSize > receiverBudget * 0.7) {
|
|
923
|
+
console.warn(`[MultiAgentGraph] Pre-handoff compaction: context (${currentSize} tokens) exceeds ` +
|
|
924
|
+
`70% of receiver "${handoffDest}" budget (${receiverBudget} tokens)`);
|
|
925
|
+
/** Generate handoff briefing */
|
|
926
|
+
const senderName = senderContext.name ?? agentId;
|
|
927
|
+
if (senderContext.summarizeCallback) {
|
|
928
|
+
try {
|
|
929
|
+
const briefingResult = await summarize.summarize(result.messages, async (prompt, _maxTokens) => senderContext.summarizeCallback([
|
|
930
|
+
new messages.HumanMessage(prompt),
|
|
931
|
+
]), {
|
|
932
|
+
tokenCounter: senderContext.tokenCounter,
|
|
933
|
+
summaryBudget: Math.floor(receiverBudget * 0.2),
|
|
934
|
+
isMultiAgent: true,
|
|
935
|
+
agentWorkflowState: {
|
|
936
|
+
currentAgentId: handoffDest,
|
|
937
|
+
agentChain: [agentId, handoffDest],
|
|
938
|
+
pendingAgents: [],
|
|
939
|
+
},
|
|
940
|
+
});
|
|
941
|
+
const briefingMsg = new messages.SystemMessage(`[Handoff Briefing from "${senderName}"]\n${briefingResult.summary}`);
|
|
942
|
+
/** Replace messages with briefing + last 3 messages */
|
|
943
|
+
const keepCount = Math.min(3, result.messages.length);
|
|
944
|
+
result = {
|
|
945
|
+
...result,
|
|
946
|
+
messages: [
|
|
947
|
+
briefingMsg,
|
|
948
|
+
...result.messages.slice(result.messages.length - keepCount),
|
|
949
|
+
],
|
|
950
|
+
};
|
|
951
|
+
console.info(`[MultiAgentGraph] Pre-handoff compaction complete: ${currentSize} tokens → briefing + ${keepCount} messages`);
|
|
952
|
+
}
|
|
953
|
+
catch (compactErr) {
|
|
954
|
+
console.error('[MultiAgentGraph] Pre-handoff compaction failed:', compactErr);
|
|
955
|
+
/** Continue without compaction — let receiver handle the overflow */
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
else {
|
|
959
|
+
/** No summary callback — use emergency summary */
|
|
960
|
+
const emergencySummary = summarize.createEmergencySummary(result.messages);
|
|
961
|
+
const briefingMsg = new messages.SystemMessage(`[Handoff Briefing from "${senderName}" — Emergency]\n${emergencySummary}`);
|
|
962
|
+
const keepCount = Math.min(3, result.messages.length);
|
|
963
|
+
result = {
|
|
964
|
+
...result,
|
|
965
|
+
messages: [
|
|
966
|
+
briefingMsg,
|
|
967
|
+
...result.messages.slice(result.messages.length - keepCount),
|
|
968
|
+
],
|
|
969
|
+
};
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
}
|
|
843
973
|
return new langgraph.Command({
|
|
844
974
|
update: result,
|
|
845
975
|
goto: handoffDest,
|
|
@@ -847,6 +977,7 @@ class MultiAgentGraph extends Graph.StandardGraph {
|
|
|
847
977
|
}
|
|
848
978
|
else {
|
|
849
979
|
/** No handoff - proceed with direct edges */
|
|
980
|
+
console.debug(`[MultiAgentGraph] Command routing: "${agentId}" -> no handoff, following direct edges: [${Array.from(directDestinations).join(', ')}]`);
|
|
850
981
|
const directDests = Array.from(directDestinations);
|
|
851
982
|
if (directDests.length === 1) {
|
|
852
983
|
return new langgraph.Command({
|