@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
|
@@ -5,7 +5,7 @@ import 'nanoid';
|
|
|
5
5
|
import '../messages/core.mjs';
|
|
6
6
|
import { processToolOutput } from '../utils/toonFormat.mjs';
|
|
7
7
|
import { RunnableCallable } from '../utils/run.mjs';
|
|
8
|
-
import '
|
|
8
|
+
import 'ai-tokenizer';
|
|
9
9
|
import 'zod-to-json-schema';
|
|
10
10
|
import { safeDispatchCustomEvent } from '../utils/events.mjs';
|
|
11
11
|
|
|
@@ -32,7 +32,7 @@ function extractStringContent(content) {
|
|
|
32
32
|
if (typeof block === 'string') {
|
|
33
33
|
textParts.push(block);
|
|
34
34
|
}
|
|
35
|
-
else if (block && typeof block === 'object') {
|
|
35
|
+
else if (block != null && typeof block === 'object') {
|
|
36
36
|
// Handle {type: 'text', text: '...'} format
|
|
37
37
|
const obj = block;
|
|
38
38
|
if (obj.type === 'text' && typeof obj.text === 'string') {
|
|
@@ -60,6 +60,8 @@ class ToolNode extends RunnableCallable {
|
|
|
60
60
|
toolCallStepIds;
|
|
61
61
|
errorHandler;
|
|
62
62
|
toolUsageCount;
|
|
63
|
+
/** Maps toolCallId → turn captured in runTool, used by handleRunToolCompletions */
|
|
64
|
+
toolCallTurns = new Map();
|
|
63
65
|
/** Tool registry for filtering (lazy computation of programmatic maps) */
|
|
64
66
|
toolRegistry;
|
|
65
67
|
/** Cached programmatic tools (computed once on first PTC call) */
|
|
@@ -68,13 +70,15 @@ class ToolNode extends RunnableCallable {
|
|
|
68
70
|
sessions;
|
|
69
71
|
/** When true, dispatches ON_TOOL_EXECUTE events instead of invoking tools directly */
|
|
70
72
|
eventDrivenMode = false;
|
|
71
|
-
/** Tool definitions for event-driven mode */
|
|
72
|
-
toolDefinitions;
|
|
73
73
|
/** Agent ID for event-driven mode */
|
|
74
74
|
agentId;
|
|
75
|
+
/** Tool names that bypass event dispatch and execute directly (e.g., graph-managed handoff tools) */
|
|
76
|
+
directToolNames;
|
|
75
77
|
/** HITL tool approval configuration */
|
|
76
78
|
toolApprovalConfig;
|
|
77
|
-
|
|
79
|
+
/** Buffer for recovering truncated tool call arguments from streaming data */
|
|
80
|
+
streamingToolCallBuffer;
|
|
81
|
+
constructor({ tools, toolMap, name, tags, errorHandler, toolCallStepIds, handleToolErrors, loadRuntimeTools, toolRegistry, sessions, eventDrivenMode, agentId, directToolNames, streamingToolCallBuffer, toolApprovalConfig, }) {
|
|
78
82
|
super({ name, tags, func: (input, config) => this.run(input, config) });
|
|
79
83
|
this.toolMap = toolMap ?? new Map(tools.map((tool) => [tool.name, tool]));
|
|
80
84
|
this.toolCallStepIds = toolCallStepIds;
|
|
@@ -85,8 +89,9 @@ class ToolNode extends RunnableCallable {
|
|
|
85
89
|
this.toolRegistry = toolRegistry;
|
|
86
90
|
this.sessions = sessions;
|
|
87
91
|
this.eventDrivenMode = eventDrivenMode ?? false;
|
|
88
|
-
this.toolDefinitions = toolDefinitions;
|
|
89
92
|
this.agentId = agentId;
|
|
93
|
+
this.directToolNames = directToolNames;
|
|
94
|
+
this.streamingToolCallBuffer = streamingToolCallBuffer;
|
|
90
95
|
this.toolApprovalConfig = toolApprovalConfig;
|
|
91
96
|
}
|
|
92
97
|
/**
|
|
@@ -128,8 +133,13 @@ class ToolNode extends RunnableCallable {
|
|
|
128
133
|
return false;
|
|
129
134
|
}
|
|
130
135
|
const { defaultPolicy, overrides, executionContext } = this.toolApprovalConfig;
|
|
131
|
-
// Scheduled executions bypass all approval checks
|
|
132
|
-
if (executionContext === 'scheduled') {
|
|
136
|
+
// Scheduled and browser executions bypass all approval checks
|
|
137
|
+
if (executionContext === 'scheduled' || executionContext === 'browser') {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
// Graph-managed tools (handoff/transfer tools) bypass HITL approval —
|
|
141
|
+
// these are internal routing mechanisms, not user-facing tool executions
|
|
142
|
+
if (this.directToolNames?.has(toolName)) {
|
|
133
143
|
return false;
|
|
134
144
|
}
|
|
135
145
|
// Determine the effective policy for this tool
|
|
@@ -187,8 +197,19 @@ class ToolNode extends RunnableCallable {
|
|
|
187
197
|
}
|
|
188
198
|
const turn = this.toolUsageCount.get(call.name) ?? 0;
|
|
189
199
|
this.toolUsageCount.set(call.name, turn + 1);
|
|
190
|
-
|
|
200
|
+
if (call.id != null && call.id !== '') {
|
|
201
|
+
this.toolCallTurns.set(call.id, turn);
|
|
202
|
+
}
|
|
203
|
+
let args = call.args;
|
|
191
204
|
const stepId = this.toolCallStepIds?.get(call.id);
|
|
205
|
+
// Recover truncated tool call arguments from the streaming buffer.
|
|
206
|
+
// When max_tokens truncates a tool call mid-JSON, parsePartialJson may lose
|
|
207
|
+
// content that was already streamed to the UI. The buffer has the raw accumulated
|
|
208
|
+
// arg string, so we can extract field values that were dropped.
|
|
209
|
+
if (call.id && this.streamingToolCallBuffer?.has(call.id)) {
|
|
210
|
+
args = this.recoverTruncatedArgs(call.name, call.id, args);
|
|
211
|
+
this.streamingToolCallBuffer.clear(call.id);
|
|
212
|
+
}
|
|
192
213
|
// Build invoke params - LangChain extracts non-schema fields to config.toolCall
|
|
193
214
|
let invokeParams = {
|
|
194
215
|
...call,
|
|
@@ -217,11 +238,14 @@ class ToolNode extends RunnableCallable {
|
|
|
217
238
|
* Each file uses its own session_id (supporting multi-session file tracking).
|
|
218
239
|
* Both session_id and _injected_files are injected directly to invokeParams
|
|
219
240
|
* (not inside args) so they bypass Zod schema validation and reach config.toolCall.
|
|
241
|
+
*
|
|
242
|
+
* session_id is always injected when available (even without tracked files)
|
|
243
|
+
* so the CodeExecutor can fall back to the /files endpoint for session continuity.
|
|
220
244
|
*/
|
|
221
245
|
if (call.name === Constants.EXECUTE_CODE ||
|
|
222
246
|
call.name === Constants.PROGRAMMATIC_TOOL_CALLING) {
|
|
223
247
|
const codeSession = this.sessions?.get(Constants.EXECUTE_CODE);
|
|
224
|
-
if (codeSession
|
|
248
|
+
if (codeSession != null && codeSession.session_id !== '') {
|
|
225
249
|
/**
|
|
226
250
|
* Always inject session_id so retries reuse the same workspace.
|
|
227
251
|
* Also inject file refs when files exist from previous executions.
|
|
@@ -259,14 +283,17 @@ class ToolNode extends RunnableCallable {
|
|
|
259
283
|
// Human denied the tool call - return a denial message
|
|
260
284
|
return new ToolMessage({
|
|
261
285
|
status: 'error',
|
|
262
|
-
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.`,
|
|
286
|
+
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.`,
|
|
263
287
|
name: call.name,
|
|
264
288
|
tool_call_id: call.id ?? '',
|
|
265
289
|
});
|
|
266
290
|
}
|
|
267
291
|
// Human approved - optionally use modified args
|
|
268
292
|
if (approvalResponse.modifiedArgs) {
|
|
269
|
-
invokeParams = {
|
|
293
|
+
invokeParams = {
|
|
294
|
+
...invokeParams,
|
|
295
|
+
args: approvalResponse.modifiedArgs,
|
|
296
|
+
};
|
|
270
297
|
}
|
|
271
298
|
}
|
|
272
299
|
const output = await tool.invoke(invokeParams, config);
|
|
@@ -370,22 +397,264 @@ class ToolNode extends RunnableCallable {
|
|
|
370
397
|
}
|
|
371
398
|
}
|
|
372
399
|
/**
|
|
373
|
-
*
|
|
374
|
-
*
|
|
400
|
+
* Recover truncated tool call arguments using the raw streaming buffer.
|
|
401
|
+
*
|
|
402
|
+
* When parsePartialJson drops content (e.g., a large "content" field truncated
|
|
403
|
+
* at max_tokens), this method extracts the field value from the raw accumulated
|
|
404
|
+
* arg string and merges it back into the parsed args object.
|
|
405
|
+
*
|
|
406
|
+
* This is generic — it checks ALL string fields in the raw buffer, not just
|
|
407
|
+
* content_tool fields. Any tool with a truncated string value benefits.
|
|
375
408
|
*/
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
409
|
+
/**
|
|
410
|
+
* Recover truncated tool call arguments using the raw streaming buffer.
|
|
411
|
+
*
|
|
412
|
+
* Strategy:
|
|
413
|
+
* 1. If args are completely empty → try parsePartialJson on the raw buffer
|
|
414
|
+
* 2. Otherwise → field-level recovery: extract missing fields from raw buffer
|
|
415
|
+
*
|
|
416
|
+
* @param toolName - Tool name (for logging)
|
|
417
|
+
* @param toolCallId - The tool call ID
|
|
418
|
+
* @param args - The parsed args (potentially incomplete from parsePartialJson)
|
|
419
|
+
* @returns The args with recovered fields merged in
|
|
420
|
+
*/
|
|
421
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
422
|
+
recoverTruncatedArgs(toolName, toolCallId, args) {
|
|
423
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
424
|
+
if (!this.streamingToolCallBuffer)
|
|
425
|
+
return args;
|
|
426
|
+
const rawArgs = this.streamingToolCallBuffer.getRawArgs(toolCallId);
|
|
427
|
+
if (!rawArgs)
|
|
428
|
+
return args;
|
|
429
|
+
const rawLen = rawArgs.length;
|
|
430
|
+
// If args is completely empty (JSON parsing aborted before any key),
|
|
431
|
+
// attempt to parse the raw accumulated string
|
|
432
|
+
if (args == null ||
|
|
433
|
+
(typeof args === 'object' && Object.keys(args).length === 0)) {
|
|
434
|
+
try {
|
|
435
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
436
|
+
const { parsePartialJson } = require('@langchain/core/utils/json');
|
|
437
|
+
const recovered = parsePartialJson(rawArgs);
|
|
438
|
+
if (recovered != null &&
|
|
439
|
+
typeof recovered === 'object' &&
|
|
440
|
+
Object.keys(recovered).length > 0) {
|
|
441
|
+
// eslint-disable-next-line no-console
|
|
442
|
+
console.warn(`[TruncationRecovery] Tool=${toolName}, callId=${toolCallId}, rawBufferLen=${rawLen}, ` +
|
|
443
|
+
`parsedFields=[], recoveredFields=[${Object.keys(recovered).join(',')}] (full parse)`);
|
|
444
|
+
return recovered;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
// parsePartialJson failed — fall through to field-level extraction
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
// Field-level recovery: extract missing fields from the raw buffer
|
|
452
|
+
const parsedArgs = typeof args === 'object' ? { ...args } : {};
|
|
453
|
+
const recoveredFields = [];
|
|
454
|
+
// Extract field names from the raw JSON string
|
|
455
|
+
const fieldPattern = /"([^"]+)"\s*:/g;
|
|
456
|
+
let match;
|
|
457
|
+
const rawFieldNames = [];
|
|
458
|
+
while ((match = fieldPattern.exec(rawArgs)) !== null) {
|
|
459
|
+
rawFieldNames.push(match[1]);
|
|
460
|
+
}
|
|
461
|
+
for (const fieldName of rawFieldNames) {
|
|
462
|
+
if (parsedArgs[fieldName] == null ||
|
|
463
|
+
parsedArgs[fieldName] === '' ||
|
|
464
|
+
parsedArgs[fieldName] === undefined) {
|
|
465
|
+
const rawValue = this.streamingToolCallBuffer.extractFieldValue(toolCallId, fieldName);
|
|
466
|
+
if (rawValue != null && rawValue !== '') {
|
|
467
|
+
parsedArgs[fieldName] = rawValue;
|
|
468
|
+
recoveredFields.push(fieldName);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
if (recoveredFields.length > 0) {
|
|
473
|
+
// eslint-disable-next-line no-console
|
|
474
|
+
console.warn(`[TruncationRecovery] Tool=${toolName}, callId=${toolCallId}, rawBufferLen=${rawLen}, ` +
|
|
475
|
+
`parsedFields=[${Object.keys(args ?? {}).join(',')}], recoveredFields=[${recoveredFields.join(',')}]`);
|
|
476
|
+
}
|
|
477
|
+
return parsedArgs;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Builds code session context for injection into event-driven tool calls.
|
|
481
|
+
* Mirrors the session injection logic in runTool() for direct execution.
|
|
482
|
+
*/
|
|
483
|
+
getCodeSessionContext() {
|
|
484
|
+
if (!this.sessions) {
|
|
485
|
+
return undefined;
|
|
486
|
+
}
|
|
487
|
+
const codeSession = this.sessions.get(Constants.EXECUTE_CODE);
|
|
488
|
+
if (!codeSession) {
|
|
489
|
+
return undefined;
|
|
490
|
+
}
|
|
491
|
+
const context = {
|
|
492
|
+
session_id: codeSession.session_id,
|
|
493
|
+
};
|
|
494
|
+
if (codeSession.files && codeSession.files.length > 0) {
|
|
495
|
+
context.files = codeSession.files.map((file) => ({
|
|
496
|
+
session_id: file.session_id ?? codeSession.session_id,
|
|
497
|
+
id: file.id,
|
|
498
|
+
name: file.name,
|
|
499
|
+
}));
|
|
500
|
+
}
|
|
501
|
+
return context;
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Extracts code execution session context from tool results and stores in Graph.sessions.
|
|
505
|
+
* Mirrors the session storage logic in handleRunToolCompletions for direct execution.
|
|
506
|
+
*/
|
|
507
|
+
storeCodeSessionFromResults(results, requests) {
|
|
508
|
+
if (!this.sessions) {
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
for (let i = 0; i < results.length; i++) {
|
|
512
|
+
const result = results[i];
|
|
513
|
+
if (result.status !== 'success' || result.artifact == null) {
|
|
514
|
+
continue;
|
|
515
|
+
}
|
|
516
|
+
const request = requests.find((r) => r.id === result.toolCallId);
|
|
517
|
+
if (request?.name !== Constants.EXECUTE_CODE &&
|
|
518
|
+
request?.name !== Constants.PROGRAMMATIC_TOOL_CALLING) {
|
|
519
|
+
continue;
|
|
520
|
+
}
|
|
521
|
+
const artifact = result.artifact;
|
|
522
|
+
if (artifact?.session_id == null || artifact.session_id === '') {
|
|
523
|
+
continue;
|
|
524
|
+
}
|
|
525
|
+
const newFiles = artifact.files ?? [];
|
|
526
|
+
const existingSession = this.sessions.get(Constants.EXECUTE_CODE);
|
|
527
|
+
const existingFiles = existingSession?.files ?? [];
|
|
528
|
+
if (newFiles.length > 0) {
|
|
529
|
+
const filesWithSession = newFiles.map((file) => ({
|
|
530
|
+
...file,
|
|
531
|
+
session_id: artifact.session_id,
|
|
532
|
+
}));
|
|
533
|
+
const newFileNames = new Set(filesWithSession.map((f) => f.name));
|
|
534
|
+
const filteredExisting = existingFiles.filter((f) => !newFileNames.has(f.name));
|
|
535
|
+
this.sessions.set(Constants.EXECUTE_CODE, {
|
|
536
|
+
session_id: artifact.session_id,
|
|
537
|
+
files: [...filteredExisting, ...filesWithSession],
|
|
538
|
+
lastUpdated: Date.now(),
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
else {
|
|
542
|
+
this.sessions.set(Constants.EXECUTE_CODE, {
|
|
543
|
+
session_id: artifact.session_id,
|
|
544
|
+
files: existingFiles,
|
|
545
|
+
lastUpdated: Date.now(),
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Post-processes standard runTool outputs: dispatches ON_RUN_STEP_COMPLETED
|
|
552
|
+
* and stores code session context. Mirrors the completion handling in
|
|
553
|
+
* dispatchToolEvents for the event-driven path.
|
|
554
|
+
*
|
|
555
|
+
* By handling completions here in graph context (rather than in the
|
|
556
|
+
* stream consumer via ToolEndHandler), the race between the stream
|
|
557
|
+
* consumer and graph execution is eliminated.
|
|
558
|
+
*/
|
|
559
|
+
handleRunToolCompletions(calls, outputs, config) {
|
|
560
|
+
for (let i = 0; i < calls.length; i++) {
|
|
561
|
+
const call = calls[i];
|
|
562
|
+
const output = outputs[i];
|
|
563
|
+
const turn = this.toolCallTurns.get(call.id) ?? 0;
|
|
564
|
+
if (isCommand(output)) {
|
|
565
|
+
continue;
|
|
566
|
+
}
|
|
567
|
+
const toolMessage = output;
|
|
568
|
+
const toolCallId = call.id ?? '';
|
|
569
|
+
// Skip error ToolMessages when errorHandler already dispatched ON_RUN_STEP_COMPLETED
|
|
570
|
+
// via handleToolCallErrorStatic. Without this check, errors would be double-dispatched.
|
|
571
|
+
if (toolMessage.status === 'error' && this.errorHandler != null) {
|
|
572
|
+
continue;
|
|
573
|
+
}
|
|
574
|
+
// Store code session context from tool results
|
|
575
|
+
if (this.sessions &&
|
|
576
|
+
(call.name === Constants.EXECUTE_CODE ||
|
|
577
|
+
call.name === Constants.PROGRAMMATIC_TOOL_CALLING)) {
|
|
578
|
+
const artifact = toolMessage.artifact;
|
|
579
|
+
if (artifact?.session_id != null && artifact.session_id !== '') {
|
|
580
|
+
const newFiles = artifact.files ?? [];
|
|
581
|
+
const existingSession = this.sessions.get(Constants.EXECUTE_CODE);
|
|
582
|
+
const existingFiles = existingSession?.files ?? [];
|
|
583
|
+
if (newFiles.length > 0) {
|
|
584
|
+
const filesWithSession = newFiles.map((file) => ({
|
|
585
|
+
...file,
|
|
586
|
+
session_id: artifact.session_id,
|
|
587
|
+
}));
|
|
588
|
+
const newFileNames = new Set(filesWithSession.map((f) => f.name));
|
|
589
|
+
const filteredExisting = existingFiles.filter((f) => !newFileNames.has(f.name));
|
|
590
|
+
this.sessions.set(Constants.EXECUTE_CODE, {
|
|
591
|
+
session_id: artifact.session_id,
|
|
592
|
+
files: [...filteredExisting, ...filesWithSession],
|
|
593
|
+
lastUpdated: Date.now(),
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
else {
|
|
597
|
+
this.sessions.set(Constants.EXECUTE_CODE, {
|
|
598
|
+
session_id: artifact.session_id,
|
|
599
|
+
files: existingFiles,
|
|
600
|
+
lastUpdated: Date.now(),
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
// Dispatch ON_RUN_STEP_COMPLETED via custom event (same path as dispatchToolEvents)
|
|
606
|
+
const stepId = this.toolCallStepIds?.get(toolCallId) ?? '';
|
|
607
|
+
if (!stepId) {
|
|
608
|
+
continue;
|
|
609
|
+
}
|
|
610
|
+
const contentString = typeof toolMessage.content === 'string'
|
|
611
|
+
? toolMessage.content
|
|
612
|
+
: JSON.stringify(toolMessage.content);
|
|
613
|
+
const tool_call = {
|
|
614
|
+
args: typeof call.args === 'string'
|
|
615
|
+
? call.args
|
|
616
|
+
: JSON.stringify(call.args ?? {}),
|
|
617
|
+
name: call.name,
|
|
618
|
+
id: toolCallId,
|
|
619
|
+
output: contentString,
|
|
620
|
+
progress: 1,
|
|
621
|
+
};
|
|
622
|
+
safeDispatchCustomEvent(GraphEvents.ON_RUN_STEP_COMPLETED, {
|
|
623
|
+
result: {
|
|
624
|
+
id: stepId,
|
|
625
|
+
index: turn,
|
|
626
|
+
type: 'tool_call',
|
|
627
|
+
tool_call,
|
|
628
|
+
},
|
|
629
|
+
}, config);
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns raw ToolMessages.
|
|
634
|
+
* Core logic for event-driven execution, separated from output shaping.
|
|
635
|
+
*/
|
|
636
|
+
async dispatchToolEvents(toolCalls, config) {
|
|
379
637
|
const requests = toolCalls.map((call) => {
|
|
380
638
|
const turn = this.toolUsageCount.get(call.name) ?? 0;
|
|
381
639
|
this.toolUsageCount.set(call.name, turn + 1);
|
|
382
|
-
|
|
640
|
+
// Recover truncated args from streaming buffer (same as runTool path)
|
|
641
|
+
let args = call.args;
|
|
642
|
+
if (call.id && this.streamingToolCallBuffer?.has(call.id)) {
|
|
643
|
+
args = this.recoverTruncatedArgs(call.name, call.id, args);
|
|
644
|
+
this.streamingToolCallBuffer.clear(call.id);
|
|
645
|
+
}
|
|
646
|
+
const request = {
|
|
383
647
|
id: call.id,
|
|
384
648
|
name: call.name,
|
|
385
|
-
args
|
|
649
|
+
args,
|
|
386
650
|
stepId: this.toolCallStepIds?.get(call.id),
|
|
387
651
|
turn,
|
|
388
652
|
};
|
|
653
|
+
if (call.name === Constants.EXECUTE_CODE ||
|
|
654
|
+
call.name === Constants.PROGRAMMATIC_TOOL_CALLING) {
|
|
655
|
+
request.codeSessionContext = this.getCodeSessionContext();
|
|
656
|
+
}
|
|
657
|
+
return request;
|
|
389
658
|
});
|
|
390
659
|
const results = await new Promise((resolve, reject) => {
|
|
391
660
|
const request = {
|
|
@@ -399,10 +668,17 @@ class ToolNode extends RunnableCallable {
|
|
|
399
668
|
};
|
|
400
669
|
safeDispatchCustomEvent(GraphEvents.ON_TOOL_EXECUTE, request, config);
|
|
401
670
|
});
|
|
402
|
-
|
|
671
|
+
this.storeCodeSessionFromResults(results, requests);
|
|
672
|
+
return results.map((result) => {
|
|
403
673
|
const request = requests.find((r) => r.id === result.toolCallId);
|
|
404
674
|
const toolName = request?.name ?? 'unknown';
|
|
405
675
|
const stepId = this.toolCallStepIds?.get(result.toolCallId) ?? '';
|
|
676
|
+
if (!stepId) {
|
|
677
|
+
// eslint-disable-next-line no-console
|
|
678
|
+
console.warn(`[ToolNode] toolCallStepIds missing entry for toolCallId=${result.toolCallId} (tool=${toolName}). ` +
|
|
679
|
+
'This indicates a race between the stream consumer and graph execution. ' +
|
|
680
|
+
`Map size: ${this.toolCallStepIds?.size ?? 0}`);
|
|
681
|
+
}
|
|
406
682
|
let toolMessage;
|
|
407
683
|
let contentString;
|
|
408
684
|
if (result.status === 'error') {
|
|
@@ -447,16 +723,28 @@ class ToolNode extends RunnableCallable {
|
|
|
447
723
|
safeDispatchCustomEvent(GraphEvents.ON_RUN_STEP_COMPLETED, runStepCompletedData, config);
|
|
448
724
|
return toolMessage;
|
|
449
725
|
});
|
|
726
|
+
}
|
|
727
|
+
/**
|
|
728
|
+
* Execute all tool calls via ON_TOOL_EXECUTE event dispatch.
|
|
729
|
+
* Used in event-driven mode where the host handles actual tool execution.
|
|
730
|
+
*/
|
|
731
|
+
async executeViaEvent(toolCalls, config,
|
|
732
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
733
|
+
input) {
|
|
734
|
+
const outputs = await this.dispatchToolEvents(toolCalls, config);
|
|
450
735
|
return (Array.isArray(input) ? outputs : { messages: outputs });
|
|
451
736
|
}
|
|
452
737
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
453
738
|
async run(input, config) {
|
|
739
|
+
this.toolCallTurns.clear();
|
|
454
740
|
let outputs;
|
|
455
741
|
if (this.isSendInput(input)) {
|
|
456
|
-
|
|
742
|
+
const isDirectTool = this.directToolNames?.has(input.lg_tool_call.name);
|
|
743
|
+
if (this.eventDrivenMode && isDirectTool !== true) {
|
|
457
744
|
return this.executeViaEvent([input.lg_tool_call], config, input);
|
|
458
745
|
}
|
|
459
746
|
outputs = [await this.runTool(input.lg_tool_call, config)];
|
|
747
|
+
this.handleRunToolCompletions([input.lg_tool_call], outputs, config);
|
|
460
748
|
}
|
|
461
749
|
else {
|
|
462
750
|
let messages;
|
|
@@ -500,9 +788,26 @@ class ToolNode extends RunnableCallable {
|
|
|
500
788
|
!(call.id?.startsWith('srvtoolu_') ?? false));
|
|
501
789
|
}) ?? [];
|
|
502
790
|
if (this.eventDrivenMode && filteredCalls.length > 0) {
|
|
503
|
-
|
|
791
|
+
if (!this.directToolNames || this.directToolNames.size === 0) {
|
|
792
|
+
return this.executeViaEvent(filteredCalls, config, input);
|
|
793
|
+
}
|
|
794
|
+
const directCalls = filteredCalls.filter((c) => this.directToolNames.has(c.name));
|
|
795
|
+
const eventCalls = filteredCalls.filter((c) => !this.directToolNames.has(c.name));
|
|
796
|
+
const directOutputs = directCalls.length > 0
|
|
797
|
+
? await Promise.all(directCalls.map((call) => this.runTool(call, config)))
|
|
798
|
+
: [];
|
|
799
|
+
if (directCalls.length > 0 && directOutputs.length > 0) {
|
|
800
|
+
this.handleRunToolCompletions(directCalls, directOutputs, config);
|
|
801
|
+
}
|
|
802
|
+
const eventOutputs = eventCalls.length > 0
|
|
803
|
+
? await this.dispatchToolEvents(eventCalls, config)
|
|
804
|
+
: [];
|
|
805
|
+
outputs = [...directOutputs, ...eventOutputs];
|
|
806
|
+
}
|
|
807
|
+
else {
|
|
808
|
+
outputs = await Promise.all(filteredCalls.map((call) => this.runTool(call, config)));
|
|
809
|
+
this.handleRunToolCompletions(filteredCalls, outputs, config);
|
|
504
810
|
}
|
|
505
|
-
outputs = await Promise.all(filteredCalls.map((call) => this.runTool(call, config)));
|
|
506
811
|
}
|
|
507
812
|
if (!outputs.some(isCommand)) {
|
|
508
813
|
return (Array.isArray(input) ? outputs : { messages: outputs });
|
|
@@ -622,17 +927,15 @@ function areToolCallsInvoked(message, invokedToolIds) {
|
|
|
622
927
|
return (message.tool_calls?.every((toolCall) => toolCall.id != null && invokedToolIds.has(toolCall.id)) ?? false);
|
|
623
928
|
}
|
|
624
929
|
function toolsCondition(state, toolNode, invokedToolIds) {
|
|
625
|
-
const
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
930
|
+
const messages = Array.isArray(state) ? state : state.messages;
|
|
931
|
+
const message = messages[messages.length - 1];
|
|
932
|
+
if (message &&
|
|
933
|
+
'tool_calls' in message &&
|
|
629
934
|
(message.tool_calls?.length ?? 0) > 0 &&
|
|
630
935
|
!areToolCallsInvoked(message, invokedToolIds)) {
|
|
631
936
|
return toolNode;
|
|
632
937
|
}
|
|
633
|
-
|
|
634
|
-
return END;
|
|
635
|
-
}
|
|
938
|
+
return END;
|
|
636
939
|
}
|
|
637
940
|
|
|
638
941
|
export { ToolNode, toolsCondition };
|