@illuma-ai/agents 1.0.90 → 1.0.94
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 +60 -5
- 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 +60 -5
- 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 +28 -4
- 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 +82 -5
- 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__/CodeExecutor.test.ts +76 -0
- 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
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
// src/tools/handlers.ts
|
|
3
|
+
import { nanoid } from 'nanoid';
|
|
4
|
+
import { ToolMessage } from '@langchain/core/messages';
|
|
5
|
+
import { ToolCallTypes, GraphEvents, StepTypes, Providers, Constants, } from '@/common';
|
|
6
|
+
import { coerceAnthropicSearchResults, isAnthropicWebSearchResult, } from '@/tools/search/anthropic';
|
|
7
|
+
import { formatResultsForLLM } from '@/tools/search/format';
|
|
8
|
+
import { getMessageId } from '@/messages';
|
|
9
|
+
export async function handleToolCallChunks({ graph, stepKey, toolCallChunks, metadata, }) {
|
|
10
|
+
let prevStepId;
|
|
11
|
+
let prevRunStep;
|
|
12
|
+
try {
|
|
13
|
+
prevStepId = graph.getStepIdByKey(stepKey);
|
|
14
|
+
prevRunStep = graph.getRunStep(prevStepId);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
/** Edge Case: If no previous step exists, create a new message creation step */
|
|
18
|
+
const message_id = getMessageId(stepKey, graph, true) ?? '';
|
|
19
|
+
prevStepId = await graph.dispatchRunStep(stepKey, {
|
|
20
|
+
type: StepTypes.MESSAGE_CREATION,
|
|
21
|
+
message_creation: {
|
|
22
|
+
message_id,
|
|
23
|
+
},
|
|
24
|
+
}, metadata);
|
|
25
|
+
prevRunStep = graph.getRunStep(prevStepId);
|
|
26
|
+
}
|
|
27
|
+
const _stepId = graph.getStepIdByKey(stepKey);
|
|
28
|
+
/** Edge Case: Tool Call Run Step or `tool_call_ids` never dispatched */
|
|
29
|
+
const tool_calls = prevStepId && prevRunStep && prevRunStep.type === StepTypes.MESSAGE_CREATION
|
|
30
|
+
? []
|
|
31
|
+
: undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Feed streaming tool call buffer — accumulate raw arg strings for truncation recovery.
|
|
34
|
+
*
|
|
35
|
+
* Provider chunk patterns:
|
|
36
|
+
* - OpenAI/Anthropic: every chunk has {id, args} → direct append
|
|
37
|
+
* - Bedrock: START chunk has {id, name, index}, DELTA chunks have {args, index} (no id)
|
|
38
|
+
* → use index-to-id mapping to resolve the target buffer entry
|
|
39
|
+
*/
|
|
40
|
+
for (const toolCallChunk of toolCallChunks) {
|
|
41
|
+
const chunkIndex = toolCallChunk.index;
|
|
42
|
+
// START chunk: has id (and usually name). Store index→id mapping for future DELTA chunks.
|
|
43
|
+
if (toolCallChunk.id) {
|
|
44
|
+
if (typeof chunkIndex === 'number') {
|
|
45
|
+
graph.streamingToolCallBuffer.setIndexMapping(chunkIndex, toolCallChunk.id);
|
|
46
|
+
}
|
|
47
|
+
if (toolCallChunk.name) {
|
|
48
|
+
graph.streamingToolCallBuffer.setToolName(toolCallChunk.id, toolCallChunk.name);
|
|
49
|
+
}
|
|
50
|
+
// Append args if present on the same chunk (OpenAI/Anthropic pattern)
|
|
51
|
+
if (toolCallChunk.args) {
|
|
52
|
+
graph.streamingToolCallBuffer.append(toolCallChunk.id, toolCallChunk.args);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (toolCallChunk.args && typeof chunkIndex === 'number') {
|
|
56
|
+
// DELTA chunk: no id, but has args + index. Resolve id via index mapping (Bedrock pattern).
|
|
57
|
+
const resolvedId = graph.streamingToolCallBuffer.getIdByIndex(chunkIndex);
|
|
58
|
+
if (resolvedId) {
|
|
59
|
+
graph.streamingToolCallBuffer.append(resolvedId, toolCallChunk.args);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Edge Case: `id` and `name` fields cannot be empty strings */
|
|
64
|
+
for (const toolCallChunk of toolCallChunks) {
|
|
65
|
+
if (toolCallChunk.name === '') {
|
|
66
|
+
toolCallChunk.name = undefined;
|
|
67
|
+
}
|
|
68
|
+
if (toolCallChunk.id === '') {
|
|
69
|
+
toolCallChunk.id = undefined;
|
|
70
|
+
}
|
|
71
|
+
else if (tool_calls != null &&
|
|
72
|
+
toolCallChunk.id != null &&
|
|
73
|
+
toolCallChunk.name != null) {
|
|
74
|
+
tool_calls.push({
|
|
75
|
+
args: {},
|
|
76
|
+
id: toolCallChunk.id,
|
|
77
|
+
name: toolCallChunk.name,
|
|
78
|
+
type: ToolCallTypes.TOOL_CALL,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
let stepId = _stepId;
|
|
83
|
+
const alreadyDispatched = prevRunStep?.type === StepTypes.MESSAGE_CREATION &&
|
|
84
|
+
graph.messageStepHasToolCalls.has(prevStepId);
|
|
85
|
+
if (prevRunStep?.type === StepTypes.TOOL_CALLS) {
|
|
86
|
+
/**
|
|
87
|
+
* If previous step is already a tool_calls step, use that step ID
|
|
88
|
+
* This ensures tool call deltas are dispatched to the correct step
|
|
89
|
+
*/
|
|
90
|
+
stepId = prevStepId;
|
|
91
|
+
}
|
|
92
|
+
else if (!alreadyDispatched &&
|
|
93
|
+
prevRunStep?.type === StepTypes.MESSAGE_CREATION) {
|
|
94
|
+
/**
|
|
95
|
+
* Create tool_calls step as soon as we receive the first tool call chunk
|
|
96
|
+
* This ensures deltas are always associated with the correct step
|
|
97
|
+
*
|
|
98
|
+
* NOTE: We do NOT dispatch an empty text block here because:
|
|
99
|
+
* - Empty text blocks cause providers (Anthropic, Bedrock) to reject messages
|
|
100
|
+
* - The tool_calls themselves are sufficient for the step
|
|
101
|
+
* - Empty content with tool_call_ids gets stored in conversation history
|
|
102
|
+
* and causes "messages must have non-empty content" errors on replay
|
|
103
|
+
*/
|
|
104
|
+
graph.messageStepHasToolCalls.set(prevStepId, true);
|
|
105
|
+
stepId = await graph.dispatchRunStep(stepKey, {
|
|
106
|
+
type: StepTypes.TOOL_CALLS,
|
|
107
|
+
tool_calls: tool_calls ?? [],
|
|
108
|
+
}, metadata);
|
|
109
|
+
}
|
|
110
|
+
await graph.dispatchRunStepDelta(stepId, {
|
|
111
|
+
type: StepTypes.TOOL_CALLS,
|
|
112
|
+
tool_calls: toolCallChunks,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
export const handleToolCalls = async (toolCalls, metadata, graph) => {
|
|
116
|
+
if (!graph || !metadata) {
|
|
117
|
+
console.warn('Graph or metadata not found in `handleToolCalls`');
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (!toolCalls) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (toolCalls.length === 0) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const stepKey = graph.getStepKey(metadata);
|
|
127
|
+
/**
|
|
128
|
+
* Track whether we've already reused an empty TOOL_CALLS step created by
|
|
129
|
+
* handleToolCallChunks during streaming. Only reuse it once (for the first
|
|
130
|
+
* tool call); subsequent parallel tool calls must create their own steps.
|
|
131
|
+
*/
|
|
132
|
+
let reusedChunkStepId;
|
|
133
|
+
for (const tool_call of toolCalls) {
|
|
134
|
+
const toolCallId = tool_call.id ?? `toolu_${nanoid()}`;
|
|
135
|
+
tool_call.id = toolCallId;
|
|
136
|
+
// If this tool call ID was already tracked via handleToolCallChunks,
|
|
137
|
+
// the step exists but may lack the name (Bedrock sends name only at model end).
|
|
138
|
+
// Dispatch a delta with the complete data so the client can fill in the name.
|
|
139
|
+
if (toolCallId && graph.toolCallStepIds.has(toolCallId)) {
|
|
140
|
+
const existingStepId = graph.toolCallStepIds.get(toolCallId);
|
|
141
|
+
if (existingStepId != null && existingStepId !== '') {
|
|
142
|
+
const argsStr = typeof tool_call.args === 'string'
|
|
143
|
+
? tool_call.args
|
|
144
|
+
: JSON.stringify(tool_call.args);
|
|
145
|
+
await graph.dispatchRunStepDelta(existingStepId, {
|
|
146
|
+
type: StepTypes.TOOL_CALLS,
|
|
147
|
+
tool_calls: [{ name: tool_call.name, args: argsStr, id: toolCallId }],
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
let prevStepId = '';
|
|
153
|
+
let prevRunStep;
|
|
154
|
+
try {
|
|
155
|
+
prevStepId = graph.getStepIdByKey(stepKey);
|
|
156
|
+
prevRunStep = graph.getRunStep(prevStepId);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// no previous step
|
|
160
|
+
}
|
|
161
|
+
// If the previous step is TOOL_CALLS (created by handleToolCallChunks),
|
|
162
|
+
// either reuse it (if empty) or dispatch a new TOOL_CALLS step directly —
|
|
163
|
+
// skip the intermediate MESSAGE_CREATION to avoid orphaned gaps.
|
|
164
|
+
if (prevRunStep?.type === StepTypes.TOOL_CALLS) {
|
|
165
|
+
const details = prevRunStep.stepDetails;
|
|
166
|
+
const isEmpty = !details.tool_calls || details.tool_calls.length === 0;
|
|
167
|
+
if (isEmpty && prevStepId !== reusedChunkStepId) {
|
|
168
|
+
graph.toolCallStepIds.set(toolCallId, prevStepId);
|
|
169
|
+
reusedChunkStepId = prevStepId;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
await graph.dispatchRunStep(stepKey, { type: StepTypes.TOOL_CALLS, tool_calls: [tool_call] }, metadata);
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* NOTE: We do NOT dispatch empty text blocks with tool_call_ids because:
|
|
177
|
+
* - Empty text blocks cause providers (Anthropic, Bedrock) to reject messages
|
|
178
|
+
* - They get stored in conversation history and cause errors on replay:
|
|
179
|
+
* "messages must have non-empty content" (Anthropic)
|
|
180
|
+
* "The content field in the Message object is empty" (Bedrock)
|
|
181
|
+
* - The tool_calls themselves are sufficient
|
|
182
|
+
*/
|
|
183
|
+
/* If the previous step exists and is a message creation */
|
|
184
|
+
if (prevStepId && prevRunStep) {
|
|
185
|
+
graph.messageStepHasToolCalls.set(prevStepId, true);
|
|
186
|
+
/* If the previous step doesn't exist */
|
|
187
|
+
}
|
|
188
|
+
else if (!prevRunStep) {
|
|
189
|
+
const messageId = getMessageId(stepKey, graph, true) ?? '';
|
|
190
|
+
const stepId = await graph.dispatchRunStep(stepKey, {
|
|
191
|
+
type: StepTypes.MESSAGE_CREATION,
|
|
192
|
+
message_creation: {
|
|
193
|
+
message_id: messageId,
|
|
194
|
+
},
|
|
195
|
+
}, metadata);
|
|
196
|
+
graph.messageStepHasToolCalls.set(stepId, true);
|
|
197
|
+
}
|
|
198
|
+
await graph.dispatchRunStep(stepKey, {
|
|
199
|
+
type: StepTypes.TOOL_CALLS,
|
|
200
|
+
tool_calls: [tool_call],
|
|
201
|
+
}, metadata);
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
export const toolResultTypes = new Set([
|
|
205
|
+
// 'tool_use',
|
|
206
|
+
// 'server_tool_use',
|
|
207
|
+
// 'input_json_delta',
|
|
208
|
+
'tool_result',
|
|
209
|
+
'web_search_result',
|
|
210
|
+
'web_search_tool_result',
|
|
211
|
+
]);
|
|
212
|
+
/**
|
|
213
|
+
* Handles the result of a server tool call; in other words, a provider's built-in tool.
|
|
214
|
+
* As of 2025-07-06, only Anthropic handles server tool calls with this pattern.
|
|
215
|
+
*/
|
|
216
|
+
export async function handleServerToolResult({ graph, content, metadata, agentContext, }) {
|
|
217
|
+
let skipHandling = false;
|
|
218
|
+
if (agentContext?.provider !== Providers.ANTHROPIC) {
|
|
219
|
+
return skipHandling;
|
|
220
|
+
}
|
|
221
|
+
if (typeof content === 'string' ||
|
|
222
|
+
content == null ||
|
|
223
|
+
content.length === 0 ||
|
|
224
|
+
(content.length === 1 &&
|
|
225
|
+
content[0].tool_use_id == null)) {
|
|
226
|
+
return skipHandling;
|
|
227
|
+
}
|
|
228
|
+
for (const contentPart of content) {
|
|
229
|
+
const toolUseId = contentPart.tool_use_id;
|
|
230
|
+
if (toolUseId == null || toolUseId === '') {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const stepId = graph.toolCallStepIds.get(toolUseId);
|
|
234
|
+
if (stepId == null || stepId === '') {
|
|
235
|
+
console.warn(`Tool use ID ${toolUseId} not found in graph, cannot dispatch tool result.`);
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const runStep = graph.getRunStep(stepId);
|
|
239
|
+
if (!runStep) {
|
|
240
|
+
console.warn(`Run step for ${stepId} does not exist, cannot dispatch tool result.`);
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
else if (runStep.type !== StepTypes.TOOL_CALLS) {
|
|
244
|
+
console.warn(`Run step for ${stepId} is not a tool call step, cannot dispatch tool result.`);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
const toolCall = runStep.stepDetails.type === StepTypes.TOOL_CALLS
|
|
248
|
+
? runStep.stepDetails.tool_calls?.find((toolCall) => toolCall.id === toolUseId)
|
|
249
|
+
: undefined;
|
|
250
|
+
if (!toolCall) {
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
if (contentPart.type === 'web_search_result' ||
|
|
254
|
+
contentPart.type === 'web_search_tool_result') {
|
|
255
|
+
await handleAnthropicSearchResults({
|
|
256
|
+
contentPart: contentPart,
|
|
257
|
+
toolCall,
|
|
258
|
+
metadata,
|
|
259
|
+
graph,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
if (!skipHandling) {
|
|
263
|
+
skipHandling = true;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return skipHandling;
|
|
267
|
+
}
|
|
268
|
+
async function handleAnthropicSearchResults({ contentPart, toolCall, metadata, graph, }) {
|
|
269
|
+
if (!Array.isArray(contentPart.content)) {
|
|
270
|
+
console.warn(`Expected content to be an array, got ${typeof contentPart.content}`);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
if (!isAnthropicWebSearchResult(contentPart.content[0])) {
|
|
274
|
+
console.warn(`Expected content to be an Anthropic web search result, got ${JSON.stringify(contentPart.content)}`);
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const turn = graph.invokedToolIds?.size ?? 0;
|
|
278
|
+
const searchResultData = coerceAnthropicSearchResults({
|
|
279
|
+
turn,
|
|
280
|
+
results: contentPart.content,
|
|
281
|
+
});
|
|
282
|
+
const name = toolCall.name;
|
|
283
|
+
const input = toolCall.args ?? {};
|
|
284
|
+
const artifact = {
|
|
285
|
+
[Constants.WEB_SEARCH]: searchResultData,
|
|
286
|
+
};
|
|
287
|
+
const { output: formattedOutput } = formatResultsForLLM(turn, searchResultData);
|
|
288
|
+
const output = new ToolMessage({
|
|
289
|
+
name,
|
|
290
|
+
artifact,
|
|
291
|
+
content: formattedOutput,
|
|
292
|
+
tool_call_id: toolCall.id,
|
|
293
|
+
});
|
|
294
|
+
const toolEndData = {
|
|
295
|
+
input,
|
|
296
|
+
output,
|
|
297
|
+
};
|
|
298
|
+
await graph.handlerRegistry
|
|
299
|
+
?.getHandler(GraphEvents.TOOL_END)
|
|
300
|
+
?.handle(GraphEvents.TOOL_END, toolEndData, metadata, graph);
|
|
301
|
+
if (graph.invokedToolIds == null) {
|
|
302
|
+
graph.invokedToolIds = new Set();
|
|
303
|
+
}
|
|
304
|
+
graph.invokedToolIds.add(toolCall.id);
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["handlers.ts"],"names":[],"mappings":"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"}
|
package/src/tools/handlers.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { nanoid } from 'nanoid';
|
|
|
4
4
|
import { ToolMessage } from '@langchain/core/messages';
|
|
5
5
|
import type { AnthropicWebSearchResultBlockParam } from '@/llm/anthropic/types';
|
|
6
6
|
import type { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';
|
|
7
|
-
import type { MultiAgentGraph, StandardGraph } from '@/graphs';
|
|
7
|
+
import type { Graph, MultiAgentGraph, StandardGraph } from '@/graphs';
|
|
8
8
|
import type { AgentContext } from '@/agents/AgentContext';
|
|
9
9
|
import type * as t from '@/types';
|
|
10
10
|
import {
|
|
@@ -61,6 +61,74 @@ export async function handleToolCallChunks({
|
|
|
61
61
|
? []
|
|
62
62
|
: undefined;
|
|
63
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Feed streaming tool call buffer — accumulate raw arg strings for truncation recovery.
|
|
66
|
+
*
|
|
67
|
+
* Provider chunk patterns:
|
|
68
|
+
* - OpenAI/Anthropic: every chunk has {id, args} → direct append
|
|
69
|
+
* - Bedrock: START chunk has {id, name, index}, DELTA chunks have {args, index} (no id)
|
|
70
|
+
* → use index-to-id mapping to resolve the target buffer entry
|
|
71
|
+
*
|
|
72
|
+
* Duplicate detection: LangChain's `streamEvents` can emit the same `on_chat_model_stream`
|
|
73
|
+
* event multiple times when the model is wrapped in nested runnables. The buffer's `append()`
|
|
74
|
+
* tracks the last fragment per tool call and returns false for exact duplicates.
|
|
75
|
+
* When ALL chunks in a batch are duplicates, we skip the entire delta dispatch.
|
|
76
|
+
*/
|
|
77
|
+
let allDuplicates = true;
|
|
78
|
+
for (const toolCallChunk of toolCallChunks) {
|
|
79
|
+
const chunkIndex = toolCallChunk.index;
|
|
80
|
+
|
|
81
|
+
// START chunk: has id (and usually name). Store index→id mapping for future DELTA chunks.
|
|
82
|
+
if (toolCallChunk.id) {
|
|
83
|
+
if (typeof chunkIndex === 'number') {
|
|
84
|
+
graph.streamingToolCallBuffer.setIndexMapping(
|
|
85
|
+
chunkIndex,
|
|
86
|
+
toolCallChunk.id
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
if (toolCallChunk.name) {
|
|
90
|
+
graph.streamingToolCallBuffer.setToolName(
|
|
91
|
+
toolCallChunk.id,
|
|
92
|
+
toolCallChunk.name
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
// Append args if present on the same chunk (OpenAI/Anthropic pattern)
|
|
96
|
+
if (toolCallChunk.args) {
|
|
97
|
+
const appended = graph.streamingToolCallBuffer.append(
|
|
98
|
+
toolCallChunk.id,
|
|
99
|
+
toolCallChunk.args
|
|
100
|
+
);
|
|
101
|
+
if (appended) allDuplicates = false;
|
|
102
|
+
} else {
|
|
103
|
+
// START chunk without args is never a duplicate (it sets up id/name)
|
|
104
|
+
allDuplicates = false;
|
|
105
|
+
}
|
|
106
|
+
} else if (toolCallChunk.args && typeof chunkIndex === 'number') {
|
|
107
|
+
// DELTA chunk: no id, but has args + index. Resolve id via index mapping (Bedrock pattern).
|
|
108
|
+
const resolvedId = graph.streamingToolCallBuffer.getIdByIndex(chunkIndex);
|
|
109
|
+
if (resolvedId) {
|
|
110
|
+
const appended = graph.streamingToolCallBuffer.append(
|
|
111
|
+
resolvedId,
|
|
112
|
+
toolCallChunk.args
|
|
113
|
+
);
|
|
114
|
+
if (appended) allDuplicates = false;
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
// Chunks without args or index are not duplicates
|
|
118
|
+
allDuplicates = false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// If every chunk in this batch was an exact duplicate, skip the delta dispatch entirely.
|
|
123
|
+
// This prevents the frontend from receiving doubled fragments that corrupt accumulated args.
|
|
124
|
+
if (allDuplicates && toolCallChunks.length > 0) {
|
|
125
|
+
// TEMP DEBUG: dedup fix active — remove after E2E verification
|
|
126
|
+
console.log(
|
|
127
|
+
'[handleToolCallChunks:DEDUP] All chunks duplicate — skipping delta dispatch'
|
|
128
|
+
);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
64
132
|
/** Edge Case: `id` and `name` fields cannot be empty strings */
|
|
65
133
|
for (const toolCallChunk of toolCallChunks) {
|
|
66
134
|
if (toolCallChunk.name === '') {
|
|
@@ -117,6 +185,7 @@ export async function handleToolCallChunks({
|
|
|
117
185
|
metadata
|
|
118
186
|
);
|
|
119
187
|
}
|
|
188
|
+
|
|
120
189
|
await graph.dispatchRunStepDelta(stepId, {
|
|
121
190
|
type: StepTypes.TOOL_CALLS,
|
|
122
191
|
tool_calls: toolCallChunks,
|
|
@@ -126,10 +195,10 @@ export async function handleToolCallChunks({
|
|
|
126
195
|
export const handleToolCalls = async (
|
|
127
196
|
toolCalls?: ToolCall[],
|
|
128
197
|
metadata?: Record<string, unknown>,
|
|
129
|
-
graph?: StandardGraph | MultiAgentGraph
|
|
198
|
+
graph?: Graph | StandardGraph | MultiAgentGraph
|
|
130
199
|
): Promise<void> => {
|
|
131
200
|
if (!graph || !metadata) {
|
|
132
|
-
console.warn(
|
|
201
|
+
console.warn('Graph or metadata not found in `handleToolCalls`');
|
|
133
202
|
return;
|
|
134
203
|
}
|
|
135
204
|
|
|
@@ -143,10 +212,32 @@ export const handleToolCalls = async (
|
|
|
143
212
|
|
|
144
213
|
const stepKey = graph.getStepKey(metadata);
|
|
145
214
|
|
|
215
|
+
/**
|
|
216
|
+
* Track whether we've already reused an empty TOOL_CALLS step created by
|
|
217
|
+
* handleToolCallChunks during streaming. Only reuse it once (for the first
|
|
218
|
+
* tool call); subsequent parallel tool calls must create their own steps.
|
|
219
|
+
*/
|
|
220
|
+
let reusedChunkStepId: string | undefined;
|
|
221
|
+
|
|
146
222
|
for (const tool_call of toolCalls) {
|
|
147
223
|
const toolCallId = tool_call.id ?? `toolu_${nanoid()}`;
|
|
148
224
|
tool_call.id = toolCallId;
|
|
149
|
-
|
|
225
|
+
|
|
226
|
+
// If this tool call ID was already tracked via handleToolCallChunks,
|
|
227
|
+
// the step exists but may lack the name (Bedrock sends name only at model end).
|
|
228
|
+
// Dispatch a delta with the complete data so the client can fill in the name.
|
|
229
|
+
if (toolCallId && graph.toolCallStepIds.has(toolCallId)) {
|
|
230
|
+
const existingStepId = graph.toolCallStepIds.get(toolCallId);
|
|
231
|
+
if (existingStepId != null && existingStepId !== '') {
|
|
232
|
+
const argsStr =
|
|
233
|
+
typeof tool_call.args === 'string'
|
|
234
|
+
? tool_call.args
|
|
235
|
+
: JSON.stringify(tool_call.args);
|
|
236
|
+
await graph.dispatchRunStepDelta(existingStepId, {
|
|
237
|
+
type: StepTypes.TOOL_CALLS,
|
|
238
|
+
tool_calls: [{ name: tool_call.name, args: argsStr, id: toolCallId }],
|
|
239
|
+
});
|
|
240
|
+
}
|
|
150
241
|
continue;
|
|
151
242
|
}
|
|
152
243
|
|
|
@@ -159,6 +250,25 @@ export const handleToolCalls = async (
|
|
|
159
250
|
// no previous step
|
|
160
251
|
}
|
|
161
252
|
|
|
253
|
+
// If the previous step is TOOL_CALLS (created by handleToolCallChunks),
|
|
254
|
+
// either reuse it (if empty) or dispatch a new TOOL_CALLS step directly —
|
|
255
|
+
// skip the intermediate MESSAGE_CREATION to avoid orphaned gaps.
|
|
256
|
+
if (prevRunStep?.type === StepTypes.TOOL_CALLS) {
|
|
257
|
+
const details = prevRunStep.stepDetails as t.ToolCallsDetails;
|
|
258
|
+
const isEmpty = !details.tool_calls || details.tool_calls.length === 0;
|
|
259
|
+
if (isEmpty && prevStepId !== reusedChunkStepId) {
|
|
260
|
+
graph.toolCallStepIds.set(toolCallId, prevStepId);
|
|
261
|
+
reusedChunkStepId = prevStepId;
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
await graph.dispatchRunStep(
|
|
265
|
+
stepKey,
|
|
266
|
+
{ type: StepTypes.TOOL_CALLS, tool_calls: [tool_call] },
|
|
267
|
+
metadata
|
|
268
|
+
);
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
|
|
162
272
|
/**
|
|
163
273
|
* NOTE: We do NOT dispatch empty text blocks with tool_call_ids because:
|
|
164
274
|
* - Empty text blocks cause providers (Anthropic, Bedrock) to reject messages
|
|
@@ -169,17 +279,10 @@ export const handleToolCalls = async (
|
|
|
169
279
|
*/
|
|
170
280
|
|
|
171
281
|
/* If the previous step exists and is a message creation */
|
|
172
|
-
if (
|
|
173
|
-
prevStepId &&
|
|
174
|
-
prevRunStep &&
|
|
175
|
-
prevRunStep.type === StepTypes.MESSAGE_CREATION
|
|
176
|
-
) {
|
|
282
|
+
if (prevStepId && prevRunStep) {
|
|
177
283
|
graph.messageStepHasToolCalls.set(prevStepId, true);
|
|
178
|
-
/* If the previous step doesn't exist
|
|
179
|
-
} else if (
|
|
180
|
-
!prevRunStep ||
|
|
181
|
-
prevRunStep.type !== StepTypes.MESSAGE_CREATION
|
|
182
|
-
) {
|
|
284
|
+
/* If the previous step doesn't exist */
|
|
285
|
+
} else if (!prevRunStep) {
|
|
183
286
|
const messageId = getMessageId(stepKey, graph, true) ?? '';
|
|
184
287
|
const stepId = await graph.dispatchRunStep(
|
|
185
288
|
stepKey,
|
|
@@ -271,8 +374,8 @@ export async function handleServerToolResult({
|
|
|
271
374
|
const toolCall =
|
|
272
375
|
runStep.stepDetails.type === StepTypes.TOOL_CALLS
|
|
273
376
|
? (runStep.stepDetails.tool_calls?.find(
|
|
274
|
-
|
|
275
|
-
|
|
377
|
+
(toolCall) => toolCall.id === toolUseId
|
|
378
|
+
) as ToolCall)
|
|
276
379
|
: undefined;
|
|
277
380
|
|
|
278
381
|
if (!toolCall) {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { tool } from '@langchain/core/tools';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a schema-only tool for LLM binding in event-driven mode.
|
|
4
|
+
* These tools have valid schemas for the LLM to understand but should
|
|
5
|
+
* never be invoked directly - ToolNode handles execution via events.
|
|
6
|
+
*/
|
|
7
|
+
export function createSchemaOnlyTool(definition) {
|
|
8
|
+
const { name, description, parameters, responseFormat } = definition;
|
|
9
|
+
return tool(async () => {
|
|
10
|
+
throw new Error(`Tool "${name}" should not be invoked directly in event-driven mode. ` +
|
|
11
|
+
'ToolNode should dispatch ON_TOOL_EXECUTE events instead.');
|
|
12
|
+
}, {
|
|
13
|
+
name,
|
|
14
|
+
description: description ?? '',
|
|
15
|
+
schema: parameters ?? { type: 'object', properties: {} },
|
|
16
|
+
responseFormat: responseFormat ?? 'content_and_artifact',
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates schema-only tools for all definitions in an array.
|
|
21
|
+
*/
|
|
22
|
+
export function createSchemaOnlyTools(definitions) {
|
|
23
|
+
return definitions.map((def) => createSchemaOnlyTool(def));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgC,MAAM,uBAAuB,CAAC;AAG3E;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB;IAElB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC;IAErE,OAAO,IAAI,CACT,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,yDAAyD;YACpE,0DAA0D,CAC7D,CAAC;IACJ,CAAC,EACD;QACE,IAAI;QACJ,WAAW,EAAE,WAAW,IAAI,EAAE;QAC9B,MAAM,EAAE,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;QACxD,cAAc,EAAE,cAAc,IAAI,sBAAsB;KACzD,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAqB;IAErB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getAttribution } from './utils';
|
|
2
|
+
/**
|
|
3
|
+
* Coerces Anthropic web search results to the SearchResultData format
|
|
4
|
+
* @param results - Array of Anthropic web search results
|
|
5
|
+
* @param turn - The turn number to associate with these results
|
|
6
|
+
* @returns SearchResultData with minimal ProcessedOrganic items
|
|
7
|
+
*/
|
|
8
|
+
export function coerceAnthropicSearchResults({ results, turn = 0, }) {
|
|
9
|
+
const organic = results
|
|
10
|
+
.filter((result) => result.type === 'web_search_result')
|
|
11
|
+
.map((result, index) => ({
|
|
12
|
+
link: result.url,
|
|
13
|
+
position: index + 1,
|
|
14
|
+
title: result.title,
|
|
15
|
+
date: result.page_age ?? undefined,
|
|
16
|
+
attribution: getAttribution(result.url),
|
|
17
|
+
}));
|
|
18
|
+
return {
|
|
19
|
+
turn,
|
|
20
|
+
organic,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Helper function to check if an object is an Anthropic web search result
|
|
25
|
+
*/
|
|
26
|
+
export function isAnthropicWebSearchResult(obj) {
|
|
27
|
+
return (typeof obj === 'object' &&
|
|
28
|
+
obj !== null &&
|
|
29
|
+
'type' in obj &&
|
|
30
|
+
obj.type === 'web_search_result' &&
|
|
31
|
+
'url' in obj &&
|
|
32
|
+
typeof obj.url === 'string');
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["anthropic.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,EAC3C,OAAO,EACP,IAAI,GAAG,CAAC,GAIT;IACC,MAAM,OAAO,GAAuB,OAAO;SACxC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC;SACvD,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC,GAAG;QAChB,QAAQ,EAAE,KAAK,GAAG,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QAClC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;KACxC,CAAC,CAAC,CAAC;IAEN,OAAO;QACL,IAAI;QACJ,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAY;IAEZ,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,GAAG,CAAC,IAAI,KAAK,mBAAmB;QAChC,KAAK,IAAI,GAAG;QACZ,OAAQ,GAA+B,CAAC,GAAG,KAAK,QAAQ,CACzD,CAAC;AACJ,CAAC"}
|