@illuma-ai/agents 1.0.89 → 1.0.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/agents/AgentContext.cjs +98 -49
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/constants.cjs +25 -0
- package/dist/cjs/common/constants.cjs.map +1 -0
- package/dist/cjs/common/enum.cjs +30 -0
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/events.cjs +9 -4
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +397 -92
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +223 -92
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +30 -14
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +43 -11
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +10 -7
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +32 -0
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +129 -101
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +489 -0
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -0
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +176 -0
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -0
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +1 -1
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +59 -5
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/text.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +80 -2
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +60 -27
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +131 -108
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/content.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +3 -0
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +265 -47
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/ids.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +55 -2
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/summarize.cjs +170 -0
- package/dist/cjs/messages/summarize.cjs.map +1 -0
- package/dist/cjs/messages/tools.cjs.map +1 -1
- package/dist/cjs/run.cjs +87 -30
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/schemas/validate.cjs.map +1 -1
- package/dist/cjs/splitStream.cjs.map +1 -1
- package/dist/cjs/stream.cjs +59 -25
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/AskUser.cjs +131 -0
- package/dist/cjs/tools/AskUser.cjs.map +1 -0
- package/dist/cjs/tools/BrowserTools.cjs +11 -7
- package/dist/cjs/tools/BrowserTools.cjs.map +1 -1
- package/dist/cjs/tools/Calculator.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +46 -4
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +36 -53
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/StreamingToolCallBuffer.cjs +208 -0
- package/dist/cjs/tools/StreamingToolCallBuffer.cjs.map +1 -0
- package/dist/cjs/tools/ToolNode.cjs +333 -30
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/ToolSearch.cjs +66 -30
- package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +94 -8
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/content.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/highlights.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +1 -0
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/types/graph.cjs +1 -1
- package/dist/cjs/types/graph.cjs.map +1 -1
- package/dist/cjs/utils/contextAnalytics.cjs +23 -6
- package/dist/cjs/utils/contextAnalytics.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/graph.cjs.map +1 -1
- package/dist/cjs/utils/handlers.cjs.map +1 -1
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/misc.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs +3 -1
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/cjs/utils/schema.cjs.map +1 -1
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +33 -58
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/cjs/utils/toolCallContinuation.cjs +55 -0
- package/dist/cjs/utils/toolCallContinuation.cjs.map +1 -0
- package/dist/cjs/utils/toonFormat.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +98 -49
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/constants.mjs +22 -0
- package/dist/esm/common/constants.mjs.map +1 -0
- package/dist/esm/common/enum.mjs +31 -1
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/events.mjs +9 -4
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +393 -88
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +224 -93
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +30 -14
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +43 -11
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +10 -7
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +32 -0
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +128 -101
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +484 -0
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -0
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs +171 -0
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -0
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +1 -1
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +59 -5
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/text.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +80 -2
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/main.mjs +8 -3
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +131 -108
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/content.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +4 -1
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +267 -49
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/ids.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +56 -4
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/summarize.mjs +161 -0
- package/dist/esm/messages/summarize.mjs.map +1 -0
- package/dist/esm/messages/tools.mjs.map +1 -1
- package/dist/esm/run.mjs +88 -31
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/schemas/validate.mjs.map +1 -1
- package/dist/esm/splitStream.mjs.map +1 -1
- package/dist/esm/stream.mjs +60 -26
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/AskUser.mjs +125 -0
- package/dist/esm/tools/AskUser.mjs.map +1 -0
- package/dist/esm/tools/BrowserTools.mjs +11 -7
- package/dist/esm/tools/BrowserTools.mjs.map +1 -1
- package/dist/esm/tools/Calculator.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +46 -4
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +37 -54
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/StreamingToolCallBuffer.mjs +206 -0
- package/dist/esm/tools/StreamingToolCallBuffer.mjs.map +1 -0
- package/dist/esm/tools/ToolNode.mjs +333 -30
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/ToolSearch.mjs +66 -30
- package/dist/esm/tools/ToolSearch.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +95 -9
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/schema.mjs.map +1 -1
- package/dist/esm/tools/search/content.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/highlights.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +1 -0
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/types/graph.mjs +1 -1
- package/dist/esm/types/graph.mjs.map +1 -1
- package/dist/esm/utils/contextAnalytics.mjs +23 -6
- package/dist/esm/utils/contextAnalytics.mjs.map +1 -1
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/graph.mjs.map +1 -1
- package/dist/esm/utils/handlers.mjs.map +1 -1
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/misc.mjs.map +1 -1
- package/dist/esm/utils/run.mjs +3 -1
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/esm/utils/schema.mjs.map +1 -1
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +33 -59
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/esm/utils/toolCallContinuation.mjs +52 -0
- package/dist/esm/utils/toolCallContinuation.mjs.map +1 -0
- package/dist/esm/utils/toonFormat.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +14 -7
- package/dist/types/common/constants.d.ts +18 -0
- package/dist/types/common/enum.d.ts +28 -0
- package/dist/types/common/index.d.ts +1 -0
- package/dist/types/events.d.ts +10 -3
- package/dist/types/graphs/Graph.d.ts +37 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/llm/anthropic/index.d.ts +7 -1
- package/dist/types/llm/anthropic/types.d.ts +5 -2
- package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
- package/dist/types/llm/bedrock/index.d.ts +40 -33
- package/dist/types/llm/bedrock/utils/message_outputs.d.ts +1 -1
- package/dist/types/llm/google/index.d.ts +2 -3
- package/dist/types/llm/openrouter/index.d.ts +21 -1
- package/dist/types/llm/vertexai/index.d.ts +3 -2
- package/dist/types/messages/cache.d.ts +1 -1
- package/dist/types/messages/index.d.ts +1 -0
- package/dist/types/messages/prune.d.ts +2 -7
- package/dist/types/messages/summarize.d.ts +33 -0
- package/dist/types/run.d.ts +6 -0
- package/dist/types/tools/AskUser.d.ts +408 -0
- package/dist/types/tools/BrowserTools.d.ts +2 -2
- package/dist/types/tools/CodeExecutor.d.ts +2 -2
- package/dist/types/tools/StreamingToolCallBuffer.d.ts +106 -0
- package/dist/types/tools/ToolNode.d.ts +55 -3
- package/dist/types/tools/ToolSearch.d.ts +9 -5
- package/dist/types/tools/handlers.d.ts +2 -2
- package/dist/types/types/graph.d.ts +9 -2
- package/dist/types/types/llm.d.ts +8 -3
- package/dist/types/types/run.d.ts +2 -0
- package/dist/types/types/tools.d.ts +20 -2
- package/dist/types/utils/contextAnalytics.d.ts +5 -4
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/tokens.d.ts +6 -19
- package/dist/types/utils/toolCallContinuation.d.ts +30 -0
- package/package.json +15 -8
- package/src/agents/AgentContext.js +782 -0
- package/src/agents/AgentContext.js.map +1 -0
- package/src/agents/AgentContext.test.js +421 -0
- package/src/agents/AgentContext.test.js.map +1 -0
- package/src/agents/AgentContext.ts +132 -64
- package/src/agents/__tests__/AgentContext.test.js +678 -0
- package/src/agents/__tests__/AgentContext.test.js.map +1 -0
- package/src/agents/__tests__/AgentContext.test.ts +25 -4
- package/src/agents/__tests__/resolveStructuredOutputMode.test.js +117 -0
- package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
- package/src/common/__tests__/enum.test.ts +135 -0
- package/src/common/constants.ts +21 -0
- package/src/common/enum.js +192 -0
- package/src/common/enum.js.map +1 -0
- package/src/common/enum.ts +30 -0
- package/src/common/index.js +3 -0
- package/src/common/index.js.map +1 -0
- package/src/common/index.ts +2 -1
- package/src/events.js +166 -0
- package/src/events.js.map +1 -0
- package/src/events.ts +11 -14
- package/src/graphs/Graph.js +1857 -0
- package/src/graphs/Graph.js.map +1 -0
- package/src/graphs/Graph.ts +580 -162
- package/src/graphs/MultiAgentGraph.js +1092 -0
- package/src/graphs/MultiAgentGraph.js.map +1 -0
- package/src/graphs/MultiAgentGraph.ts +331 -112
- package/src/graphs/__tests__/adaptive-thinking.test.ts +369 -0
- package/src/graphs/__tests__/graph-direct-tool-names.test.ts +210 -0
- package/src/graphs/__tests__/multi-agent-edges.test.ts +237 -0
- package/src/graphs/__tests__/structured-output.integration.test.js +624 -0
- package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
- package/src/graphs/__tests__/structured-output.test.js +144 -0
- package/src/graphs/__tests__/structured-output.test.js.map +1 -0
- package/src/graphs/contextManagement.e2e.test.js +718 -0
- package/src/graphs/contextManagement.e2e.test.js.map +1 -0
- package/src/graphs/contextManagement.e2e.test.ts +990 -0
- package/src/graphs/contextManagement.test.js +485 -0
- package/src/graphs/contextManagement.test.js.map +1 -0
- package/src/graphs/contextManagement.test.ts +625 -0
- package/src/graphs/handoffValidation.test.js +276 -0
- package/src/graphs/handoffValidation.test.js.map +1 -0
- package/src/graphs/handoffValidation.test.ts +353 -0
- package/src/graphs/index.js +3 -0
- package/src/graphs/index.js.map +1 -0
- package/src/index.js +28 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +13 -0
- package/src/instrumentation.js +21 -0
- package/src/instrumentation.js.map +1 -0
- package/src/instrumentation.ts +38 -17
- package/src/llm/anthropic/index.js +319 -0
- package/src/llm/anthropic/index.js.map +1 -0
- package/src/llm/anthropic/index.ts +68 -15
- package/src/llm/anthropic/llm.spec.ts +402 -0
- package/src/llm/anthropic/types.js +46 -0
- package/src/llm/anthropic/types.js.map +1 -0
- package/src/llm/anthropic/types.ts +8 -2
- package/src/llm/anthropic/utils/message_inputs.js +627 -0
- package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
- package/src/llm/anthropic/utils/message_inputs.ts +16 -33
- package/src/llm/anthropic/utils/message_outputs.js +290 -0
- package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
- package/src/llm/anthropic/utils/message_outputs.ts +40 -1
- package/src/llm/anthropic/utils/output_parsers.js +89 -0
- package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
- package/src/llm/anthropic/utils/tools.js +25 -0
- package/src/llm/anthropic/utils/tools.js.map +1 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.js +392 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -0
- package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +24 -40
- package/src/llm/bedrock/index.js +303 -0
- package/src/llm/bedrock/index.js.map +1 -0
- package/src/llm/bedrock/index.ts +171 -134
- package/src/llm/bedrock/llm.spec.ts +395 -52
- package/src/llm/bedrock/types.js +2 -0
- package/src/llm/bedrock/types.js.map +1 -0
- package/src/llm/bedrock/utils/index.js +6 -0
- package/src/llm/bedrock/utils/index.js.map +1 -0
- package/src/llm/bedrock/utils/message_inputs.js +463 -0
- package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
- package/src/llm/bedrock/utils/message_inputs.ts +30 -5
- package/src/llm/bedrock/utils/message_outputs.js +269 -0
- package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
- package/src/llm/bedrock/utils/message_outputs.ts +70 -22
- package/src/llm/fake.js +92 -0
- package/src/llm/fake.js.map +1 -0
- package/src/llm/google/index.js +215 -0
- package/src/llm/google/index.js.map +1 -0
- package/src/llm/google/index.ts +2 -3
- package/src/llm/google/types.js +12 -0
- package/src/llm/google/types.js.map +1 -0
- package/src/llm/google/utils/common.js +670 -0
- package/src/llm/google/utils/common.js.map +1 -0
- package/src/llm/google/utils/tools.js +111 -0
- package/src/llm/google/utils/tools.js.map +1 -0
- package/src/llm/google/utils/zod_to_genai_parameters.js +47 -0
- package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
- package/src/llm/openai/index.js +1033 -0
- package/src/llm/openai/index.js.map +1 -0
- package/src/llm/openai/types.js +2 -0
- package/src/llm/openai/types.js.map +1 -0
- package/src/llm/openai/utils/index.js +756 -0
- package/src/llm/openai/utils/index.js.map +1 -0
- package/src/llm/openai/utils/isReasoningModel.test.js +79 -0
- package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
- package/src/llm/openrouter/index.js +261 -0
- package/src/llm/openrouter/index.js.map +1 -0
- package/src/llm/openrouter/index.ts +117 -6
- package/src/llm/openrouter/reasoning.test.js +181 -0
- package/src/llm/openrouter/reasoning.test.js.map +1 -0
- package/src/llm/openrouter/reasoning.test.ts +207 -0
- package/src/llm/providers.js +36 -0
- package/src/llm/providers.js.map +1 -0
- package/src/llm/text.js +65 -0
- package/src/llm/text.js.map +1 -0
- package/src/llm/vertexai/index.js +402 -0
- package/src/llm/vertexai/index.js.map +1 -0
- package/src/llm/vertexai/index.ts +115 -5
- package/src/llm/vertexai/llm.spec.ts +114 -0
- package/src/messages/__tests__/tools.test.js +392 -0
- package/src/messages/__tests__/tools.test.js.map +1 -0
- package/src/messages/cache.js +404 -0
- package/src/messages/cache.js.map +1 -0
- package/src/messages/cache.test.js +1167 -0
- package/src/messages/cache.test.js.map +1 -0
- package/src/messages/cache.test.ts +178 -16
- package/src/messages/cache.ts +152 -147
- package/src/messages/content.js +48 -0
- package/src/messages/content.js.map +1 -0
- package/src/messages/content.test.js +314 -0
- package/src/messages/content.test.js.map +1 -0
- package/src/messages/core.js +359 -0
- package/src/messages/core.js.map +1 -0
- package/src/messages/core.ts +5 -0
- package/src/messages/ensureThinkingBlock.test.js +997 -0
- package/src/messages/ensureThinkingBlock.test.js.map +1 -0
- package/src/messages/ensureThinkingBlock.test.ts +751 -10
- package/src/messages/format.js +973 -0
- package/src/messages/format.js.map +1 -0
- package/src/messages/format.ts +334 -57
- package/src/messages/formatAgentMessages.test.js +2278 -0
- package/src/messages/formatAgentMessages.test.js.map +1 -0
- package/src/messages/formatAgentMessages.test.ts +1175 -1
- package/src/messages/formatAgentMessages.tools.test.js +362 -0
- package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
- package/src/messages/formatMessage.test.js +608 -0
- package/src/messages/formatMessage.test.js.map +1 -0
- package/src/messages/ids.js +18 -0
- package/src/messages/ids.js.map +1 -0
- package/src/messages/index.js +9 -0
- package/src/messages/index.js.map +1 -0
- package/src/messages/index.ts +1 -0
- package/src/messages/labelContentByAgent.test.js +725 -0
- package/src/messages/labelContentByAgent.test.js.map +1 -0
- package/src/messages/prune.js +438 -0
- package/src/messages/prune.js.map +1 -0
- package/src/messages/prune.ts +87 -25
- package/src/messages/reducer.js +60 -0
- package/src/messages/reducer.js.map +1 -0
- package/src/messages/shiftIndexTokenCountMap.test.js +63 -0
- package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
- package/src/messages/summarize.js +146 -0
- package/src/messages/summarize.js.map +1 -0
- package/src/messages/summarize.test.js +332 -0
- package/src/messages/summarize.test.js.map +1 -0
- package/src/messages/summarize.test.ts +466 -0
- package/src/messages/summarize.ts +222 -0
- package/src/messages/tools.js +90 -0
- package/src/messages/tools.js.map +1 -0
- package/src/mockStream.js +81 -0
- package/src/mockStream.js.map +1 -0
- package/src/prompts/collab.js +7 -0
- package/src/prompts/collab.js.map +1 -0
- package/src/prompts/index.js +3 -0
- package/src/prompts/index.js.map +1 -0
- package/src/prompts/taskmanager.js +58 -0
- package/src/prompts/taskmanager.js.map +1 -0
- package/src/run.js +427 -0
- package/src/run.js.map +1 -0
- package/src/run.ts +101 -33
- package/src/schemas/index.js +3 -0
- package/src/schemas/index.js.map +1 -0
- package/src/schemas/schema-preparation.test.js +370 -0
- package/src/schemas/schema-preparation.test.js.map +1 -0
- package/src/schemas/validate.js +314 -0
- package/src/schemas/validate.js.map +1 -0
- package/src/schemas/validate.test.js +264 -0
- package/src/schemas/validate.test.js.map +1 -0
- package/src/scripts/abort.js +127 -0
- package/src/scripts/abort.js.map +1 -0
- package/src/scripts/ant_web_search.js +130 -0
- package/src/scripts/ant_web_search.js.map +1 -0
- package/src/scripts/ant_web_search.ts +1 -0
- package/src/scripts/ant_web_search_edge_case.js +133 -0
- package/src/scripts/ant_web_search_edge_case.js.map +1 -0
- package/src/scripts/ant_web_search_edge_case.ts +1 -0
- package/src/scripts/ant_web_search_error_edge_case.js +119 -0
- package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
- package/src/scripts/ant_web_search_error_edge_case.ts +1 -0
- package/src/scripts/args.js +41 -0
- package/src/scripts/args.js.map +1 -0
- package/src/scripts/bedrock-cache-debug.js +186 -0
- package/src/scripts/bedrock-cache-debug.js.map +1 -0
- package/src/scripts/bedrock-cache-debug.ts +250 -0
- package/src/scripts/bedrock-content-aggregation-test.js +195 -0
- package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
- package/src/scripts/bedrock-content-aggregation-test.ts +266 -0
- package/src/scripts/bedrock-merge-test.js +80 -0
- package/src/scripts/bedrock-merge-test.js.map +1 -0
- package/src/scripts/bedrock-merge-test.ts +107 -0
- package/src/scripts/bedrock-parallel-tools-test.js +150 -0
- package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
- package/src/scripts/bedrock-parallel-tools-test.ts +204 -0
- package/src/scripts/caching.js +106 -0
- package/src/scripts/caching.js.map +1 -0
- package/src/scripts/caching.ts +1 -0
- package/src/scripts/cli.js +152 -0
- package/src/scripts/cli.js.map +1 -0
- package/src/scripts/cli2.js +119 -0
- package/src/scripts/cli2.js.map +1 -0
- package/src/scripts/cli3.js +163 -0
- package/src/scripts/cli3.js.map +1 -0
- package/src/scripts/cli4.js +165 -0
- package/src/scripts/cli4.js.map +1 -0
- package/src/scripts/cli5.js +165 -0
- package/src/scripts/cli5.js.map +1 -0
- package/src/scripts/code_exec.js +171 -0
- package/src/scripts/code_exec.js.map +1 -0
- package/src/scripts/code_exec.ts +1 -0
- package/src/scripts/code_exec_files.js +180 -0
- package/src/scripts/code_exec_files.js.map +1 -0
- package/src/scripts/code_exec_files.ts +1 -0
- package/src/scripts/code_exec_multi_session.js +185 -0
- package/src/scripts/code_exec_multi_session.js.map +1 -0
- package/src/scripts/code_exec_multi_session.ts +9 -13
- package/src/scripts/code_exec_ptc.js +265 -0
- package/src/scripts/code_exec_ptc.js.map +1 -0
- package/src/scripts/code_exec_ptc.ts +1 -0
- package/src/scripts/code_exec_session.js +217 -0
- package/src/scripts/code_exec_session.js.map +1 -0
- package/src/scripts/code_exec_session.ts +1 -0
- package/src/scripts/code_exec_simple.js +120 -0
- package/src/scripts/code_exec_simple.js.map +1 -0
- package/src/scripts/code_exec_simple.ts +1 -0
- package/src/scripts/content.js +111 -0
- package/src/scripts/content.js.map +1 -0
- package/src/scripts/content.ts +1 -0
- package/src/scripts/empty_input.js +125 -0
- package/src/scripts/empty_input.js.map +1 -0
- package/src/scripts/handoff-test.js +96 -0
- package/src/scripts/handoff-test.js.map +1 -0
- package/src/scripts/image.js +138 -0
- package/src/scripts/image.js.map +1 -0
- package/src/scripts/image.ts +3 -1
- package/src/scripts/memory.js +83 -0
- package/src/scripts/memory.js.map +1 -0
- package/src/scripts/memory.ts +16 -6
- package/src/scripts/multi-agent-chain.js +271 -0
- package/src/scripts/multi-agent-chain.js.map +1 -0
- package/src/scripts/multi-agent-chain.ts +1 -0
- package/src/scripts/multi-agent-conditional.js +185 -0
- package/src/scripts/multi-agent-conditional.js.map +1 -0
- package/src/scripts/multi-agent-conditional.ts +1 -0
- package/src/scripts/multi-agent-document-review-chain.js +171 -0
- package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
- package/src/scripts/multi-agent-document-review-chain.ts +1 -0
- package/src/scripts/multi-agent-hybrid-flow.js +264 -0
- package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
- package/src/scripts/multi-agent-hybrid-flow.ts +1 -0
- package/src/scripts/multi-agent-parallel-start.js +214 -0
- package/src/scripts/multi-agent-parallel-start.js.map +1 -0
- package/src/scripts/multi-agent-parallel-start.ts +4 -4
- package/src/scripts/multi-agent-parallel.js +346 -0
- package/src/scripts/multi-agent-parallel.js.map +1 -0
- package/src/scripts/multi-agent-parallel.ts +1 -0
- package/src/scripts/multi-agent-sequence.js +184 -0
- package/src/scripts/multi-agent-sequence.js.map +1 -0
- package/src/scripts/multi-agent-sequence.ts +4 -4
- package/src/scripts/multi-agent-supervisor.js +324 -0
- package/src/scripts/multi-agent-supervisor.js.map +1 -0
- package/src/scripts/multi-agent-supervisor.ts +1 -0
- package/src/scripts/multi-agent-test.js +147 -0
- package/src/scripts/multi-agent-test.js.map +1 -0
- package/src/scripts/multi-agent-test.ts +1 -0
- package/src/scripts/parallel-asymmetric-tools-test.js +202 -0
- package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
- package/src/scripts/parallel-asymmetric-tools-test.ts +1 -0
- package/src/scripts/parallel-full-metadata-test.js +176 -0
- package/src/scripts/parallel-full-metadata-test.js.map +1 -0
- package/src/scripts/parallel-full-metadata-test.ts +1 -0
- package/src/scripts/parallel-tools-test.js +256 -0
- package/src/scripts/parallel-tools-test.js.map +1 -0
- package/src/scripts/parallel-tools-test.ts +1 -0
- package/src/scripts/poc-multi-agent-comprehensive.ts +1222 -0
- package/src/scripts/programmatic_exec.js +277 -0
- package/src/scripts/programmatic_exec.js.map +1 -0
- package/src/scripts/programmatic_exec_agent.js +168 -0
- package/src/scripts/programmatic_exec_agent.js.map +1 -0
- package/src/scripts/programmatic_exec_agent.ts +1 -0
- package/src/scripts/search.js +118 -0
- package/src/scripts/search.js.map +1 -0
- package/src/scripts/search.ts +1 -0
- package/src/scripts/sequential-full-metadata-test.js +143 -0
- package/src/scripts/sequential-full-metadata-test.js.map +1 -0
- package/src/scripts/sequential-full-metadata-test.ts +1 -0
- package/src/scripts/simple.js +174 -0
- package/src/scripts/simple.js.map +1 -0
- package/src/scripts/simple.ts +2 -1
- package/src/scripts/single-agent-metadata-test.js +152 -0
- package/src/scripts/single-agent-metadata-test.js.map +1 -0
- package/src/scripts/single-agent-metadata-test.ts +4 -6
- package/src/scripts/stream.js +113 -0
- package/src/scripts/stream.js.map +1 -0
- package/src/scripts/stream.ts +1 -0
- package/src/scripts/test-custom-prompt-key.js +132 -0
- package/src/scripts/test-custom-prompt-key.js.map +1 -0
- package/src/scripts/test-handoff-input.js +143 -0
- package/src/scripts/test-handoff-input.js.map +1 -0
- package/src/scripts/test-handoff-preamble.js +227 -0
- package/src/scripts/test-handoff-preamble.js.map +1 -0
- package/src/scripts/test-handoff-preamble.ts +1 -0
- package/src/scripts/test-handoff-steering.js +353 -0
- package/src/scripts/test-handoff-steering.js.map +1 -0
- package/src/scripts/test-handoff-steering.ts +430 -0
- package/src/scripts/test-multi-agent-list-handoff.js +318 -0
- package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
- package/src/scripts/test-multi-agent-list-handoff.ts +1 -0
- package/src/scripts/test-parallel-agent-labeling.js +253 -0
- package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
- package/src/scripts/test-parallel-agent-labeling.ts +2 -0
- package/src/scripts/test-parallel-handoffs.js +229 -0
- package/src/scripts/test-parallel-handoffs.js.map +1 -0
- package/src/scripts/test-parallel-handoffs.ts +1 -0
- package/src/scripts/test-thinking-handoff-bedrock.js +132 -0
- package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
- package/src/scripts/test-thinking-handoff-bedrock.ts +1 -0
- package/src/scripts/test-thinking-handoff.js +132 -0
- package/src/scripts/test-thinking-handoff.js.map +1 -0
- package/src/scripts/test-thinking-handoff.ts +1 -0
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js +140 -0
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
- package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +166 -0
- package/src/scripts/test-tool-before-handoff-role-order.js +223 -0
- package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
- package/src/scripts/test-tool-before-handoff-role-order.ts +276 -0
- package/src/scripts/test-tools-before-handoff.js +187 -0
- package/src/scripts/test-tools-before-handoff.js.map +1 -0
- package/src/scripts/test-tools-before-handoff.ts +4 -8
- package/src/scripts/test_code_api.js +263 -0
- package/src/scripts/test_code_api.js.map +1 -0
- package/src/scripts/thinking-bedrock.js +128 -0
- package/src/scripts/thinking-bedrock.js.map +1 -0
- package/src/scripts/thinking-bedrock.ts +1 -0
- package/src/scripts/thinking-vertexai.js +130 -0
- package/src/scripts/thinking-vertexai.js.map +1 -0
- package/src/scripts/thinking-vertexai.ts +168 -0
- package/src/scripts/thinking.js +134 -0
- package/src/scripts/thinking.js.map +1 -0
- package/src/scripts/thinking.ts +1 -0
- package/src/scripts/tool_search.js +114 -0
- package/src/scripts/tool_search.js.map +1 -0
- package/src/scripts/tools.js +125 -0
- package/src/scripts/tools.js.map +1 -0
- package/src/scripts/tools.ts +5 -19
- package/src/specs/agent-handoffs-bedrock.integration.test.js +280 -0
- package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
- package/src/specs/agent-handoffs-bedrock.integration.test.ts +412 -375
- package/src/specs/agent-handoffs.test.js +924 -0
- package/src/specs/agent-handoffs.test.js.map +1 -0
- package/src/specs/agent-handoffs.test.ts +152 -39
- package/src/specs/anthropic.simple.test.js +287 -0
- package/src/specs/anthropic.simple.test.js.map +1 -0
- package/src/specs/anthropic.simple.test.ts +7 -4
- package/src/specs/azure.simple.test.js +381 -0
- package/src/specs/azure.simple.test.js.map +1 -0
- package/src/specs/azure.simple.test.ts +143 -5
- package/src/specs/cache.simple.test.js +282 -0
- package/src/specs/cache.simple.test.js.map +1 -0
- package/src/specs/cache.simple.test.ts +9 -2
- package/src/specs/custom-event-await.test.js +148 -0
- package/src/specs/custom-event-await.test.js.map +1 -0
- package/src/specs/custom-event-await.test.ts +215 -0
- package/src/specs/deepseek.simple.test.js +189 -0
- package/src/specs/deepseek.simple.test.js.map +1 -0
- package/src/specs/deepseek.simple.test.ts +4 -2
- package/src/specs/emergency-prune.test.js +308 -0
- package/src/specs/emergency-prune.test.js.map +1 -0
- package/src/specs/moonshot.simple.test.js +237 -0
- package/src/specs/moonshot.simple.test.js.map +1 -0
- package/src/specs/moonshot.simple.test.ts +6 -2
- package/src/specs/observability.integration.test.js +1337 -0
- package/src/specs/observability.integration.test.js.map +1 -0
- package/src/specs/observability.integration.test.ts +2223 -0
- package/src/specs/openai.simple.test.js +233 -0
- package/src/specs/openai.simple.test.js.map +1 -0
- package/src/specs/openai.simple.test.ts +4 -2
- package/src/specs/openrouter.simple.test.js +202 -0
- package/src/specs/openrouter.simple.test.js.map +1 -0
- package/src/specs/openrouter.simple.test.ts +165 -4
- package/src/specs/prune.test.js +733 -0
- package/src/specs/prune.test.js.map +1 -0
- package/src/specs/prune.test.ts +1 -0
- package/src/specs/reasoning.test.js +144 -0
- package/src/specs/reasoning.test.js.map +1 -0
- package/src/specs/reasoning.test.ts +2 -2
- package/src/specs/spec.utils.js +4 -0
- package/src/specs/spec.utils.js.map +1 -0
- package/src/specs/thinking-handoff.test.js +486 -0
- package/src/specs/thinking-handoff.test.js.map +1 -0
- package/src/specs/thinking-handoff.test.ts +3 -2
- package/src/specs/thinking-prune.test.js +600 -0
- package/src/specs/thinking-prune.test.js.map +1 -0
- package/src/specs/token-distribution-edge-case.test.js +246 -0
- package/src/specs/token-distribution-edge-case.test.js.map +1 -0
- package/src/specs/token-memoization.test.js +32 -0
- package/src/specs/token-memoization.test.js.map +1 -0
- package/src/specs/token-memoization.test.ts +14 -5
- package/src/specs/tokens.test.js +49 -0
- package/src/specs/tokens.test.js.map +1 -0
- package/src/specs/tokens.test.ts +64 -0
- package/src/specs/tool-error.test.js +139 -0
- package/src/specs/tool-error.test.js.map +1 -0
- package/src/specs/tool-error.test.ts +2 -2
- package/src/splitStream.js +204 -0
- package/src/splitStream.js.map +1 -0
- package/src/splitStream.test.js +504 -0
- package/src/splitStream.test.js.map +1 -0
- package/src/stream.js +650 -0
- package/src/stream.js.map +1 -0
- package/src/stream.test.js +225 -0
- package/src/stream.test.js.map +1 -0
- package/src/stream.test.ts +25 -15
- package/src/stream.ts +82 -32
- package/src/test/mockTools.js +340 -0
- package/src/test/mockTools.js.map +1 -0
- package/src/tools/AskUser.ts +159 -0
- package/src/tools/BrowserTools.js +245 -0
- package/src/tools/BrowserTools.js.map +1 -0
- package/src/tools/BrowserTools.ts +12 -8
- package/src/tools/Calculator.js +38 -0
- package/src/tools/Calculator.js.map +1 -0
- package/src/tools/Calculator.test.js +225 -0
- package/src/tools/Calculator.test.js.map +1 -0
- package/src/tools/CodeExecutor.js +233 -0
- package/src/tools/CodeExecutor.js.map +1 -0
- package/src/tools/CodeExecutor.selfhealing.test.ts +435 -0
- package/src/tools/CodeExecutor.ts +62 -4
- package/src/tools/ProgrammaticToolCalling.js +602 -0
- package/src/tools/ProgrammaticToolCalling.js.map +1 -0
- package/src/tools/ProgrammaticToolCalling.ts +40 -52
- package/src/tools/StreamingToolCallBuffer.js +179 -0
- package/src/tools/StreamingToolCallBuffer.js.map +1 -0
- package/src/tools/StreamingToolCallBuffer.ts +218 -0
- package/src/tools/ToolNode.js +930 -0
- package/src/tools/ToolNode.js.map +1 -0
- package/src/tools/ToolNode.ts +454 -41
- package/src/tools/ToolSearch.js +904 -0
- package/src/tools/ToolSearch.js.map +1 -0
- package/src/tools/ToolSearch.ts +84 -33
- package/src/tools/__tests__/AskUser.test.ts +537 -0
- package/src/tools/__tests__/BrowserTools.test.js +306 -0
- package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
- package/src/tools/__tests__/BrowserTools.test.ts +131 -6
- package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js +276 -0
- package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
- package/src/tools/__tests__/ProgrammaticToolCalling.test.js +807 -0
- package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
- package/src/tools/__tests__/StreamingToolCallBuffer.test.js +175 -0
- package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +1 -0
- package/src/tools/__tests__/StreamingToolCallBuffer.test.ts +263 -0
- package/src/tools/__tests__/ToolApproval.test.js +675 -0
- package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
- package/src/tools/__tests__/ToolApproval.test.ts +194 -20
- package/src/tools/__tests__/ToolNode.hitl.test.ts +267 -0
- package/src/tools/__tests__/ToolNode.recovery.test.js +200 -0
- package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
- package/src/tools/__tests__/ToolNode.recovery.test.ts +276 -0
- package/src/tools/__tests__/ToolNode.session.test.js +319 -0
- package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
- package/src/tools/__tests__/ToolNode.session.test.ts +465 -0
- package/src/tools/__tests__/ToolSearch.integration.test.js +125 -0
- package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
- package/src/tools/__tests__/ToolSearch.test.js +812 -0
- package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
- package/src/tools/__tests__/ToolSearch.test.ts +78 -5
- package/src/tools/__tests__/handlers.test.js +799 -0
- package/src/tools/__tests__/handlers.test.js.map +1 -0
- package/src/tools/__tests__/handlers.test.ts +1100 -0
- package/src/tools/__tests__/truncation-recovery.integration.test.js +362 -0
- package/src/tools/__tests__/truncation-recovery.integration.test.js.map +1 -0
- package/src/tools/__tests__/truncation-recovery.integration.test.ts +560 -0
- package/src/tools/handlers.js +306 -0
- package/src/tools/handlers.js.map +1 -0
- package/src/tools/handlers.ts +119 -16
- package/src/tools/schema.js +25 -0
- package/src/tools/schema.js.map +1 -0
- package/src/tools/search/anthropic.js +34 -0
- package/src/tools/search/anthropic.js.map +1 -0
- package/src/tools/search/content.js +116 -0
- package/src/tools/search/content.js.map +1 -0
- package/src/tools/search/content.test.js +133 -0
- package/src/tools/search/content.test.js.map +1 -0
- package/src/tools/search/firecrawl.js +173 -0
- package/src/tools/search/firecrawl.js.map +1 -0
- package/src/tools/search/format.js +198 -0
- package/src/tools/search/format.js.map +1 -0
- package/src/tools/search/highlights.js +241 -0
- package/src/tools/search/highlights.js.map +1 -0
- package/src/tools/search/index.js +3 -0
- package/src/tools/search/index.js.map +1 -0
- package/src/tools/search/jina-reranker.test.js +106 -0
- package/src/tools/search/jina-reranker.test.js.map +1 -0
- package/src/tools/search/rerankers.js +165 -0
- package/src/tools/search/rerankers.js.map +1 -0
- package/src/tools/search/schema.js +102 -0
- package/src/tools/search/schema.js.map +1 -0
- package/src/tools/search/search.js +561 -0
- package/src/tools/search/search.js.map +1 -0
- package/src/tools/search/serper-scraper.js +126 -0
- package/src/tools/search/serper-scraper.js.map +1 -0
- package/src/tools/search/test.js +129 -0
- package/src/tools/search/test.js.map +1 -0
- package/src/tools/search/tool.js +453 -0
- package/src/tools/search/tool.js.map +1 -0
- package/src/tools/search/types.js +2 -0
- package/src/tools/search/types.js.map +1 -0
- package/src/tools/search/utils.js +59 -0
- package/src/tools/search/utils.js.map +1 -0
- package/src/types/graph.js +24 -0
- package/src/types/graph.js.map +1 -0
- package/src/types/graph.test.js +192 -0
- package/src/types/graph.test.js.map +1 -0
- package/src/types/graph.ts +26 -6
- package/src/types/index.js +7 -0
- package/src/types/index.js.map +1 -0
- package/src/types/llm.js +2 -0
- package/src/types/llm.js.map +1 -0
- package/src/types/llm.ts +8 -3
- package/src/types/messages.js +2 -0
- package/src/types/messages.js.map +1 -0
- package/src/types/run.js +2 -0
- package/src/types/run.js.map +1 -0
- package/src/types/run.ts +2 -0
- package/src/types/stream.js +2 -0
- package/src/types/stream.js.map +1 -0
- package/src/types/tools.js +2 -0
- package/src/types/tools.js.map +1 -0
- package/src/types/tools.ts +21 -2
- package/src/utils/contextAnalytics.js +79 -0
- package/src/utils/contextAnalytics.js.map +1 -0
- package/src/utils/contextAnalytics.test.js +166 -0
- package/src/utils/contextAnalytics.test.js.map +1 -0
- package/src/utils/contextAnalytics.test.ts +222 -0
- package/src/utils/contextAnalytics.ts +27 -9
- package/src/utils/events.js +26 -0
- package/src/utils/events.js.map +1 -0
- package/src/utils/graph.js +11 -0
- package/src/utils/graph.js.map +1 -0
- package/src/utils/handlers.js +65 -0
- package/src/utils/handlers.js.map +1 -0
- package/src/utils/index.js +10 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/llm.js +21 -0
- package/src/utils/llm.js.map +1 -0
- package/src/utils/llmConfig.js +205 -0
- package/src/utils/llmConfig.js.map +1 -0
- package/src/utils/llmConfig.ts +5 -5
- package/src/utils/logging.js +37 -0
- package/src/utils/logging.js.map +1 -0
- package/src/utils/misc.js +51 -0
- package/src/utils/misc.js.map +1 -0
- package/src/utils/run.js +69 -0
- package/src/utils/run.js.map +1 -0
- package/src/utils/run.ts +108 -106
- package/src/utils/schema.js +21 -0
- package/src/utils/schema.js.map +1 -0
- package/src/utils/title.js +119 -0
- package/src/utils/title.js.map +1 -0
- package/src/utils/tokens.js +92 -0
- package/src/utils/tokens.js.map +1 -0
- package/src/utils/tokens.ts +118 -142
- package/src/utils/toolCallContinuation.ts +55 -0
- package/src/utils/toonFormat.js +379 -0
- package/src/utils/toonFormat.js.map +1 -0
|
@@ -7,7 +7,7 @@ require('nanoid');
|
|
|
7
7
|
require('../messages/core.cjs');
|
|
8
8
|
var toonFormat = require('../utils/toonFormat.cjs');
|
|
9
9
|
var run = require('../utils/run.cjs');
|
|
10
|
-
require('
|
|
10
|
+
require('ai-tokenizer');
|
|
11
11
|
require('zod-to-json-schema');
|
|
12
12
|
var events = require('../utils/events.cjs');
|
|
13
13
|
|
|
@@ -34,7 +34,7 @@ function extractStringContent(content) {
|
|
|
34
34
|
if (typeof block === 'string') {
|
|
35
35
|
textParts.push(block);
|
|
36
36
|
}
|
|
37
|
-
else if (block && typeof block === 'object') {
|
|
37
|
+
else if (block != null && typeof block === 'object') {
|
|
38
38
|
// Handle {type: 'text', text: '...'} format
|
|
39
39
|
const obj = block;
|
|
40
40
|
if (obj.type === 'text' && typeof obj.text === 'string') {
|
|
@@ -62,6 +62,8 @@ class ToolNode extends run.RunnableCallable {
|
|
|
62
62
|
toolCallStepIds;
|
|
63
63
|
errorHandler;
|
|
64
64
|
toolUsageCount;
|
|
65
|
+
/** Maps toolCallId → turn captured in runTool, used by handleRunToolCompletions */
|
|
66
|
+
toolCallTurns = new Map();
|
|
65
67
|
/** Tool registry for filtering (lazy computation of programmatic maps) */
|
|
66
68
|
toolRegistry;
|
|
67
69
|
/** Cached programmatic tools (computed once on first PTC call) */
|
|
@@ -70,13 +72,15 @@ class ToolNode extends run.RunnableCallable {
|
|
|
70
72
|
sessions;
|
|
71
73
|
/** When true, dispatches ON_TOOL_EXECUTE events instead of invoking tools directly */
|
|
72
74
|
eventDrivenMode = false;
|
|
73
|
-
/** Tool definitions for event-driven mode */
|
|
74
|
-
toolDefinitions;
|
|
75
75
|
/** Agent ID for event-driven mode */
|
|
76
76
|
agentId;
|
|
77
|
+
/** Tool names that bypass event dispatch and execute directly (e.g., graph-managed handoff tools) */
|
|
78
|
+
directToolNames;
|
|
77
79
|
/** HITL tool approval configuration */
|
|
78
80
|
toolApprovalConfig;
|
|
79
|
-
|
|
81
|
+
/** Buffer for recovering truncated tool call arguments from streaming data */
|
|
82
|
+
streamingToolCallBuffer;
|
|
83
|
+
constructor({ tools, toolMap, name, tags, errorHandler, toolCallStepIds, handleToolErrors, loadRuntimeTools, toolRegistry, sessions, eventDrivenMode, agentId, directToolNames, streamingToolCallBuffer, toolApprovalConfig, }) {
|
|
80
84
|
super({ name, tags, func: (input, config) => this.run(input, config) });
|
|
81
85
|
this.toolMap = toolMap ?? new Map(tools.map((tool) => [tool.name, tool]));
|
|
82
86
|
this.toolCallStepIds = toolCallStepIds;
|
|
@@ -87,8 +91,9 @@ class ToolNode extends run.RunnableCallable {
|
|
|
87
91
|
this.toolRegistry = toolRegistry;
|
|
88
92
|
this.sessions = sessions;
|
|
89
93
|
this.eventDrivenMode = eventDrivenMode ?? false;
|
|
90
|
-
this.toolDefinitions = toolDefinitions;
|
|
91
94
|
this.agentId = agentId;
|
|
95
|
+
this.directToolNames = directToolNames;
|
|
96
|
+
this.streamingToolCallBuffer = streamingToolCallBuffer;
|
|
92
97
|
this.toolApprovalConfig = toolApprovalConfig;
|
|
93
98
|
}
|
|
94
99
|
/**
|
|
@@ -130,8 +135,13 @@ class ToolNode extends run.RunnableCallable {
|
|
|
130
135
|
return false;
|
|
131
136
|
}
|
|
132
137
|
const { defaultPolicy, overrides, executionContext } = this.toolApprovalConfig;
|
|
133
|
-
// Scheduled executions bypass all approval checks
|
|
134
|
-
if (executionContext === 'scheduled') {
|
|
138
|
+
// Scheduled and browser executions bypass all approval checks
|
|
139
|
+
if (executionContext === 'scheduled' || executionContext === 'browser') {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
// Graph-managed tools (handoff/transfer tools) bypass HITL approval —
|
|
143
|
+
// these are internal routing mechanisms, not user-facing tool executions
|
|
144
|
+
if (this.directToolNames?.has(toolName)) {
|
|
135
145
|
return false;
|
|
136
146
|
}
|
|
137
147
|
// Determine the effective policy for this tool
|
|
@@ -189,8 +199,19 @@ class ToolNode extends run.RunnableCallable {
|
|
|
189
199
|
}
|
|
190
200
|
const turn = this.toolUsageCount.get(call.name) ?? 0;
|
|
191
201
|
this.toolUsageCount.set(call.name, turn + 1);
|
|
192
|
-
|
|
202
|
+
if (call.id != null && call.id !== '') {
|
|
203
|
+
this.toolCallTurns.set(call.id, turn);
|
|
204
|
+
}
|
|
205
|
+
let args = call.args;
|
|
193
206
|
const stepId = this.toolCallStepIds?.get(call.id);
|
|
207
|
+
// Recover truncated tool call arguments from the streaming buffer.
|
|
208
|
+
// When max_tokens truncates a tool call mid-JSON, parsePartialJson may lose
|
|
209
|
+
// content that was already streamed to the UI. The buffer has the raw accumulated
|
|
210
|
+
// arg string, so we can extract field values that were dropped.
|
|
211
|
+
if (call.id && this.streamingToolCallBuffer?.has(call.id)) {
|
|
212
|
+
args = this.recoverTruncatedArgs(call.name, call.id, args);
|
|
213
|
+
this.streamingToolCallBuffer.clear(call.id);
|
|
214
|
+
}
|
|
194
215
|
// Build invoke params - LangChain extracts non-schema fields to config.toolCall
|
|
195
216
|
let invokeParams = {
|
|
196
217
|
...call,
|
|
@@ -219,11 +240,14 @@ class ToolNode extends run.RunnableCallable {
|
|
|
219
240
|
* Each file uses its own session_id (supporting multi-session file tracking).
|
|
220
241
|
* Both session_id and _injected_files are injected directly to invokeParams
|
|
221
242
|
* (not inside args) so they bypass Zod schema validation and reach config.toolCall.
|
|
243
|
+
*
|
|
244
|
+
* session_id is always injected when available (even without tracked files)
|
|
245
|
+
* so the CodeExecutor can fall back to the /files endpoint for session continuity.
|
|
222
246
|
*/
|
|
223
247
|
if (call.name === _enum.Constants.EXECUTE_CODE ||
|
|
224
248
|
call.name === _enum.Constants.PROGRAMMATIC_TOOL_CALLING) {
|
|
225
249
|
const codeSession = this.sessions?.get(_enum.Constants.EXECUTE_CODE);
|
|
226
|
-
if (codeSession
|
|
250
|
+
if (codeSession != null && codeSession.session_id !== '') {
|
|
227
251
|
/**
|
|
228
252
|
* Always inject session_id so retries reuse the same workspace.
|
|
229
253
|
* Also inject file refs when files exist from previous executions.
|
|
@@ -261,14 +285,17 @@ class ToolNode extends run.RunnableCallable {
|
|
|
261
285
|
// Human denied the tool call - return a denial message
|
|
262
286
|
return new messages.ToolMessage({
|
|
263
287
|
status: 'error',
|
|
264
|
-
content: `Tool call "${call.name}" was denied by the user.${approvalResponse.feedback ? ` Reason: ${approvalResponse.feedback}` : ''} Please acknowledge the denial and proceed without executing this tool.`,
|
|
288
|
+
content: `Tool call "${call.name}" was denied by the user.${approvalResponse.feedback != null && approvalResponse.feedback !== '' ? ` Reason: ${approvalResponse.feedback}` : ''} Please acknowledge the denial and proceed without executing this tool.`,
|
|
265
289
|
name: call.name,
|
|
266
290
|
tool_call_id: call.id ?? '',
|
|
267
291
|
});
|
|
268
292
|
}
|
|
269
293
|
// Human approved - optionally use modified args
|
|
270
294
|
if (approvalResponse.modifiedArgs) {
|
|
271
|
-
invokeParams = {
|
|
295
|
+
invokeParams = {
|
|
296
|
+
...invokeParams,
|
|
297
|
+
args: approvalResponse.modifiedArgs,
|
|
298
|
+
};
|
|
272
299
|
}
|
|
273
300
|
}
|
|
274
301
|
const output = await tool.invoke(invokeParams, config);
|
|
@@ -372,22 +399,264 @@ class ToolNode extends run.RunnableCallable {
|
|
|
372
399
|
}
|
|
373
400
|
}
|
|
374
401
|
/**
|
|
375
|
-
*
|
|
376
|
-
*
|
|
402
|
+
* Recover truncated tool call arguments using the raw streaming buffer.
|
|
403
|
+
*
|
|
404
|
+
* When parsePartialJson drops content (e.g., a large "content" field truncated
|
|
405
|
+
* at max_tokens), this method extracts the field value from the raw accumulated
|
|
406
|
+
* arg string and merges it back into the parsed args object.
|
|
407
|
+
*
|
|
408
|
+
* This is generic — it checks ALL string fields in the raw buffer, not just
|
|
409
|
+
* content_tool fields. Any tool with a truncated string value benefits.
|
|
377
410
|
*/
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
411
|
+
/**
|
|
412
|
+
* Recover truncated tool call arguments using the raw streaming buffer.
|
|
413
|
+
*
|
|
414
|
+
* Strategy:
|
|
415
|
+
* 1. If args are completely empty → try parsePartialJson on the raw buffer
|
|
416
|
+
* 2. Otherwise → field-level recovery: extract missing fields from raw buffer
|
|
417
|
+
*
|
|
418
|
+
* @param toolName - Tool name (for logging)
|
|
419
|
+
* @param toolCallId - The tool call ID
|
|
420
|
+
* @param args - The parsed args (potentially incomplete from parsePartialJson)
|
|
421
|
+
* @returns The args with recovered fields merged in
|
|
422
|
+
*/
|
|
423
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
424
|
+
recoverTruncatedArgs(toolName, toolCallId, args) {
|
|
425
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
426
|
+
if (!this.streamingToolCallBuffer)
|
|
427
|
+
return args;
|
|
428
|
+
const rawArgs = this.streamingToolCallBuffer.getRawArgs(toolCallId);
|
|
429
|
+
if (!rawArgs)
|
|
430
|
+
return args;
|
|
431
|
+
const rawLen = rawArgs.length;
|
|
432
|
+
// If args is completely empty (JSON parsing aborted before any key),
|
|
433
|
+
// attempt to parse the raw accumulated string
|
|
434
|
+
if (args == null ||
|
|
435
|
+
(typeof args === 'object' && Object.keys(args).length === 0)) {
|
|
436
|
+
try {
|
|
437
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
438
|
+
const { parsePartialJson } = require('@langchain/core/utils/json');
|
|
439
|
+
const recovered = parsePartialJson(rawArgs);
|
|
440
|
+
if (recovered != null &&
|
|
441
|
+
typeof recovered === 'object' &&
|
|
442
|
+
Object.keys(recovered).length > 0) {
|
|
443
|
+
// eslint-disable-next-line no-console
|
|
444
|
+
console.warn(`[TruncationRecovery] Tool=${toolName}, callId=${toolCallId}, rawBufferLen=${rawLen}, ` +
|
|
445
|
+
`parsedFields=[], recoveredFields=[${Object.keys(recovered).join(',')}] (full parse)`);
|
|
446
|
+
return recovered;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
// parsePartialJson failed — fall through to field-level extraction
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
// Field-level recovery: extract missing fields from the raw buffer
|
|
454
|
+
const parsedArgs = typeof args === 'object' ? { ...args } : {};
|
|
455
|
+
const recoveredFields = [];
|
|
456
|
+
// Extract field names from the raw JSON string
|
|
457
|
+
const fieldPattern = /"([^"]+)"\s*:/g;
|
|
458
|
+
let match;
|
|
459
|
+
const rawFieldNames = [];
|
|
460
|
+
while ((match = fieldPattern.exec(rawArgs)) !== null) {
|
|
461
|
+
rawFieldNames.push(match[1]);
|
|
462
|
+
}
|
|
463
|
+
for (const fieldName of rawFieldNames) {
|
|
464
|
+
if (parsedArgs[fieldName] == null ||
|
|
465
|
+
parsedArgs[fieldName] === '' ||
|
|
466
|
+
parsedArgs[fieldName] === undefined) {
|
|
467
|
+
const rawValue = this.streamingToolCallBuffer.extractFieldValue(toolCallId, fieldName);
|
|
468
|
+
if (rawValue != null && rawValue !== '') {
|
|
469
|
+
parsedArgs[fieldName] = rawValue;
|
|
470
|
+
recoveredFields.push(fieldName);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
if (recoveredFields.length > 0) {
|
|
475
|
+
// eslint-disable-next-line no-console
|
|
476
|
+
console.warn(`[TruncationRecovery] Tool=${toolName}, callId=${toolCallId}, rawBufferLen=${rawLen}, ` +
|
|
477
|
+
`parsedFields=[${Object.keys(args ?? {}).join(',')}], recoveredFields=[${recoveredFields.join(',')}]`);
|
|
478
|
+
}
|
|
479
|
+
return parsedArgs;
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Builds code session context for injection into event-driven tool calls.
|
|
483
|
+
* Mirrors the session injection logic in runTool() for direct execution.
|
|
484
|
+
*/
|
|
485
|
+
getCodeSessionContext() {
|
|
486
|
+
if (!this.sessions) {
|
|
487
|
+
return undefined;
|
|
488
|
+
}
|
|
489
|
+
const codeSession = this.sessions.get(_enum.Constants.EXECUTE_CODE);
|
|
490
|
+
if (!codeSession) {
|
|
491
|
+
return undefined;
|
|
492
|
+
}
|
|
493
|
+
const context = {
|
|
494
|
+
session_id: codeSession.session_id,
|
|
495
|
+
};
|
|
496
|
+
if (codeSession.files && codeSession.files.length > 0) {
|
|
497
|
+
context.files = codeSession.files.map((file) => ({
|
|
498
|
+
session_id: file.session_id ?? codeSession.session_id,
|
|
499
|
+
id: file.id,
|
|
500
|
+
name: file.name,
|
|
501
|
+
}));
|
|
502
|
+
}
|
|
503
|
+
return context;
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Extracts code execution session context from tool results and stores in Graph.sessions.
|
|
507
|
+
* Mirrors the session storage logic in handleRunToolCompletions for direct execution.
|
|
508
|
+
*/
|
|
509
|
+
storeCodeSessionFromResults(results, requests) {
|
|
510
|
+
if (!this.sessions) {
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
513
|
+
for (let i = 0; i < results.length; i++) {
|
|
514
|
+
const result = results[i];
|
|
515
|
+
if (result.status !== 'success' || result.artifact == null) {
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
const request = requests.find((r) => r.id === result.toolCallId);
|
|
519
|
+
if (request?.name !== _enum.Constants.EXECUTE_CODE &&
|
|
520
|
+
request?.name !== _enum.Constants.PROGRAMMATIC_TOOL_CALLING) {
|
|
521
|
+
continue;
|
|
522
|
+
}
|
|
523
|
+
const artifact = result.artifact;
|
|
524
|
+
if (artifact?.session_id == null || artifact.session_id === '') {
|
|
525
|
+
continue;
|
|
526
|
+
}
|
|
527
|
+
const newFiles = artifact.files ?? [];
|
|
528
|
+
const existingSession = this.sessions.get(_enum.Constants.EXECUTE_CODE);
|
|
529
|
+
const existingFiles = existingSession?.files ?? [];
|
|
530
|
+
if (newFiles.length > 0) {
|
|
531
|
+
const filesWithSession = newFiles.map((file) => ({
|
|
532
|
+
...file,
|
|
533
|
+
session_id: artifact.session_id,
|
|
534
|
+
}));
|
|
535
|
+
const newFileNames = new Set(filesWithSession.map((f) => f.name));
|
|
536
|
+
const filteredExisting = existingFiles.filter((f) => !newFileNames.has(f.name));
|
|
537
|
+
this.sessions.set(_enum.Constants.EXECUTE_CODE, {
|
|
538
|
+
session_id: artifact.session_id,
|
|
539
|
+
files: [...filteredExisting, ...filesWithSession],
|
|
540
|
+
lastUpdated: Date.now(),
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
this.sessions.set(_enum.Constants.EXECUTE_CODE, {
|
|
545
|
+
session_id: artifact.session_id,
|
|
546
|
+
files: existingFiles,
|
|
547
|
+
lastUpdated: Date.now(),
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Post-processes standard runTool outputs: dispatches ON_RUN_STEP_COMPLETED
|
|
554
|
+
* and stores code session context. Mirrors the completion handling in
|
|
555
|
+
* dispatchToolEvents for the event-driven path.
|
|
556
|
+
*
|
|
557
|
+
* By handling completions here in graph context (rather than in the
|
|
558
|
+
* stream consumer via ToolEndHandler), the race between the stream
|
|
559
|
+
* consumer and graph execution is eliminated.
|
|
560
|
+
*/
|
|
561
|
+
handleRunToolCompletions(calls, outputs, config) {
|
|
562
|
+
for (let i = 0; i < calls.length; i++) {
|
|
563
|
+
const call = calls[i];
|
|
564
|
+
const output = outputs[i];
|
|
565
|
+
const turn = this.toolCallTurns.get(call.id) ?? 0;
|
|
566
|
+
if (langgraph.isCommand(output)) {
|
|
567
|
+
continue;
|
|
568
|
+
}
|
|
569
|
+
const toolMessage = output;
|
|
570
|
+
const toolCallId = call.id ?? '';
|
|
571
|
+
// Skip error ToolMessages when errorHandler already dispatched ON_RUN_STEP_COMPLETED
|
|
572
|
+
// via handleToolCallErrorStatic. Without this check, errors would be double-dispatched.
|
|
573
|
+
if (toolMessage.status === 'error' && this.errorHandler != null) {
|
|
574
|
+
continue;
|
|
575
|
+
}
|
|
576
|
+
// Store code session context from tool results
|
|
577
|
+
if (this.sessions &&
|
|
578
|
+
(call.name === _enum.Constants.EXECUTE_CODE ||
|
|
579
|
+
call.name === _enum.Constants.PROGRAMMATIC_TOOL_CALLING)) {
|
|
580
|
+
const artifact = toolMessage.artifact;
|
|
581
|
+
if (artifact?.session_id != null && artifact.session_id !== '') {
|
|
582
|
+
const newFiles = artifact.files ?? [];
|
|
583
|
+
const existingSession = this.sessions.get(_enum.Constants.EXECUTE_CODE);
|
|
584
|
+
const existingFiles = existingSession?.files ?? [];
|
|
585
|
+
if (newFiles.length > 0) {
|
|
586
|
+
const filesWithSession = newFiles.map((file) => ({
|
|
587
|
+
...file,
|
|
588
|
+
session_id: artifact.session_id,
|
|
589
|
+
}));
|
|
590
|
+
const newFileNames = new Set(filesWithSession.map((f) => f.name));
|
|
591
|
+
const filteredExisting = existingFiles.filter((f) => !newFileNames.has(f.name));
|
|
592
|
+
this.sessions.set(_enum.Constants.EXECUTE_CODE, {
|
|
593
|
+
session_id: artifact.session_id,
|
|
594
|
+
files: [...filteredExisting, ...filesWithSession],
|
|
595
|
+
lastUpdated: Date.now(),
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
else {
|
|
599
|
+
this.sessions.set(_enum.Constants.EXECUTE_CODE, {
|
|
600
|
+
session_id: artifact.session_id,
|
|
601
|
+
files: existingFiles,
|
|
602
|
+
lastUpdated: Date.now(),
|
|
603
|
+
});
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
// Dispatch ON_RUN_STEP_COMPLETED via custom event (same path as dispatchToolEvents)
|
|
608
|
+
const stepId = this.toolCallStepIds?.get(toolCallId) ?? '';
|
|
609
|
+
if (!stepId) {
|
|
610
|
+
continue;
|
|
611
|
+
}
|
|
612
|
+
const contentString = typeof toolMessage.content === 'string'
|
|
613
|
+
? toolMessage.content
|
|
614
|
+
: JSON.stringify(toolMessage.content);
|
|
615
|
+
const tool_call = {
|
|
616
|
+
args: typeof call.args === 'string'
|
|
617
|
+
? call.args
|
|
618
|
+
: JSON.stringify(call.args ?? {}),
|
|
619
|
+
name: call.name,
|
|
620
|
+
id: toolCallId,
|
|
621
|
+
output: contentString,
|
|
622
|
+
progress: 1,
|
|
623
|
+
};
|
|
624
|
+
events.safeDispatchCustomEvent(_enum.GraphEvents.ON_RUN_STEP_COMPLETED, {
|
|
625
|
+
result: {
|
|
626
|
+
id: stepId,
|
|
627
|
+
index: turn,
|
|
628
|
+
type: 'tool_call',
|
|
629
|
+
tool_call,
|
|
630
|
+
},
|
|
631
|
+
}, config);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
/**
|
|
635
|
+
* Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns raw ToolMessages.
|
|
636
|
+
* Core logic for event-driven execution, separated from output shaping.
|
|
637
|
+
*/
|
|
638
|
+
async dispatchToolEvents(toolCalls, config) {
|
|
381
639
|
const requests = toolCalls.map((call) => {
|
|
382
640
|
const turn = this.toolUsageCount.get(call.name) ?? 0;
|
|
383
641
|
this.toolUsageCount.set(call.name, turn + 1);
|
|
384
|
-
|
|
642
|
+
// Recover truncated args from streaming buffer (same as runTool path)
|
|
643
|
+
let args = call.args;
|
|
644
|
+
if (call.id && this.streamingToolCallBuffer?.has(call.id)) {
|
|
645
|
+
args = this.recoverTruncatedArgs(call.name, call.id, args);
|
|
646
|
+
this.streamingToolCallBuffer.clear(call.id);
|
|
647
|
+
}
|
|
648
|
+
const request = {
|
|
385
649
|
id: call.id,
|
|
386
650
|
name: call.name,
|
|
387
|
-
args
|
|
651
|
+
args,
|
|
388
652
|
stepId: this.toolCallStepIds?.get(call.id),
|
|
389
653
|
turn,
|
|
390
654
|
};
|
|
655
|
+
if (call.name === _enum.Constants.EXECUTE_CODE ||
|
|
656
|
+
call.name === _enum.Constants.PROGRAMMATIC_TOOL_CALLING) {
|
|
657
|
+
request.codeSessionContext = this.getCodeSessionContext();
|
|
658
|
+
}
|
|
659
|
+
return request;
|
|
391
660
|
});
|
|
392
661
|
const results = await new Promise((resolve, reject) => {
|
|
393
662
|
const request = {
|
|
@@ -401,10 +670,17 @@ class ToolNode extends run.RunnableCallable {
|
|
|
401
670
|
};
|
|
402
671
|
events.safeDispatchCustomEvent(_enum.GraphEvents.ON_TOOL_EXECUTE, request, config);
|
|
403
672
|
});
|
|
404
|
-
|
|
673
|
+
this.storeCodeSessionFromResults(results, requests);
|
|
674
|
+
return results.map((result) => {
|
|
405
675
|
const request = requests.find((r) => r.id === result.toolCallId);
|
|
406
676
|
const toolName = request?.name ?? 'unknown';
|
|
407
677
|
const stepId = this.toolCallStepIds?.get(result.toolCallId) ?? '';
|
|
678
|
+
if (!stepId) {
|
|
679
|
+
// eslint-disable-next-line no-console
|
|
680
|
+
console.warn(`[ToolNode] toolCallStepIds missing entry for toolCallId=${result.toolCallId} (tool=${toolName}). ` +
|
|
681
|
+
'This indicates a race between the stream consumer and graph execution. ' +
|
|
682
|
+
`Map size: ${this.toolCallStepIds?.size ?? 0}`);
|
|
683
|
+
}
|
|
408
684
|
let toolMessage;
|
|
409
685
|
let contentString;
|
|
410
686
|
if (result.status === 'error') {
|
|
@@ -449,16 +725,28 @@ class ToolNode extends run.RunnableCallable {
|
|
|
449
725
|
events.safeDispatchCustomEvent(_enum.GraphEvents.ON_RUN_STEP_COMPLETED, runStepCompletedData, config);
|
|
450
726
|
return toolMessage;
|
|
451
727
|
});
|
|
728
|
+
}
|
|
729
|
+
/**
|
|
730
|
+
* Execute all tool calls via ON_TOOL_EXECUTE event dispatch.
|
|
731
|
+
* Used in event-driven mode where the host handles actual tool execution.
|
|
732
|
+
*/
|
|
733
|
+
async executeViaEvent(toolCalls, config,
|
|
734
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
735
|
+
input) {
|
|
736
|
+
const outputs = await this.dispatchToolEvents(toolCalls, config);
|
|
452
737
|
return (Array.isArray(input) ? outputs : { messages: outputs });
|
|
453
738
|
}
|
|
454
739
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
455
740
|
async run(input, config) {
|
|
741
|
+
this.toolCallTurns.clear();
|
|
456
742
|
let outputs;
|
|
457
743
|
if (this.isSendInput(input)) {
|
|
458
|
-
|
|
744
|
+
const isDirectTool = this.directToolNames?.has(input.lg_tool_call.name);
|
|
745
|
+
if (this.eventDrivenMode && isDirectTool !== true) {
|
|
459
746
|
return this.executeViaEvent([input.lg_tool_call], config, input);
|
|
460
747
|
}
|
|
461
748
|
outputs = [await this.runTool(input.lg_tool_call, config)];
|
|
749
|
+
this.handleRunToolCompletions([input.lg_tool_call], outputs, config);
|
|
462
750
|
}
|
|
463
751
|
else {
|
|
464
752
|
let messages$1;
|
|
@@ -502,9 +790,26 @@ class ToolNode extends run.RunnableCallable {
|
|
|
502
790
|
!(call.id?.startsWith('srvtoolu_') ?? false));
|
|
503
791
|
}) ?? [];
|
|
504
792
|
if (this.eventDrivenMode && filteredCalls.length > 0) {
|
|
505
|
-
|
|
793
|
+
if (!this.directToolNames || this.directToolNames.size === 0) {
|
|
794
|
+
return this.executeViaEvent(filteredCalls, config, input);
|
|
795
|
+
}
|
|
796
|
+
const directCalls = filteredCalls.filter((c) => this.directToolNames.has(c.name));
|
|
797
|
+
const eventCalls = filteredCalls.filter((c) => !this.directToolNames.has(c.name));
|
|
798
|
+
const directOutputs = directCalls.length > 0
|
|
799
|
+
? await Promise.all(directCalls.map((call) => this.runTool(call, config)))
|
|
800
|
+
: [];
|
|
801
|
+
if (directCalls.length > 0 && directOutputs.length > 0) {
|
|
802
|
+
this.handleRunToolCompletions(directCalls, directOutputs, config);
|
|
803
|
+
}
|
|
804
|
+
const eventOutputs = eventCalls.length > 0
|
|
805
|
+
? await this.dispatchToolEvents(eventCalls, config)
|
|
806
|
+
: [];
|
|
807
|
+
outputs = [...directOutputs, ...eventOutputs];
|
|
808
|
+
}
|
|
809
|
+
else {
|
|
810
|
+
outputs = await Promise.all(filteredCalls.map((call) => this.runTool(call, config)));
|
|
811
|
+
this.handleRunToolCompletions(filteredCalls, outputs, config);
|
|
506
812
|
}
|
|
507
|
-
outputs = await Promise.all(filteredCalls.map((call) => this.runTool(call, config)));
|
|
508
813
|
}
|
|
509
814
|
if (!outputs.some(langgraph.isCommand)) {
|
|
510
815
|
return (Array.isArray(input) ? outputs : { messages: outputs });
|
|
@@ -624,17 +929,15 @@ function areToolCallsInvoked(message, invokedToolIds) {
|
|
|
624
929
|
return (message.tool_calls?.every((toolCall) => toolCall.id != null && invokedToolIds.has(toolCall.id)) ?? false);
|
|
625
930
|
}
|
|
626
931
|
function toolsCondition(state, toolNode, invokedToolIds) {
|
|
627
|
-
const
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
932
|
+
const messages = Array.isArray(state) ? state : state.messages;
|
|
933
|
+
const message = messages[messages.length - 1];
|
|
934
|
+
if (message &&
|
|
935
|
+
'tool_calls' in message &&
|
|
631
936
|
(message.tool_calls?.length ?? 0) > 0 &&
|
|
632
937
|
!areToolCallsInvoked(message, invokedToolIds)) {
|
|
633
938
|
return toolNode;
|
|
634
939
|
}
|
|
635
|
-
|
|
636
|
-
return langgraph.END;
|
|
637
|
-
}
|
|
940
|
+
return langgraph.END;
|
|
638
941
|
}
|
|
639
942
|
|
|
640
943
|
exports.ToolNode = ToolNode;
|