@illuma-ai/agents 1.0.90 → 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,6 +4,7 @@ import {
|
|
|
4
4
|
AIMessage,
|
|
5
5
|
ToolMessage,
|
|
6
6
|
HumanMessage,
|
|
7
|
+
SystemMessage,
|
|
7
8
|
getBufferString,
|
|
8
9
|
} from '@langchain/core/messages';
|
|
9
10
|
import {
|
|
@@ -15,11 +16,13 @@ import {
|
|
|
15
16
|
getCurrentTaskInput,
|
|
16
17
|
messagesStateReducer,
|
|
17
18
|
} from '@langchain/langgraph';
|
|
19
|
+
import type { LangGraphRunnableConfig } from '@langchain/langgraph';
|
|
18
20
|
import type { BaseMessage, AIMessageChunk } from '@langchain/core/messages';
|
|
19
21
|
import type { ToolRunnableConfig } from '@langchain/core/tools';
|
|
20
22
|
import type * as t from '@/types';
|
|
23
|
+
import { summarize, createEmergencySummary } from '@/messages';
|
|
21
24
|
import { StandardGraph } from './Graph';
|
|
22
|
-
import { Constants } from '@/common';
|
|
25
|
+
import { Constants, EdgeType } from '@/common';
|
|
23
26
|
|
|
24
27
|
/** Pattern to extract instructions from transfer ToolMessage content */
|
|
25
28
|
const HANDOFF_INSTRUCTIONS_PATTERN = /(?:Instructions?|Context):\s*(.+)/is;
|
|
@@ -66,6 +69,9 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
66
69
|
this.categorizeEdges();
|
|
67
70
|
this.analyzeGraph();
|
|
68
71
|
this.createHandoffTools();
|
|
72
|
+
console.debug(
|
|
73
|
+
`[MultiAgentGraph] Constructor complete: ${this.agentContexts.size} agents, ${this.edges.length} edges`
|
|
74
|
+
);
|
|
69
75
|
}
|
|
70
76
|
|
|
71
77
|
/**
|
|
@@ -75,9 +81,9 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
75
81
|
for (const edge of this.edges) {
|
|
76
82
|
// Default behavior: edges with conditions or explicit 'handoff' type are handoff edges
|
|
77
83
|
// Edges with explicit 'direct' type or multi-destination without conditions are direct edges
|
|
78
|
-
if (edge.edgeType ===
|
|
84
|
+
if (edge.edgeType === EdgeType.DIRECT) {
|
|
79
85
|
this.directEdges.push(edge);
|
|
80
|
-
} else if (edge.edgeType ===
|
|
86
|
+
} else if (edge.edgeType === EdgeType.HANDOFF || edge.condition != null) {
|
|
81
87
|
this.handoffEdges.push(edge);
|
|
82
88
|
} else {
|
|
83
89
|
// Default: single-to-single edges are handoff, single-to-multiple are direct
|
|
@@ -93,6 +99,9 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
93
99
|
}
|
|
94
100
|
}
|
|
95
101
|
}
|
|
102
|
+
console.debug(
|
|
103
|
+
`[MultiAgentGraph] Edge categorization: ${this.handoffEdges.length} handoff, ${this.directEdges.length} direct (of ${this.edges.length} total)`
|
|
104
|
+
);
|
|
96
105
|
}
|
|
97
106
|
|
|
98
107
|
/**
|
|
@@ -119,6 +128,10 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
119
128
|
this.startingNodes.add(this.agentContexts.keys().next().value!);
|
|
120
129
|
}
|
|
121
130
|
|
|
131
|
+
console.debug(
|
|
132
|
+
`[MultiAgentGraph] Starting nodes identified: [${Array.from(this.startingNodes).join(', ')}]`
|
|
133
|
+
);
|
|
134
|
+
|
|
122
135
|
// Determine if graph has parallel execution capability
|
|
123
136
|
this.computeParallelCapability();
|
|
124
137
|
}
|
|
@@ -269,11 +282,13 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
269
282
|
);
|
|
270
283
|
}
|
|
271
284
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
agentContext.tools = [];
|
|
285
|
+
if (!agentContext.graphTools) {
|
|
286
|
+
agentContext.graphTools = [];
|
|
275
287
|
}
|
|
276
|
-
agentContext.
|
|
288
|
+
agentContext.graphTools.push(...handoffTools);
|
|
289
|
+
console.debug(
|
|
290
|
+
`[MultiAgentGraph] Handoff tools for "${agentId}": [${handoffTools.map((t) => t.name).join(', ')}]`
|
|
291
|
+
);
|
|
277
292
|
}
|
|
278
293
|
}
|
|
279
294
|
|
|
@@ -358,15 +373,15 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
358
373
|
name: toolName,
|
|
359
374
|
schema: hasHandoffInput
|
|
360
375
|
? {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
376
|
+
type: 'object',
|
|
377
|
+
properties: {
|
|
378
|
+
[promptKey]: {
|
|
379
|
+
type: 'string',
|
|
380
|
+
description: handoffInputDescription as string,
|
|
381
|
+
},
|
|
366
382
|
},
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
}
|
|
383
|
+
required: [],
|
|
384
|
+
}
|
|
370
385
|
: { type: 'object', properties: {}, required: [] },
|
|
371
386
|
description: toolDescription,
|
|
372
387
|
}
|
|
@@ -378,7 +393,8 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
378
393
|
const toolName = `${Constants.LC_TRANSFER_TO_}${destination}`;
|
|
379
394
|
const destContext = this.agentContexts.get(destination);
|
|
380
395
|
const toolDescription =
|
|
381
|
-
edge.description ??
|
|
396
|
+
edge.description ??
|
|
397
|
+
this.buildDefaultHandoffDescription(destContext, destination);
|
|
382
398
|
|
|
383
399
|
/** Check if we have a prompt for handoff input */
|
|
384
400
|
const hasHandoffInput =
|
|
@@ -491,15 +507,15 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
491
507
|
name: toolName,
|
|
492
508
|
schema: hasHandoffInput
|
|
493
509
|
? {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
510
|
+
type: 'object',
|
|
511
|
+
properties: {
|
|
512
|
+
[promptKey]: {
|
|
513
|
+
type: 'string',
|
|
514
|
+
description: handoffInputDescription as string,
|
|
515
|
+
},
|
|
499
516
|
},
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
}
|
|
517
|
+
required: [],
|
|
518
|
+
}
|
|
503
519
|
: { type: 'object', properties: {}, required: [] },
|
|
504
520
|
description: toolDescription,
|
|
505
521
|
}
|
|
@@ -525,7 +541,7 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
525
541
|
const displayName = destContext?.name ?? destinationId;
|
|
526
542
|
const agentDescription = destContext?.description;
|
|
527
543
|
|
|
528
|
-
if (agentDescription) {
|
|
544
|
+
if (agentDescription != null && agentDescription !== '') {
|
|
529
545
|
return `Transfer to "${displayName}": ${agentDescription}`;
|
|
530
546
|
}
|
|
531
547
|
return `Transfer control to "${displayName}"`;
|
|
@@ -686,9 +702,14 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
686
702
|
remainingToolCalls.length > 0 ||
|
|
687
703
|
(typeof aiMsg.content === 'string' && aiMsg.content.trim())
|
|
688
704
|
) {
|
|
689
|
-
/** Keep the message but without transfer tool calls
|
|
705
|
+
/** Keep the message but without transfer tool calls.
|
|
706
|
+
* Trim trailing whitespace to prevent Bedrock validation errors. */
|
|
707
|
+
const trimmedContent =
|
|
708
|
+
typeof aiMsg.content === 'string'
|
|
709
|
+
? aiMsg.content.trimEnd()
|
|
710
|
+
: aiMsg.content;
|
|
690
711
|
const filteredAiMsg = new AIMessage({
|
|
691
|
-
content:
|
|
712
|
+
content: trimmedContent,
|
|
692
713
|
tool_calls: remainingToolCalls,
|
|
693
714
|
id: aiMsg.id,
|
|
694
715
|
});
|
|
@@ -705,89 +726,129 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
705
726
|
}
|
|
706
727
|
|
|
707
728
|
/**
|
|
708
|
-
*
|
|
729
|
+
* Flatten tool call/result pairs into text summaries for handoff.
|
|
730
|
+
*
|
|
731
|
+
* When agent A uses tools and then hands off to agent B, agent B may not
|
|
732
|
+
* have the same tools configured. Providers like Bedrock require toolConfig
|
|
733
|
+
* when tool_use/tool_result blocks are in the message history. Converting
|
|
734
|
+
* tool interactions to text summaries avoids this and reduces context bloat.
|
|
709
735
|
*
|
|
710
|
-
*
|
|
711
|
-
*
|
|
712
|
-
*
|
|
713
|
-
*
|
|
736
|
+
* Strategy: Walk through messages and merge each (AIMessage-with-tool_calls +
|
|
737
|
+
* following ToolMessages) group into a single AIMessage containing the original
|
|
738
|
+
* text plus a textual summary of the tool interaction. This preserves proper
|
|
739
|
+
* message role ordering (human/assistant alternation).
|
|
714
740
|
*/
|
|
715
|
-
const compactedMessages =
|
|
716
|
-
const msgType = msg.getType();
|
|
741
|
+
const compactedMessages: BaseMessage[] = [];
|
|
717
742
|
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
if (toolMsg.name !== 'content_tool') return msg;
|
|
722
|
-
|
|
723
|
-
const content =
|
|
724
|
-
typeof toolMsg.content === 'string'
|
|
725
|
-
? toolMsg.content
|
|
726
|
-
: Array.isArray(toolMsg.content)
|
|
727
|
-
? toolMsg.content
|
|
728
|
-
.filter(
|
|
729
|
-
(b): b is { type: string; text: string } =>
|
|
730
|
-
typeof b === 'object' &&
|
|
731
|
-
b != null &&
|
|
732
|
-
'text' in b &&
|
|
733
|
-
typeof (b as Record<string, unknown>).text === 'string'
|
|
734
|
-
)
|
|
735
|
-
.map((b) => b.text)
|
|
736
|
-
.join('\n')
|
|
737
|
-
: JSON.stringify(toolMsg.content);
|
|
738
|
-
|
|
739
|
-
if (content.length > 500) {
|
|
740
|
-
const firstLine = content.split('\n')[0];
|
|
741
|
-
return new ToolMessage({
|
|
742
|
-
content: firstLine + ' [content summarized for handoff]',
|
|
743
|
-
name: toolMsg.name,
|
|
744
|
-
tool_call_id: toolMsg.tool_call_id,
|
|
745
|
-
status: toolMsg.status as 'success' | 'error' | undefined,
|
|
746
|
-
});
|
|
747
|
-
}
|
|
748
|
-
return msg;
|
|
749
|
-
}
|
|
743
|
+
for (let i = 0; i < filteredMessages.length; i++) {
|
|
744
|
+
const msg = filteredMessages[i];
|
|
745
|
+
const msgType = msg.getType();
|
|
750
746
|
|
|
751
|
-
/** Compact content_tool AI message args (remove large content/old_str/new_str fields) */
|
|
752
747
|
if (msgType === 'ai') {
|
|
753
748
|
const aiMsg = msg as AIMessage | AIMessageChunk;
|
|
754
749
|
const toolCalls = aiMsg.tool_calls;
|
|
755
|
-
if (!toolCalls || toolCalls.length === 0) return msg;
|
|
756
|
-
|
|
757
|
-
const hasLargeContentToolArgs = toolCalls.some(
|
|
758
|
-
(tc) =>
|
|
759
|
-
tc.name === 'content_tool' &&
|
|
760
|
-
typeof tc.args === 'object' &&
|
|
761
|
-
tc.args != null &&
|
|
762
|
-
(typeof (tc.args as Record<string, unknown>).content === 'string' &&
|
|
763
|
-
((tc.args as Record<string, unknown>).content as string).length > 200)
|
|
764
|
-
);
|
|
765
750
|
|
|
766
|
-
if (
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
751
|
+
if (toolCalls && toolCalls.length > 0) {
|
|
752
|
+
/** Extract text content from the AIMessage */
|
|
753
|
+
const textContent =
|
|
754
|
+
typeof aiMsg.content === 'string'
|
|
755
|
+
? aiMsg.content
|
|
756
|
+
: Array.isArray(aiMsg.content)
|
|
757
|
+
? aiMsg.content
|
|
758
|
+
.filter(
|
|
759
|
+
(b): b is { type: string; text: string } =>
|
|
760
|
+
typeof b === 'object' &&
|
|
761
|
+
b.type === 'text' &&
|
|
762
|
+
'text' in b
|
|
763
|
+
)
|
|
764
|
+
.map((b) => b.text)
|
|
765
|
+
.join('\n')
|
|
766
|
+
: '';
|
|
767
|
+
|
|
768
|
+
/** Collect tool_call_ids so we can match following ToolMessages */
|
|
769
|
+
const callIds = new Set(toolCalls.map((tc) => tc.id).filter(Boolean));
|
|
770
|
+
|
|
771
|
+
/** Build summary of what tools were called */
|
|
772
|
+
const callSummaries = toolCalls.map((tc) => `[Called "${tc.name}"]`);
|
|
773
|
+
|
|
774
|
+
/** Consume following ToolMessages that belong to this AI message */
|
|
775
|
+
const resultSummaries: string[] = [];
|
|
776
|
+
while (i + 1 < filteredMessages.length) {
|
|
777
|
+
const next = filteredMessages[i + 1];
|
|
778
|
+
if (next.getType() !== 'tool') break;
|
|
779
|
+
|
|
780
|
+
const toolMsg = next as ToolMessage;
|
|
781
|
+
if (!callIds.has(toolMsg.tool_call_id)) break;
|
|
782
|
+
|
|
783
|
+
/** Extract and summarize the tool result */
|
|
784
|
+
const rawContent =
|
|
785
|
+
typeof toolMsg.content === 'string'
|
|
786
|
+
? toolMsg.content
|
|
787
|
+
: Array.isArray(toolMsg.content)
|
|
788
|
+
? toolMsg.content
|
|
789
|
+
.filter(
|
|
790
|
+
(b): b is { type: string; text: string } =>
|
|
791
|
+
typeof b === 'object' &&
|
|
792
|
+
'text' in b &&
|
|
793
|
+
typeof (b as Record<string, unknown>).text ===
|
|
794
|
+
'string'
|
|
795
|
+
)
|
|
796
|
+
.map((b) => b.text)
|
|
797
|
+
.join('\n')
|
|
798
|
+
: JSON.stringify(toolMsg.content);
|
|
799
|
+
|
|
800
|
+
const summary =
|
|
801
|
+
rawContent.length > 500
|
|
802
|
+
? rawContent.split('\n')[0] + ' [truncated for handoff]'
|
|
803
|
+
: rawContent;
|
|
804
|
+
|
|
805
|
+
resultSummaries.push(
|
|
806
|
+
`[Tool "${toolMsg.name}" returned: ${summary}]`
|
|
807
|
+
);
|
|
808
|
+
i++; // Skip this ToolMessage in the outer loop
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
/** Merge everything into a single AIMessage */
|
|
812
|
+
const parts = [
|
|
813
|
+
textContent,
|
|
814
|
+
...callSummaries,
|
|
815
|
+
...resultSummaries,
|
|
816
|
+
].filter(Boolean);
|
|
817
|
+
|
|
818
|
+
/** Bedrock rejects messages with trailing whitespace */
|
|
819
|
+
const mergedContent = (
|
|
820
|
+
parts.join('\n') || '[Agent processed tools]'
|
|
821
|
+
).trimEnd();
|
|
822
|
+
compactedMessages.push(
|
|
823
|
+
new AIMessage({
|
|
824
|
+
content: mergedContent,
|
|
825
|
+
id: aiMsg.id,
|
|
826
|
+
})
|
|
827
|
+
);
|
|
828
|
+
continue;
|
|
786
829
|
}
|
|
787
830
|
}
|
|
788
831
|
|
|
789
|
-
|
|
790
|
-
|
|
832
|
+
/** Skip orphaned ToolMessages (their AI parent was already handled above,
|
|
833
|
+
* or they belong to a transfer that was already filtered out) */
|
|
834
|
+
if (msgType === 'tool') {
|
|
835
|
+
continue;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/** Trim trailing whitespace on AI messages to prevent Bedrock validation errors */
|
|
839
|
+
if (
|
|
840
|
+
msgType === 'ai' &&
|
|
841
|
+
typeof msg.content === 'string' &&
|
|
842
|
+
msg.content !== msg.content.trimEnd()
|
|
843
|
+
) {
|
|
844
|
+
compactedMessages.push(
|
|
845
|
+
new AIMessage({ content: msg.content.trimEnd(), id: msg.id })
|
|
846
|
+
);
|
|
847
|
+
continue;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
compactedMessages.push(msg);
|
|
851
|
+
}
|
|
791
852
|
|
|
792
853
|
return {
|
|
793
854
|
filteredMessages: compactedMessages,
|
|
@@ -866,8 +927,12 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
866
927
|
|
|
867
928
|
/** Wrapper function that handles agentMessages channel, handoff reception, and conditional routing */
|
|
868
929
|
const agentWrapper = async (
|
|
869
|
-
state: t.MultiAgentGraphState
|
|
930
|
+
state: t.MultiAgentGraphState,
|
|
931
|
+
config?: LangGraphRunnableConfig
|
|
870
932
|
): Promise<t.MultiAgentGraphState | Command> => {
|
|
933
|
+
console.debug(
|
|
934
|
+
`[MultiAgentGraph] Agent "${agentId}" wrapper ENTRY (messages: ${state.messages.length}, needsCommandRouting: ${needsCommandRouting})`
|
|
935
|
+
);
|
|
871
936
|
let result: t.MultiAgentGraphState;
|
|
872
937
|
|
|
873
938
|
/**
|
|
@@ -888,6 +953,9 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
888
953
|
sourceAgentName,
|
|
889
954
|
parallelSiblings,
|
|
890
955
|
} = handoffContext;
|
|
956
|
+
console.debug(
|
|
957
|
+
`[MultiAgentGraph] Agent "${agentId}" receiving handoff from "${sourceAgentName}" (instructions: ${instructions != null}, parallelSiblings: ${parallelSiblings.length})`
|
|
958
|
+
);
|
|
891
959
|
|
|
892
960
|
/**
|
|
893
961
|
* Set handoff context on the receiving agent.
|
|
@@ -905,13 +973,39 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
905
973
|
/** Build messages for the receiving agent */
|
|
906
974
|
let messagesForAgent = filteredMessages;
|
|
907
975
|
|
|
908
|
-
/**
|
|
976
|
+
/**
|
|
977
|
+
* If there are instructions, inject them as a HumanMessage to
|
|
978
|
+
* ground the receiving agent.
|
|
979
|
+
*
|
|
980
|
+
* When the last filtered message is a ToolMessage (e.g. from a
|
|
981
|
+
* non-handoff tool the router called before handing off), a
|
|
982
|
+
* synthetic AIMessage is inserted first to satisfy the
|
|
983
|
+
* tool → assistant role ordering required by chat APIs. Without
|
|
984
|
+
* this bridge, appending a HumanMessage directly after a
|
|
985
|
+
* ToolMessage causes "400 Unexpected role 'user' after role
|
|
986
|
+
* 'tool'" errors (see issue #54).
|
|
987
|
+
*/
|
|
909
988
|
const hasInstructions = instructions !== null && instructions !== '';
|
|
910
989
|
if (hasInstructions) {
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
990
|
+
const lastMsg =
|
|
991
|
+
filteredMessages.length > 0
|
|
992
|
+
? filteredMessages[filteredMessages.length - 1]
|
|
993
|
+
: null;
|
|
994
|
+
|
|
995
|
+
if (lastMsg != null && lastMsg.getType() === 'tool') {
|
|
996
|
+
messagesForAgent = [
|
|
997
|
+
...filteredMessages,
|
|
998
|
+
new AIMessage(
|
|
999
|
+
`[Processed tool result and transferring to ${agentId}]`
|
|
1000
|
+
),
|
|
1001
|
+
new HumanMessage(instructions),
|
|
1002
|
+
];
|
|
1003
|
+
} else {
|
|
1004
|
+
messagesForAgent = [
|
|
1005
|
+
...filteredMessages,
|
|
1006
|
+
new HumanMessage(instructions),
|
|
1007
|
+
];
|
|
1008
|
+
}
|
|
915
1009
|
}
|
|
916
1010
|
|
|
917
1011
|
/** Update token map if we have a token counter */
|
|
@@ -927,10 +1021,14 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
927
1021
|
freshTokenMap[i] = tokenCount;
|
|
928
1022
|
}
|
|
929
1023
|
}
|
|
930
|
-
/** Add tokens for the instructions
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
1024
|
+
/** Add tokens for the bridge AIMessage + instructions HumanMessage */
|
|
1025
|
+
for (
|
|
1026
|
+
let i = filteredMessages.length;
|
|
1027
|
+
i < messagesForAgent.length;
|
|
1028
|
+
i++
|
|
1029
|
+
) {
|
|
1030
|
+
freshTokenMap[i] = agentContext.tokenCounter(messagesForAgent[i]);
|
|
1031
|
+
}
|
|
934
1032
|
agentContext.updateTokenMapWithInstructions(freshTokenMap);
|
|
935
1033
|
}
|
|
936
1034
|
|
|
@@ -938,7 +1036,7 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
938
1036
|
...state,
|
|
939
1037
|
messages: messagesForAgent,
|
|
940
1038
|
};
|
|
941
|
-
result = await agentSubgraph.invoke(transformedState);
|
|
1039
|
+
result = await agentSubgraph.invoke(transformedState, config);
|
|
942
1040
|
result = {
|
|
943
1041
|
...result,
|
|
944
1042
|
agentMessages: [],
|
|
@@ -984,19 +1082,23 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
984
1082
|
...state,
|
|
985
1083
|
messages: state.agentMessages,
|
|
986
1084
|
};
|
|
987
|
-
result = await agentSubgraph.invoke(transformedState);
|
|
1085
|
+
result = await agentSubgraph.invoke(transformedState, config);
|
|
988
1086
|
result = {
|
|
989
1087
|
...result,
|
|
990
1088
|
/** Clear agentMessages for next agent */
|
|
991
1089
|
agentMessages: [],
|
|
992
1090
|
};
|
|
993
1091
|
} else {
|
|
994
|
-
result = await agentSubgraph.invoke(state);
|
|
1092
|
+
result = await agentSubgraph.invoke(state, config);
|
|
995
1093
|
}
|
|
996
1094
|
|
|
997
1095
|
/** Track the last agent that produced output for continuation support */
|
|
998
1096
|
this.lastActiveAgentId = agentId;
|
|
999
1097
|
|
|
1098
|
+
console.debug(
|
|
1099
|
+
`[MultiAgentGraph] Agent "${agentId}" wrapper EXIT (result messages: ${result.messages.length})`
|
|
1100
|
+
);
|
|
1101
|
+
|
|
1000
1102
|
/** If agent has both handoff and direct edges, use Command for exclusive routing */
|
|
1001
1103
|
if (needsCommandRouting) {
|
|
1002
1104
|
/** Check if a handoff occurred */
|
|
@@ -1014,12 +1116,129 @@ export class MultiAgentGraph extends StandardGraph {
|
|
|
1014
1116
|
Constants.LC_TRANSFER_TO_,
|
|
1015
1117
|
''
|
|
1016
1118
|
);
|
|
1119
|
+
console.debug(
|
|
1120
|
+
`[MultiAgentGraph] Command routing: "${agentId}" -> handoff to "${handoffDest}" (direct edges skipped: [${Array.from(directDestinations).join(', ')}])`
|
|
1121
|
+
);
|
|
1122
|
+
|
|
1123
|
+
/** Validate destination agent exists */
|
|
1124
|
+
if (!this.agentContexts.has(handoffDest)) {
|
|
1125
|
+
const availableAgents = Array.from(
|
|
1126
|
+
this.agentContexts.keys()
|
|
1127
|
+
).join(', ');
|
|
1128
|
+
console.error(
|
|
1129
|
+
`[MultiAgentGraph] Handoff to non-existent agent "${handoffDest}". Available: ${availableAgents}`
|
|
1130
|
+
);
|
|
1131
|
+
/** Return error to model so it can self-correct */
|
|
1132
|
+
const errorMsg = new ToolMessage({
|
|
1133
|
+
content: `Transfer failed: agent "${handoffDest}" does not exist. Available agents: ${availableAgents}. Please choose a valid agent to transfer to.`,
|
|
1134
|
+
tool_call_id: (lastMessage as ToolMessage).tool_call_id,
|
|
1135
|
+
name: lastMessage.name,
|
|
1136
|
+
});
|
|
1137
|
+
(errorMsg as ToolMessage).status = 'error';
|
|
1138
|
+
return {
|
|
1139
|
+
messages: [...result.messages, errorMsg],
|
|
1140
|
+
};
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
/** Pre-handoff context compaction: if receiving agent has smaller budget */
|
|
1144
|
+
const receiverContext = this.agentContexts.get(handoffDest);
|
|
1145
|
+
const senderContext = this.agentContexts.get(agentId);
|
|
1146
|
+
if (
|
|
1147
|
+
receiverContext?.maxContextTokens != null &&
|
|
1148
|
+
senderContext?.tokenCounter != null &&
|
|
1149
|
+
receiverContext.maxContextTokens > 0
|
|
1150
|
+
) {
|
|
1151
|
+
let currentSize = 0;
|
|
1152
|
+
for (const msg of result.messages) {
|
|
1153
|
+
currentSize += senderContext.tokenCounter(msg);
|
|
1154
|
+
}
|
|
1155
|
+
const receiverBudget = receiverContext.maxContextTokens;
|
|
1156
|
+
|
|
1157
|
+
if (currentSize > receiverBudget * 0.7) {
|
|
1158
|
+
console.warn(
|
|
1159
|
+
`[MultiAgentGraph] Pre-handoff compaction: context (${currentSize} tokens) exceeds ` +
|
|
1160
|
+
`70% of receiver "${handoffDest}" budget (${receiverBudget} tokens)`
|
|
1161
|
+
);
|
|
1162
|
+
|
|
1163
|
+
/** Generate handoff briefing */
|
|
1164
|
+
const senderName = senderContext.name ?? agentId;
|
|
1165
|
+
if (senderContext.summarizeCallback) {
|
|
1166
|
+
try {
|
|
1167
|
+
const briefingResult = await summarize(
|
|
1168
|
+
result.messages,
|
|
1169
|
+
async (prompt, _maxTokens) =>
|
|
1170
|
+
senderContext.summarizeCallback!([
|
|
1171
|
+
new HumanMessage(prompt),
|
|
1172
|
+
]),
|
|
1173
|
+
{
|
|
1174
|
+
tokenCounter: senderContext.tokenCounter,
|
|
1175
|
+
summaryBudget: Math.floor(receiverBudget * 0.2),
|
|
1176
|
+
isMultiAgent: true,
|
|
1177
|
+
agentWorkflowState: {
|
|
1178
|
+
currentAgentId: handoffDest,
|
|
1179
|
+
agentChain: [agentId, handoffDest],
|
|
1180
|
+
pendingAgents: [],
|
|
1181
|
+
},
|
|
1182
|
+
}
|
|
1183
|
+
);
|
|
1184
|
+
|
|
1185
|
+
const briefingMsg = new SystemMessage(
|
|
1186
|
+
`[Handoff Briefing from "${senderName}"]\n${briefingResult.summary}`
|
|
1187
|
+
);
|
|
1188
|
+
|
|
1189
|
+
/** Replace messages with briefing + last 3 messages */
|
|
1190
|
+
const keepCount = Math.min(3, result.messages.length);
|
|
1191
|
+
result = {
|
|
1192
|
+
...result,
|
|
1193
|
+
messages: [
|
|
1194
|
+
briefingMsg,
|
|
1195
|
+
...result.messages.slice(
|
|
1196
|
+
result.messages.length - keepCount
|
|
1197
|
+
),
|
|
1198
|
+
],
|
|
1199
|
+
};
|
|
1200
|
+
|
|
1201
|
+
console.info(
|
|
1202
|
+
`[MultiAgentGraph] Pre-handoff compaction complete: ${currentSize} tokens → briefing + ${keepCount} messages`
|
|
1203
|
+
);
|
|
1204
|
+
} catch (compactErr) {
|
|
1205
|
+
console.error(
|
|
1206
|
+
'[MultiAgentGraph] Pre-handoff compaction failed:',
|
|
1207
|
+
compactErr
|
|
1208
|
+
);
|
|
1209
|
+
/** Continue without compaction — let receiver handle the overflow */
|
|
1210
|
+
}
|
|
1211
|
+
} else {
|
|
1212
|
+
/** No summary callback — use emergency summary */
|
|
1213
|
+
const emergencySummary = createEmergencySummary(
|
|
1214
|
+
result.messages
|
|
1215
|
+
);
|
|
1216
|
+
const briefingMsg = new SystemMessage(
|
|
1217
|
+
`[Handoff Briefing from "${senderName}" — Emergency]\n${emergencySummary}`
|
|
1218
|
+
);
|
|
1219
|
+
const keepCount = Math.min(3, result.messages.length);
|
|
1220
|
+
result = {
|
|
1221
|
+
...result,
|
|
1222
|
+
messages: [
|
|
1223
|
+
briefingMsg,
|
|
1224
|
+
...result.messages.slice(
|
|
1225
|
+
result.messages.length - keepCount
|
|
1226
|
+
),
|
|
1227
|
+
],
|
|
1228
|
+
};
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1017
1233
|
return new Command({
|
|
1018
1234
|
update: result,
|
|
1019
1235
|
goto: handoffDest,
|
|
1020
1236
|
});
|
|
1021
1237
|
} else {
|
|
1022
1238
|
/** No handoff - proceed with direct edges */
|
|
1239
|
+
console.debug(
|
|
1240
|
+
`[MultiAgentGraph] Command routing: "${agentId}" -> no handoff, following direct edges: [${Array.from(directDestinations).join(', ')}]`
|
|
1241
|
+
);
|
|
1023
1242
|
const directDests = Array.from(directDestinations);
|
|
1024
1243
|
if (directDests.length === 1) {
|
|
1025
1244
|
return new Command({
|