@librechat/agents 3.2.32 → 3.2.33
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/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cjs/agents/AgentContext.cjs +844 -1046
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/constants.cjs +13 -13
- package/dist/cjs/common/constants.cjs.map +1 -1
- package/dist/cjs/common/enum.cjs +233 -240
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/common/index.cjs +2 -0
- package/dist/cjs/events.cjs +121 -169
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +1389 -1807
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +713 -945
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/graphs/index.cjs +2 -0
- package/dist/cjs/hitl/askUserQuestion.cjs +60 -62
- package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
- package/dist/cjs/hitl/index.cjs +1 -0
- package/dist/cjs/hooks/HookRegistry.cjs +176 -202
- package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
- package/dist/cjs/hooks/createToolPolicyHook.cjs +71 -101
- package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +170 -273
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/executeHooks.cjs +227 -282
- package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
- package/dist/cjs/hooks/index.cjs +6 -0
- package/dist/cjs/hooks/matchers.cjs +196 -230
- package/dist/cjs/hooks/matchers.cjs.map +1 -1
- package/dist/cjs/hooks/types.cjs +24 -24
- package/dist/cjs/hooks/types.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +110 -137
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/langchain/google-common.cjs +0 -3
- package/dist/cjs/langchain/index.cjs +80 -43
- package/dist/cjs/langchain/language_models/chat_models.cjs +0 -3
- package/dist/cjs/langchain/messages/tool.cjs +0 -3
- package/dist/cjs/langchain/messages.cjs +35 -18
- package/dist/cjs/langchain/openai.cjs +0 -3
- package/dist/cjs/langchain/prompts.cjs +5 -8
- package/dist/cjs/langchain/runnables.cjs +11 -10
- package/dist/cjs/langchain/tools.cjs +14 -11
- package/dist/cjs/langchain/utils/env.cjs +5 -8
- package/dist/cjs/langfuse.cjs +60 -79
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +267 -399
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +432 -562
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs +23 -47
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +441 -731
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -256
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/output_parsers.cjs +2 -0
- package/dist/cjs/llm/anthropic/utils/tools.cjs +12 -26
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +195 -240
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/toolCache.cjs +84 -106
- package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/index.cjs +2 -0
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +357 -620
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +105 -149
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/fake.cjs +86 -96
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +183 -237
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs +398 -674
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/zod_to_genai_parameters.cjs +2 -0
- package/dist/cjs/llm/init.cjs +44 -53
- package/dist/cjs/llm/init.cjs.map +1 -1
- package/dist/cjs/llm/invoke.cjs +142 -182
- package/dist/cjs/llm/invoke.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +991 -1276
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +189 -316
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +102 -153
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/toolCache.cjs +35 -44
- package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +29 -37
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/request.cjs +20 -33
- package/dist/cjs/llm/request.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +427 -453
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +547 -528
- package/dist/cjs/messages/anthropicToolCache.cjs +68 -119
- package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +305 -418
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/content.cjs +36 -49
- package/dist/cjs/messages/content.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs +112 -145
- package/dist/cjs/messages/contextPruning.cjs.map +1 -1
- package/dist/cjs/messages/contextPruningSettings.cjs +36 -46
- package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +256 -397
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +904 -1387
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/ids.cjs +16 -20
- package/dist/cjs/messages/ids.cjs.map +1 -1
- package/dist/cjs/messages/index.cjs +12 -0
- package/dist/cjs/messages/langchain.cjs +18 -18
- package/dist/cjs/messages/langchain.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +1054 -1517
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/recency.cjs +77 -95
- package/dist/cjs/messages/recency.cjs.map +1 -1
- package/dist/cjs/messages/reducer.cjs +63 -78
- package/dist/cjs/messages/reducer.cjs.map +1 -1
- package/dist/cjs/messages/tools.cjs +51 -79
- package/dist/cjs/messages/tools.cjs.map +1 -1
- package/dist/cjs/openai/index.cjs +171 -217
- package/dist/cjs/openai/index.cjs.map +1 -1
- package/dist/cjs/responses/index.cjs +302 -391
- package/dist/cjs/responses/index.cjs.map +1 -1
- package/dist/cjs/run.cjs +903 -1113
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +805 -986
- package/dist/cjs/session/AgentSession.cjs.map +1 -1
- package/dist/cjs/session/JsonlSessionStore.cjs +327 -410
- package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
- package/dist/cjs/session/handlers.cjs +192 -208
- package/dist/cjs/session/handlers.cjs.map +1 -1
- package/dist/cjs/session/ids.cjs +9 -10
- package/dist/cjs/session/ids.cjs.map +1 -1
- package/dist/cjs/session/index.cjs +4 -0
- package/dist/cjs/session/messageSerialization.cjs +94 -156
- package/dist/cjs/session/messageSerialization.cjs.map +1 -1
- package/dist/cjs/splitStream.cjs +147 -206
- package/dist/cjs/splitStream.cjs.map +1 -1
- package/dist/cjs/stream.cjs +856 -1344
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/index.cjs +57 -101
- package/dist/cjs/summarization/index.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +643 -796
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/BashExecutor.cjs +110 -136
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +165 -245
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/Calculator.cjs +36 -57
- package/dist/cjs/tools/Calculator.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +126 -168
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/CodeSessionFileSummary.cjs +36 -46
- package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +459 -649
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/ReadFile.cjs +17 -20
- package/dist/cjs/tools/ReadFile.cjs.map +1 -1
- package/dist/cjs/tools/SkillTool.cjs +26 -27
- package/dist/cjs/tools/SkillTool.cjs.map +1 -1
- package/dist/cjs/tools/SubagentTool.cjs +59 -61
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +2109 -2686
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/ToolSearch.cjs +663 -825
- package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +248 -340
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +170 -197
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +425 -520
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +91 -124
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/index.cjs +4 -0
- package/dist/cjs/tools/eagerEventExecution.cjs +75 -99
- package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +200 -262
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/local/CompileCheckTool.cjs +150 -212
- package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
- package/dist/cjs/tools/local/FileCheckpointer.cjs +77 -85
- package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalCodingTools.cjs +763 -1022
- package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs +666 -941
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionTools.cjs +49 -92
- package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +286 -354
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/local/attachments.cjs +108 -165
- package/dist/cjs/tools/local/attachments.cjs.map +1 -1
- package/dist/cjs/tools/local/bashAst.cjs +99 -113
- package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
- package/dist/cjs/tools/local/editStrategies.cjs +126 -169
- package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
- package/dist/cjs/tools/local/index.cjs +12 -0
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +136 -218
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/syntaxCheck.cjs +142 -161
- package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
- package/dist/cjs/tools/local/textEncoding.cjs +25 -23
- package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
- package/dist/cjs/tools/local/workspaceFS.cjs +38 -46
- package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
- package/dist/cjs/tools/ptcTimeout.cjs +27 -47
- package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
- package/dist/cjs/tools/schema.cjs +24 -23
- package/dist/cjs/tools/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs +24 -33
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
- package/dist/cjs/tools/search/content.cjs +95 -137
- package/dist/cjs/tools/search/content.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs +141 -172
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs +128 -196
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/highlights.cjs +165 -232
- package/dist/cjs/tools/search/highlights.cjs.map +1 -1
- package/dist/cjs/tools/search/index.cjs +2 -0
- package/dist/cjs/tools/search/rerankers.cjs +151 -174
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs +40 -39
- package/dist/cjs/tools/search/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +428 -530
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/serper-scraper.cjs +106 -127
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-scraper.cjs +129 -181
- package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-search.cjs +295 -359
- package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +260 -299
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +74 -117
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/tools/skillCatalog.cjs +54 -72
- package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
- package/dist/cjs/tools/streamedToolCallSeals.cjs +19 -36
- package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +612 -771
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/tools/subagent/index.cjs +1 -0
- package/dist/cjs/tools/toolOutputReferences.cjs +523 -630
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
- package/dist/cjs/utils/callbacks.cjs +11 -21
- package/dist/cjs/utils/callbacks.cjs.map +1 -1
- package/dist/cjs/utils/errors.cjs +70 -95
- package/dist/cjs/utils/errors.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs +32 -42
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/graph.cjs +8 -12
- package/dist/cjs/utils/graph.cjs.map +1 -1
- package/dist/cjs/utils/handlers.cjs +60 -82
- package/dist/cjs/utils/handlers.cjs.map +1 -1
- package/dist/cjs/utils/index.cjs +9 -0
- package/dist/cjs/utils/llm.cjs +19 -27
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/misc.cjs +30 -46
- package/dist/cjs/utils/misc.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs +50 -66
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/cjs/utils/schema.cjs +11 -19
- package/dist/cjs/utils/schema.cjs.map +1 -1
- package/dist/cjs/utils/title.cjs +71 -106
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +186 -283
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/cjs/utils/truncation.cjs +95 -114
- package/dist/cjs/utils/truncation.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +844 -1044
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/constants.mjs +13 -11
- package/dist/esm/common/constants.mjs.map +1 -1
- package/dist/esm/common/enum.mjs +221 -238
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/common/index.mjs +3 -0
- package/dist/esm/events.mjs +121 -167
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +1388 -1804
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +713 -943
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/graphs/index.mjs +3 -0
- package/dist/esm/hitl/askUserQuestion.mjs +60 -60
- package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
- package/dist/esm/hitl/index.mjs +2 -0
- package/dist/esm/hooks/HookRegistry.mjs +176 -200
- package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
- package/dist/esm/hooks/createToolPolicyHook.mjs +71 -99
- package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs +170 -271
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/executeHooks.mjs +227 -280
- package/dist/esm/hooks/executeHooks.mjs.map +1 -1
- package/dist/esm/hooks/index.mjs +7 -0
- package/dist/esm/hooks/matchers.mjs +196 -228
- package/dist/esm/hooks/matchers.mjs.map +1 -1
- package/dist/esm/hooks/types.mjs +24 -22
- package/dist/esm/hooks/types.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +109 -132
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/langchain/google-common.mjs +1 -2
- package/dist/esm/langchain/index.mjs +5 -5
- package/dist/esm/langchain/language_models/chat_models.mjs +1 -2
- package/dist/esm/langchain/messages/tool.mjs +1 -2
- package/dist/esm/langchain/messages.mjs +2 -2
- package/dist/esm/langchain/openai.mjs +1 -2
- package/dist/esm/langchain/prompts.mjs +2 -2
- package/dist/esm/langchain/runnables.mjs +2 -2
- package/dist/esm/langchain/tools.mjs +2 -2
- package/dist/esm/langchain/utils/env.mjs +2 -2
- package/dist/esm/langfuse.mjs +60 -76
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +267 -395
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +432 -559
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs +23 -45
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +439 -725
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -253
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/output_parsers.mjs +3 -0
- package/dist/esm/llm/anthropic/utils/tools.mjs +12 -24
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +195 -238
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/toolCache.mjs +84 -104
- package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/index.mjs +3 -0
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +357 -618
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs +105 -147
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/fake.mjs +86 -94
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +183 -235
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs +397 -666
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/google/utils/zod_to_genai_parameters.mjs +3 -0
- package/dist/esm/llm/init.mjs +44 -51
- package/dist/esm/llm/init.mjs.map +1 -1
- package/dist/esm/llm/invoke.mjs +142 -180
- package/dist/esm/llm/invoke.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +991 -1271
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +188 -312
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +102 -151
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/toolCache.mjs +35 -42
- package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +29 -34
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/request.mjs +20 -31
- package/dist/esm/llm/request.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +427 -449
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/main.mjs +99 -87
- package/dist/esm/messages/anthropicToolCache.mjs +68 -117
- package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +305 -416
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/content.mjs +36 -47
- package/dist/esm/messages/content.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs +112 -143
- package/dist/esm/messages/contextPruning.mjs.map +1 -1
- package/dist/esm/messages/contextPruningSettings.mjs +36 -44
- package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +254 -393
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +902 -1383
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/ids.mjs +16 -18
- package/dist/esm/messages/ids.mjs.map +1 -1
- package/dist/esm/messages/index.mjs +13 -0
- package/dist/esm/messages/langchain.mjs +18 -16
- package/dist/esm/messages/langchain.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +1053 -1514
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/recency.mjs +77 -93
- package/dist/esm/messages/recency.mjs.map +1 -1
- package/dist/esm/messages/reducer.mjs +63 -76
- package/dist/esm/messages/reducer.mjs.map +1 -1
- package/dist/esm/messages/tools.mjs +49 -75
- package/dist/esm/messages/tools.mjs.map +1 -1
- package/dist/esm/openai/index.mjs +170 -215
- package/dist/esm/openai/index.mjs.map +1 -1
- package/dist/esm/responses/index.mjs +301 -389
- package/dist/esm/responses/index.mjs.map +1 -1
- package/dist/esm/run.mjs +903 -1111
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +806 -985
- package/dist/esm/session/AgentSession.mjs.map +1 -1
- package/dist/esm/session/JsonlSessionStore.mjs +326 -407
- package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
- package/dist/esm/session/handlers.mjs +192 -206
- package/dist/esm/session/handlers.mjs.map +1 -1
- package/dist/esm/session/ids.mjs +9 -8
- package/dist/esm/session/ids.mjs.map +1 -1
- package/dist/esm/session/index.mjs +5 -0
- package/dist/esm/session/messageSerialization.mjs +94 -154
- package/dist/esm/session/messageSerialization.mjs.map +1 -1
- package/dist/esm/splitStream.mjs +147 -204
- package/dist/esm/splitStream.mjs.map +1 -1
- package/dist/esm/stream.mjs +854 -1341
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/index.mjs +57 -99
- package/dist/esm/summarization/index.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +640 -790
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/BashExecutor.mjs +103 -129
- package/dist/esm/tools/BashExecutor.mjs.map +1 -1
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs +162 -239
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/Calculator.mjs +34 -36
- package/dist/esm/tools/Calculator.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +123 -164
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/CodeSessionFileSummary.mjs +36 -44
- package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +454 -644
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/ReadFile.mjs +17 -18
- package/dist/esm/tools/ReadFile.mjs.map +1 -1
- package/dist/esm/tools/SkillTool.mjs +26 -25
- package/dist/esm/tools/SkillTool.mjs.map +1 -1
- package/dist/esm/tools/SubagentTool.mjs +59 -59
- package/dist/esm/tools/SubagentTool.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +2107 -2684
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/ToolSearch.mjs +659 -804
- package/dist/esm/tools/ToolSearch.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +248 -338
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +170 -195
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +424 -517
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +91 -122
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/index.mjs +5 -0
- package/dist/esm/tools/eagerEventExecution.mjs +75 -96
- package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +200 -260
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/local/CompileCheckTool.mjs +150 -210
- package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
- package/dist/esm/tools/local/FileCheckpointer.mjs +77 -83
- package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
- package/dist/esm/tools/local/LocalCodingTools.mjs +760 -1017
- package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionEngine.mjs +663 -936
- package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionTools.mjs +49 -90
- package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +283 -349
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/local/attachments.mjs +108 -163
- package/dist/esm/tools/local/attachments.mjs.map +1 -1
- package/dist/esm/tools/local/bashAst.mjs +99 -111
- package/dist/esm/tools/local/bashAst.mjs.map +1 -1
- package/dist/esm/tools/local/editStrategies.mjs +126 -167
- package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
- package/dist/esm/tools/local/index.mjs +13 -0
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +136 -216
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/syntaxCheck.mjs +138 -155
- package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
- package/dist/esm/tools/local/textEncoding.mjs +25 -21
- package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
- package/dist/esm/tools/local/workspaceFS.mjs +38 -44
- package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
- package/dist/esm/tools/ptcTimeout.mjs +27 -42
- package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
- package/dist/esm/tools/schema.mjs +24 -21
- package/dist/esm/tools/schema.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs +24 -31
- package/dist/esm/tools/search/anthropic.mjs.map +1 -1
- package/dist/esm/tools/search/content.mjs +93 -116
- package/dist/esm/tools/search/content.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs +139 -169
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs +128 -194
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/highlights.mjs +165 -230
- package/dist/esm/tools/search/highlights.mjs.map +1 -1
- package/dist/esm/tools/search/index.mjs +3 -0
- package/dist/esm/tools/search/rerankers.mjs +149 -168
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs +39 -37
- package/dist/esm/tools/search/schema.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +426 -528
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/serper-scraper.mjs +104 -124
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-scraper.mjs +127 -178
- package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-search.mjs +293 -357
- package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +259 -297
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +74 -115
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/tools/skillCatalog.mjs +54 -70
- package/dist/esm/tools/skillCatalog.mjs.map +1 -1
- package/dist/esm/tools/streamedToolCallSeals.mjs +19 -31
- package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +612 -768
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/tools/subagent/index.mjs +2 -0
- package/dist/esm/tools/toolOutputReferences.mjs +523 -624
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
- package/dist/esm/utils/callbacks.mjs +11 -19
- package/dist/esm/utils/callbacks.mjs.map +1 -1
- package/dist/esm/utils/errors.mjs +70 -93
- package/dist/esm/utils/errors.mjs.map +1 -1
- package/dist/esm/utils/events.mjs +32 -40
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/graph.mjs +8 -10
- package/dist/esm/utils/graph.mjs.map +1 -1
- package/dist/esm/utils/handlers.mjs +60 -80
- package/dist/esm/utils/handlers.mjs.map +1 -1
- package/dist/esm/utils/index.mjs +10 -0
- package/dist/esm/utils/llm.mjs +19 -25
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/misc.mjs +30 -44
- package/dist/esm/utils/misc.mjs.map +1 -1
- package/dist/esm/utils/run.mjs +50 -64
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/esm/utils/schema.mjs +11 -17
- package/dist/esm/utils/schema.mjs.map +1 -1
- package/dist/esm/utils/title.mjs +71 -104
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +186 -281
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/esm/utils/truncation.mjs +95 -112
- package/dist/esm/utils/truncation.mjs.map +1 -1
- package/dist/types/tools/search/tool.d.ts +17 -0
- package/dist/types/tools/search/types.d.ts +4 -0
- package/package.json +4 -10
- package/src/tools/search/highlights.ts +9 -1
- package/src/tools/search/search.ts +41 -3
- package/src/tools/search/source-processing.test.ts +373 -0
- package/src/tools/search/tool.ts +22 -2
- package/src/tools/search/types.ts +4 -0
- package/dist/cjs/langchain/google-common.cjs.map +0 -1
- package/dist/cjs/langchain/index.cjs.map +0 -1
- package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
- package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
- package/dist/cjs/langchain/messages.cjs.map +0 -1
- package/dist/cjs/langchain/openai.cjs.map +0 -1
- package/dist/cjs/langchain/prompts.cjs.map +0 -1
- package/dist/cjs/langchain/runnables.cjs.map +0 -1
- package/dist/cjs/langchain/tools.cjs.map +0 -1
- package/dist/cjs/langchain/utils/env.cjs.map +0 -1
- package/dist/cjs/main.cjs.map +0 -1
- package/dist/esm/langchain/google-common.mjs.map +0 -1
- package/dist/esm/langchain/index.mjs.map +0 -1
- package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
- package/dist/esm/langchain/messages/tool.mjs.map +0 -1
- package/dist/esm/langchain/messages.mjs.map +0 -1
- package/dist/esm/langchain/openai.mjs.map +0 -1
- package/dist/esm/langchain/prompts.mjs.map +0 -1
- package/dist/esm/langchain/runnables.mjs.map +0 -1
- package/dist/esm/langchain/tools.mjs.map +0 -1
- package/dist/esm/langchain/utils/env.mjs.map +0 -1
- package/dist/esm/main.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editStrategies.cjs","sources":["../../../../src/tools/local/editStrategies.ts"],"sourcesContent":["/**\n * Single-occurrence string-replacement strategies for `edit_file`.\n *\n * The LLM frequently emits an `oldString` whose whitespace, indentation,\n * or escape sequences are slightly off from the on-disk content. Rather\n * than failing the call (which forces a re-read + retry round-trip),\n * we walk a chain of progressively looser matchers, stopping at the\n * first one that locates exactly one match. The matched on-disk slice\n * is then literally replaced with `newString` — we never modify\n * `newString`, only the search.\n *\n * Strategies are ordered from strict to lenient so we don't accidentally\n * over-match a more specific pattern with a looser one. Inspired by\n * opencode's nine-strategy chain (sst/opencode), trimmed to the four\n * highest-yield strategies for a first cut. Add more (block-anchor +\n * Levenshtein, escape-normalized, etc.) as needed.\n */\n\nexport interface EditMatch {\n /** Strategy name that produced the match, for telemetry/diagnostics. */\n strategy: string;\n /** Starting offset in the source. */\n start: number;\n /** Ending offset (exclusive). */\n end: number;\n}\n\nexport type EditStrategy = (\n source: string,\n oldString: string\n) => EditMatch | null;\n\nconst exactStrategy: EditStrategy = (source, oldString) => {\n if (oldString === '') return null;\n const first = source.indexOf(oldString);\n if (first === -1) return null;\n const second = source.indexOf(oldString, first + oldString.length);\n if (second !== -1) return null;\n return { strategy: 'exact', start: first, end: first + oldString.length };\n};\n\n/**\n * Match per-line, ignoring trailing whitespace differences. Useful for\n * the very common case where the LLM stripped trailing spaces or added\n * an extra blank.\n */\nconst lineTrimmedStrategy: EditStrategy = (source, oldString) => {\n if (oldString === '') return null;\n const sourceLines = source.split('\\n');\n const oldLines = oldString.split('\\n');\n if (oldLines.length === 0 || oldLines.length > sourceLines.length) {\n return null;\n }\n\n let foundAt = -1;\n for (let i = 0; i <= sourceLines.length - oldLines.length; i++) {\n let ok = true;\n for (let j = 0; j < oldLines.length; j++) {\n if (sourceLines[i + j].trimEnd() !== oldLines[j].trimEnd()) {\n ok = false;\n break;\n }\n }\n if (!ok) continue;\n if (foundAt !== -1) return null; // multiple matches\n foundAt = i;\n }\n if (foundAt === -1) return null;\n\n let start = 0;\n for (let i = 0; i < foundAt; i++) start += sourceLines[i].length + 1;\n let end = start;\n for (let i = 0; i < oldLines.length; i++) {\n end += sourceLines[foundAt + i].length;\n if (i < oldLines.length - 1) end += 1;\n }\n return { strategy: 'line-trimmed', start, end };\n};\n\n/**\n * Collapse all runs of whitespace to a single space and match. Catches\n * cases where the LLM normalised tabs to spaces or vice-versa.\n */\nconst whitespaceNormalizedStrategy: EditStrategy = (source, oldString) => {\n if (oldString === '') return null;\n const norm = (s: string): string => s.replace(/\\s+/g, ' ').trim();\n const normalizedNeedle = norm(oldString);\n if (normalizedNeedle === '') return null;\n\n const sourceLines = source.split('\\n');\n const needleLines = oldString.split('\\n');\n if (needleLines.length > sourceLines.length) return null;\n\n let foundAt = -1;\n for (let i = 0; i <= sourceLines.length - needleLines.length; i++) {\n const candidate = sourceLines\n .slice(i, i + needleLines.length)\n .join('\\n');\n if (norm(candidate) !== normalizedNeedle) continue;\n if (foundAt !== -1) return null;\n foundAt = i;\n }\n if (foundAt === -1) return null;\n\n let start = 0;\n for (let i = 0; i < foundAt; i++) start += sourceLines[i].length + 1;\n let end = start;\n for (let i = 0; i < needleLines.length; i++) {\n end += sourceLines[foundAt + i].length;\n if (i < needleLines.length - 1) end += 1;\n }\n return { strategy: 'whitespace-normalized', start, end };\n};\n\n/**\n * Strip the common leading-indent from each line of the needle and\n * each candidate window of the source. Catches the very common case\n * where the LLM omitted the indentation it should have copied.\n */\nconst indentationFlexibleStrategy: EditStrategy = (source, oldString) => {\n if (oldString === '') return null;\n\n const stripCommonIndent = (block: string): string => {\n const lines = block.split('\\n');\n let common = Number.POSITIVE_INFINITY;\n for (const line of lines) {\n if (line.trim() === '') continue;\n const m = /^(\\s*)/.exec(line);\n const indent = m ? m[1].length : 0;\n if (indent < common) common = indent;\n if (common === 0) break;\n }\n if (!Number.isFinite(common) || common === 0) return block;\n return lines\n .map((l) => (l.length >= common ? l.slice(common) : l))\n .join('\\n');\n };\n\n const normalizedNeedle = stripCommonIndent(oldString);\n if (normalizedNeedle === '') return null;\n\n const sourceLines = source.split('\\n');\n const needleLines = oldString.split('\\n');\n if (needleLines.length > sourceLines.length) return null;\n\n let foundAt = -1;\n for (let i = 0; i <= sourceLines.length - needleLines.length; i++) {\n const window = sourceLines.slice(i, i + needleLines.length).join('\\n');\n if (stripCommonIndent(window) !== normalizedNeedle) continue;\n if (foundAt !== -1) return null;\n foundAt = i;\n }\n if (foundAt === -1) return null;\n\n let start = 0;\n for (let i = 0; i < foundAt; i++) start += sourceLines[i].length + 1;\n let end = start;\n for (let i = 0; i < needleLines.length; i++) {\n end += sourceLines[foundAt + i].length;\n if (i < needleLines.length - 1) end += 1;\n }\n return { strategy: 'indentation-flexible', start, end };\n};\n\nconst STRATEGY_CHAIN: EditStrategy[] = [\n exactStrategy,\n lineTrimmedStrategy,\n whitespaceNormalizedStrategy,\n indentationFlexibleStrategy,\n];\n\nexport function locateEdit(source: string, oldString: string): EditMatch | null {\n for (const strategy of STRATEGY_CHAIN) {\n const match = strategy(source, oldString);\n if (match != null) {\n return match;\n }\n }\n return null;\n}\n\nexport function applyEdit(\n source: string,\n match: EditMatch,\n newString: string\n): string {\n return source.slice(0, match.start) + newString + source.slice(match.end);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"editStrategies.cjs","names":[],"sources":["../../../../src/tools/local/editStrategies.ts"],"sourcesContent":["/**\n * Single-occurrence string-replacement strategies for `edit_file`.\n *\n * The LLM frequently emits an `oldString` whose whitespace, indentation,\n * or escape sequences are slightly off from the on-disk content. Rather\n * than failing the call (which forces a re-read + retry round-trip),\n * we walk a chain of progressively looser matchers, stopping at the\n * first one that locates exactly one match. The matched on-disk slice\n * is then literally replaced with `newString` — we never modify\n * `newString`, only the search.\n *\n * Strategies are ordered from strict to lenient so we don't accidentally\n * over-match a more specific pattern with a looser one. Inspired by\n * opencode's nine-strategy chain (sst/opencode), trimmed to the four\n * highest-yield strategies for a first cut. Add more (block-anchor +\n * Levenshtein, escape-normalized, etc.) as needed.\n */\n\nexport interface EditMatch {\n /** Strategy name that produced the match, for telemetry/diagnostics. */\n strategy: string;\n /** Starting offset in the source. */\n start: number;\n /** Ending offset (exclusive). */\n end: number;\n}\n\nexport type EditStrategy = (\n source: string,\n oldString: string\n) => EditMatch | null;\n\nconst exactStrategy: EditStrategy = (source, oldString) => {\n if (oldString === '') return null;\n const first = source.indexOf(oldString);\n if (first === -1) return null;\n const second = source.indexOf(oldString, first + oldString.length);\n if (second !== -1) return null;\n return { strategy: 'exact', start: first, end: first + oldString.length };\n};\n\n/**\n * Match per-line, ignoring trailing whitespace differences. Useful for\n * the very common case where the LLM stripped trailing spaces or added\n * an extra blank.\n */\nconst lineTrimmedStrategy: EditStrategy = (source, oldString) => {\n if (oldString === '') return null;\n const sourceLines = source.split('\\n');\n const oldLines = oldString.split('\\n');\n if (oldLines.length === 0 || oldLines.length > sourceLines.length) {\n return null;\n }\n\n let foundAt = -1;\n for (let i = 0; i <= sourceLines.length - oldLines.length; i++) {\n let ok = true;\n for (let j = 0; j < oldLines.length; j++) {\n if (sourceLines[i + j].trimEnd() !== oldLines[j].trimEnd()) {\n ok = false;\n break;\n }\n }\n if (!ok) continue;\n if (foundAt !== -1) return null; // multiple matches\n foundAt = i;\n }\n if (foundAt === -1) return null;\n\n let start = 0;\n for (let i = 0; i < foundAt; i++) start += sourceLines[i].length + 1;\n let end = start;\n for (let i = 0; i < oldLines.length; i++) {\n end += sourceLines[foundAt + i].length;\n if (i < oldLines.length - 1) end += 1;\n }\n return { strategy: 'line-trimmed', start, end };\n};\n\n/**\n * Collapse all runs of whitespace to a single space and match. Catches\n * cases where the LLM normalised tabs to spaces or vice-versa.\n */\nconst whitespaceNormalizedStrategy: EditStrategy = (source, oldString) => {\n if (oldString === '') return null;\n const norm = (s: string): string => s.replace(/\\s+/g, ' ').trim();\n const normalizedNeedle = norm(oldString);\n if (normalizedNeedle === '') return null;\n\n const sourceLines = source.split('\\n');\n const needleLines = oldString.split('\\n');\n if (needleLines.length > sourceLines.length) return null;\n\n let foundAt = -1;\n for (let i = 0; i <= sourceLines.length - needleLines.length; i++) {\n const candidate = sourceLines\n .slice(i, i + needleLines.length)\n .join('\\n');\n if (norm(candidate) !== normalizedNeedle) continue;\n if (foundAt !== -1) return null;\n foundAt = i;\n }\n if (foundAt === -1) return null;\n\n let start = 0;\n for (let i = 0; i < foundAt; i++) start += sourceLines[i].length + 1;\n let end = start;\n for (let i = 0; i < needleLines.length; i++) {\n end += sourceLines[foundAt + i].length;\n if (i < needleLines.length - 1) end += 1;\n }\n return { strategy: 'whitespace-normalized', start, end };\n};\n\n/**\n * Strip the common leading-indent from each line of the needle and\n * each candidate window of the source. Catches the very common case\n * where the LLM omitted the indentation it should have copied.\n */\nconst indentationFlexibleStrategy: EditStrategy = (source, oldString) => {\n if (oldString === '') return null;\n\n const stripCommonIndent = (block: string): string => {\n const lines = block.split('\\n');\n let common = Number.POSITIVE_INFINITY;\n for (const line of lines) {\n if (line.trim() === '') continue;\n const m = /^(\\s*)/.exec(line);\n const indent = m ? m[1].length : 0;\n if (indent < common) common = indent;\n if (common === 0) break;\n }\n if (!Number.isFinite(common) || common === 0) return block;\n return lines\n .map((l) => (l.length >= common ? l.slice(common) : l))\n .join('\\n');\n };\n\n const normalizedNeedle = stripCommonIndent(oldString);\n if (normalizedNeedle === '') return null;\n\n const sourceLines = source.split('\\n');\n const needleLines = oldString.split('\\n');\n if (needleLines.length > sourceLines.length) return null;\n\n let foundAt = -1;\n for (let i = 0; i <= sourceLines.length - needleLines.length; i++) {\n const window = sourceLines.slice(i, i + needleLines.length).join('\\n');\n if (stripCommonIndent(window) !== normalizedNeedle) continue;\n if (foundAt !== -1) return null;\n foundAt = i;\n }\n if (foundAt === -1) return null;\n\n let start = 0;\n for (let i = 0; i < foundAt; i++) start += sourceLines[i].length + 1;\n let end = start;\n for (let i = 0; i < needleLines.length; i++) {\n end += sourceLines[foundAt + i].length;\n if (i < needleLines.length - 1) end += 1;\n }\n return { strategy: 'indentation-flexible', start, end };\n};\n\nconst STRATEGY_CHAIN: EditStrategy[] = [\n exactStrategy,\n lineTrimmedStrategy,\n whitespaceNormalizedStrategy,\n indentationFlexibleStrategy,\n];\n\nexport function locateEdit(source: string, oldString: string): EditMatch | null {\n for (const strategy of STRATEGY_CHAIN) {\n const match = strategy(source, oldString);\n if (match != null) {\n return match;\n }\n }\n return null;\n}\n\nexport function applyEdit(\n source: string,\n match: EditMatch,\n newString: string\n): string {\n return source.slice(0, match.start) + newString + source.slice(match.end);\n}\n"],"mappings":";AAgCA,MAAM,iBAA+B,QAAQ,cAAc;CACzD,IAAI,cAAc,IAAI,OAAO;CAC7B,MAAM,QAAQ,OAAO,QAAQ,SAAS;CACtC,IAAI,UAAU,IAAI,OAAO;CAEzB,IADe,OAAO,QAAQ,WAAW,QAAQ,UAAU,MAClD,MAAM,IAAI,OAAO;CAC1B,OAAO;EAAE,UAAU;EAAS,OAAO;EAAO,KAAK,QAAQ,UAAU;CAAO;AAC1E;;;;;;AAOA,MAAM,uBAAqC,QAAQ,cAAc;CAC/D,IAAI,cAAc,IAAI,OAAO;CAC7B,MAAM,cAAc,OAAO,MAAM,IAAI;CACrC,MAAM,WAAW,UAAU,MAAM,IAAI;CACrC,IAAI,SAAS,WAAW,KAAK,SAAS,SAAS,YAAY,QACzD,OAAO;CAGT,IAAI,UAAU;CACd,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,SAAS,SAAS,QAAQ,KAAK;EAC9D,IAAI,KAAK;EACT,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KACnC,IAAI,YAAY,IAAI,EAAE,CAAC,QAAQ,MAAM,SAAS,EAAE,CAAC,QAAQ,GAAG;GAC1D,KAAK;GACL;EACF;EAEF,IAAI,CAAC,IAAI;EACT,IAAI,YAAY,IAAI,OAAO;EAC3B,UAAU;CACZ;CACA,IAAI,YAAY,IAAI,OAAO;CAE3B,IAAI,QAAQ;CACZ,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK,SAAS,YAAY,EAAE,CAAC,SAAS;CACnE,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,OAAO,YAAY,UAAU,EAAE,CAAC;EAChC,IAAI,IAAI,SAAS,SAAS,GAAG,OAAO;CACtC;CACA,OAAO;EAAE,UAAU;EAAgB;EAAO;CAAI;AAChD;;;;;AAMA,MAAM,gCAA8C,QAAQ,cAAc;CACxE,IAAI,cAAc,IAAI,OAAO;CAC7B,MAAM,QAAQ,MAAsB,EAAE,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAAK;CAChE,MAAM,mBAAmB,KAAK,SAAS;CACvC,IAAI,qBAAqB,IAAI,OAAO;CAEpC,MAAM,cAAc,OAAO,MAAM,IAAI;CACrC,MAAM,cAAc,UAAU,MAAM,IAAI;CACxC,IAAI,YAAY,SAAS,YAAY,QAAQ,OAAO;CAEpD,IAAI,UAAU;CACd,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,SAAS,YAAY,QAAQ,KAAK;EAIjE,IAAI,KAHc,YACf,MAAM,GAAG,IAAI,YAAY,MAAM,CAAC,CAChC,KAAK,IACS,CAAC,MAAM,kBAAkB;EAC1C,IAAI,YAAY,IAAI,OAAO;EAC3B,UAAU;CACZ;CACA,IAAI,YAAY,IAAI,OAAO;CAE3B,IAAI,QAAQ;CACZ,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK,SAAS,YAAY,EAAE,CAAC,SAAS;CACnE,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;EAC3C,OAAO,YAAY,UAAU,EAAE,CAAC;EAChC,IAAI,IAAI,YAAY,SAAS,GAAG,OAAO;CACzC;CACA,OAAO;EAAE,UAAU;EAAyB;EAAO;CAAI;AACzD;;;;;;AAOA,MAAM,+BAA6C,QAAQ,cAAc;CACvE,IAAI,cAAc,IAAI,OAAO;CAE7B,MAAM,qBAAqB,UAA0B;EACnD,MAAM,QAAQ,MAAM,MAAM,IAAI;EAC9B,IAAI,SAAS,OAAO;EACpB,KAAK,MAAM,QAAQ,OAAO;GACxB,IAAI,KAAK,KAAK,MAAM,IAAI;GACxB,MAAM,IAAI,SAAS,KAAK,IAAI;GAC5B,MAAM,SAAS,IAAI,EAAE,EAAE,CAAC,SAAS;GACjC,IAAI,SAAS,QAAQ,SAAS;GAC9B,IAAI,WAAW,GAAG;EACpB;EACA,IAAI,CAAC,OAAO,SAAS,MAAM,KAAK,WAAW,GAAG,OAAO;EACrD,OAAO,MACJ,KAAK,MAAO,EAAE,UAAU,SAAS,EAAE,MAAM,MAAM,IAAI,CAAE,CAAC,CACtD,KAAK,IAAI;CACd;CAEA,MAAM,mBAAmB,kBAAkB,SAAS;CACpD,IAAI,qBAAqB,IAAI,OAAO;CAEpC,MAAM,cAAc,OAAO,MAAM,IAAI;CACrC,MAAM,cAAc,UAAU,MAAM,IAAI;CACxC,IAAI,YAAY,SAAS,YAAY,QAAQ,OAAO;CAEpD,IAAI,UAAU;CACd,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,SAAS,YAAY,QAAQ,KAAK;EAEjE,IAAI,kBADW,YAAY,MAAM,GAAG,IAAI,YAAY,MAAM,CAAC,CAAC,KAAK,IACtC,CAAC,MAAM,kBAAkB;EACpD,IAAI,YAAY,IAAI,OAAO;EAC3B,UAAU;CACZ;CACA,IAAI,YAAY,IAAI,OAAO;CAE3B,IAAI,QAAQ;CACZ,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,KAAK,SAAS,YAAY,EAAE,CAAC,SAAS;CACnE,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;EAC3C,OAAO,YAAY,UAAU,EAAE,CAAC;EAChC,IAAI,IAAI,YAAY,SAAS,GAAG,OAAO;CACzC;CACA,OAAO;EAAE,UAAU;EAAwB;EAAO;CAAI;AACxD;AAEA,MAAM,iBAAiC;CACrC;CACA;CACA;CACA;AACF;AAEA,SAAgB,WAAW,QAAgB,WAAqC;CAC9E,KAAK,MAAM,YAAY,gBAAgB;EACrC,MAAM,QAAQ,SAAS,QAAQ,SAAS;EACxC,IAAI,SAAS,MACX,OAAO;CAEX;CACA,OAAO;AACT;AAEA,SAAgB,UACd,QACA,OACA,WACQ;CACR,OAAO,OAAO,MAAM,GAAG,MAAM,KAAK,IAAI,YAAY,OAAO,MAAM,MAAM,GAAG;AAC1E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require("./bashAst.cjs");
|
|
2
|
+
require("./LocalExecutionEngine.cjs");
|
|
3
|
+
require("./CompileCheckTool.cjs");
|
|
4
|
+
require("./FileCheckpointer.cjs");
|
|
5
|
+
require("./LocalProgrammaticToolCalling.cjs");
|
|
6
|
+
require("./LocalExecutionTools.cjs");
|
|
7
|
+
require("./attachments.cjs");
|
|
8
|
+
require("./editStrategies.cjs");
|
|
9
|
+
require("./textEncoding.cjs");
|
|
10
|
+
require("./syntaxCheck.cjs");
|
|
11
|
+
require("./LocalCodingTools.cjs");
|
|
12
|
+
require("./resolveLocalExecutionTools.cjs");
|
|
@@ -1,245 +1,163 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require(
|
|
5
|
-
require(
|
|
6
|
-
require(
|
|
7
|
-
require(
|
|
8
|
-
|
|
9
|
-
var CloudflareSandboxTools = require('../cloudflare/CloudflareSandboxTools.cjs');
|
|
10
|
-
var LocalCodingTools = require('./LocalCodingTools.cjs');
|
|
11
|
-
var LocalExecutionTools = require('./LocalExecutionTools.cjs');
|
|
12
|
-
var _enum = require('../../common/enum.cjs');
|
|
13
|
-
|
|
1
|
+
const require_enum = require("../../common/enum.cjs");
|
|
2
|
+
require("../../common/index.cjs");
|
|
3
|
+
const require_LocalProgrammaticToolCalling = require("./LocalProgrammaticToolCalling.cjs");
|
|
4
|
+
const require_LocalExecutionTools = require("./LocalExecutionTools.cjs");
|
|
5
|
+
const require_LocalCodingTools = require("./LocalCodingTools.cjs");
|
|
6
|
+
const require_CloudflareSandboxTools = require("../cloudflare/CloudflareSandboxTools.cjs");
|
|
7
|
+
require("../cloudflare/index.cjs");
|
|
8
|
+
//#region src/tools/local/resolveLocalExecutionTools.ts
|
|
14
9
|
function shouldUseLocalExecution(config) {
|
|
15
|
-
|
|
10
|
+
return config?.engine === "local";
|
|
16
11
|
}
|
|
17
12
|
function shouldUseCloudflareSandboxExecution(config) {
|
|
18
|
-
|
|
13
|
+
return config?.engine === "cloudflare-sandbox";
|
|
19
14
|
}
|
|
20
15
|
function shouldIncludeCodingTools(config) {
|
|
21
|
-
|
|
22
|
-
config?.local?.includeCodingTools !== false) ||
|
|
23
|
-
(shouldUseCloudflareSandboxExecution(config) &&
|
|
24
|
-
config?.cloudflare?.includeCodingTools !== false));
|
|
16
|
+
return shouldUseLocalExecution(config) && config?.local?.includeCodingTools !== false || shouldUseCloudflareSandboxExecution(config) && config?.cloudflare?.includeCodingTools !== false;
|
|
25
17
|
}
|
|
26
18
|
function getCloudflareConfig(config) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
return config.cloudflare;
|
|
19
|
+
if (config?.cloudflare == null) throw new Error("toolExecution.cloudflare is required when engine is \"cloudflare-sandbox\".");
|
|
20
|
+
return config.cloudflare;
|
|
31
21
|
}
|
|
32
22
|
function getSelectedCloudflareCodingToolNames(config) {
|
|
33
|
-
|
|
23
|
+
return new Set(config.codingToolNames ?? require_enum.LOCAL_CODING_BUNDLE_NAMES);
|
|
34
24
|
}
|
|
35
25
|
function filterCloudflareCodingToolAllowlist(tools, selectedNames) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
return (!_enum.LOCAL_CODING_BUNDLE_NAMES.includes(existingTool.name) ||
|
|
45
|
-
selectedNames.has(existingTool.name));
|
|
46
|
-
});
|
|
26
|
+
const existingTools = tools ?? [];
|
|
27
|
+
if (existingTools.length === 0) return tools;
|
|
28
|
+
return existingTools.filter((existingTool) => {
|
|
29
|
+
if (!("name" in existingTool) || typeof existingTool.name !== "string") return true;
|
|
30
|
+
return !require_enum.LOCAL_CODING_BUNDLE_NAMES.includes(existingTool.name) || selectedNames.has(existingTool.name);
|
|
31
|
+
});
|
|
47
32
|
}
|
|
48
33
|
function pruneCloudflareCodingToolAllowlist(toolMap, selectedNames) {
|
|
49
|
-
|
|
50
|
-
if (!selectedNames.has(name)) {
|
|
51
|
-
toolMap.delete(name);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
34
|
+
for (const name of require_enum.LOCAL_CODING_BUNDLE_NAMES) if (!selectedNames.has(name)) toolMap.delete(name);
|
|
54
35
|
}
|
|
55
36
|
function createLocalExecutionTool(name, config) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
case _enum.Constants.BASH_PROGRAMMATIC_TOOL_CALLING:
|
|
64
|
-
return LocalProgrammaticToolCalling.createLocalBashProgrammaticToolCallingTool(config);
|
|
65
|
-
default:
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
37
|
+
switch (name) {
|
|
38
|
+
case "execute_code": return require_LocalExecutionTools.createLocalCodeExecutionTool(config);
|
|
39
|
+
case "bash_tool": return require_LocalExecutionTools.createLocalBashExecutionTool({ config });
|
|
40
|
+
case "run_tools_with_code": return require_LocalProgrammaticToolCalling.createLocalProgrammaticToolCallingTool(config);
|
|
41
|
+
case "run_tools_with_bash": return require_LocalProgrammaticToolCalling.createLocalBashProgrammaticToolCallingTool(config);
|
|
42
|
+
default: return;
|
|
43
|
+
}
|
|
68
44
|
}
|
|
69
45
|
function mergeToolsByName(baseTools, localTools) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
return orderedTools;
|
|
46
|
+
const orderedTools = [];
|
|
47
|
+
const indexByName = /* @__PURE__ */ new Map();
|
|
48
|
+
for (const tool of baseTools ?? []) {
|
|
49
|
+
if ("name" in tool && typeof tool.name === "string") indexByName.set(tool.name, orderedTools.length);
|
|
50
|
+
orderedTools.push(tool);
|
|
51
|
+
}
|
|
52
|
+
for (const tool of localTools) {
|
|
53
|
+
const existingIndex = indexByName.get(tool.name);
|
|
54
|
+
if (existingIndex == null) {
|
|
55
|
+
indexByName.set(tool.name, orderedTools.length);
|
|
56
|
+
orderedTools.push(tool);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
orderedTools[existingIndex] = tool;
|
|
60
|
+
}
|
|
61
|
+
return orderedTools;
|
|
88
62
|
}
|
|
89
63
|
function resolveLocalToolsForBinding(args) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
.map((existingTool) => CloudflareSandboxTools.createCloudflareExecutionTool(existingTool.name, cloudflareConfig))
|
|
105
|
-
.filter((cloudflareTool) => cloudflareTool != null);
|
|
106
|
-
return replacements.length === 0
|
|
107
|
-
? args.tools
|
|
108
|
-
: mergeToolsByName(args.tools, replacements);
|
|
109
|
-
}
|
|
110
|
-
const localConfig = args.toolExecution?.local ?? {};
|
|
111
|
-
if (shouldIncludeCodingTools(args.toolExecution)) {
|
|
112
|
-
return mergeToolsByName(args.tools, LocalCodingTools.createLocalCodingTools(localConfig));
|
|
113
|
-
}
|
|
114
|
-
const replacements = (args.tools ?? [])
|
|
115
|
-
.filter((existingTool) => 'name' in existingTool &&
|
|
116
|
-
typeof existingTool.name === 'string' &&
|
|
117
|
-
_enum.CODE_EXECUTION_TOOLS.has(existingTool.name))
|
|
118
|
-
.map((existingTool) => createLocalExecutionTool(existingTool.name, localConfig))
|
|
119
|
-
.filter((localTool) => localTool != null);
|
|
120
|
-
return replacements.length === 0
|
|
121
|
-
? args.tools
|
|
122
|
-
: mergeToolsByName(args.tools, replacements);
|
|
64
|
+
if (!shouldUseLocalExecution(args.toolExecution) && !shouldUseCloudflareSandboxExecution(args.toolExecution)) return args.tools;
|
|
65
|
+
if (shouldUseCloudflareSandboxExecution(args.toolExecution)) {
|
|
66
|
+
const cloudflareConfig = getCloudflareConfig(args.toolExecution);
|
|
67
|
+
if (shouldIncludeCodingTools(args.toolExecution)) {
|
|
68
|
+
const selectedNames = getSelectedCloudflareCodingToolNames(cloudflareConfig);
|
|
69
|
+
return mergeToolsByName(filterCloudflareCodingToolAllowlist(args.tools, selectedNames), require_CloudflareSandboxTools.createCloudflareCodingTools(cloudflareConfig));
|
|
70
|
+
}
|
|
71
|
+
const replacements = (args.tools ?? []).filter((existingTool) => "name" in existingTool && typeof existingTool.name === "string" && require_enum.CODE_EXECUTION_TOOLS.has(existingTool.name)).map((existingTool) => require_CloudflareSandboxTools.createCloudflareExecutionTool(existingTool.name, cloudflareConfig)).filter((cloudflareTool) => cloudflareTool != null);
|
|
72
|
+
return replacements.length === 0 ? args.tools : mergeToolsByName(args.tools, replacements);
|
|
73
|
+
}
|
|
74
|
+
const localConfig = args.toolExecution?.local ?? {};
|
|
75
|
+
if (shouldIncludeCodingTools(args.toolExecution)) return mergeToolsByName(args.tools, require_LocalCodingTools.createLocalCodingTools(localConfig));
|
|
76
|
+
const replacements = (args.tools ?? []).filter((existingTool) => "name" in existingTool && typeof existingTool.name === "string" && require_enum.CODE_EXECUTION_TOOLS.has(existingTool.name)).map((existingTool) => createLocalExecutionTool(existingTool.name, localConfig)).filter((localTool) => localTool != null);
|
|
77
|
+
return replacements.length === 0 ? args.tools : mergeToolsByName(args.tools, replacements);
|
|
123
78
|
}
|
|
124
79
|
function resolveLocalToolRegistry(args) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
registry.set(definition.name, definition);
|
|
138
|
-
}
|
|
139
|
-
return registry;
|
|
80
|
+
if (!shouldIncludeCodingTools(args.toolExecution)) return args.toolRegistry;
|
|
81
|
+
const registry = new Map(args.toolRegistry ?? []);
|
|
82
|
+
const selectedNames = shouldUseCloudflareSandboxExecution(args.toolExecution) ? getSelectedCloudflareCodingToolNames(getCloudflareConfig(args.toolExecution)) : void 0;
|
|
83
|
+
for (const definition of require_LocalCodingTools.createLocalCodingToolDefinitions()) {
|
|
84
|
+
if (selectedNames != null && !selectedNames.has(definition.name)) {
|
|
85
|
+
registry.delete(definition.name);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
registry.set(definition.name, definition);
|
|
89
|
+
}
|
|
90
|
+
return registry;
|
|
140
91
|
}
|
|
141
92
|
function resolveLocalExecutionTools(args) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
directToolNames.add(localTool.name);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
for (const localTool of LocalCodingTools.createLocalCodingTools(localConfig)) {
|
|
211
|
-
toolMap.set(localTool.name, localTool);
|
|
212
|
-
directToolNames.add(localTool.name);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
// When the coding-tool bundle was already installed above, it
|
|
217
|
-
// already created `bash_tool` / `execute_code` / programmatic-tool
|
|
218
|
-
// variants. Skip re-creating them here — the audit-of-audit (manual
|
|
219
|
-
// finding #4) flagged that the original loop overwrote those bundle
|
|
220
|
-
// instances with fresh ones via `createLocalExecutionTool`, wasting
|
|
221
|
-
// work and (more importantly) replacing tools the bundle had
|
|
222
|
-
// already wired up with shared state. The CODE_EXECUTION_TOOLS
|
|
223
|
-
// loop is now only relevant when the host pre-bound a tool with
|
|
224
|
-
// one of these names (the `toolMap.has(name)` branch) and coding
|
|
225
|
-
// tools are off.
|
|
226
|
-
const includeCodingTools = shouldIncludeCodingTools(args.toolExecution);
|
|
227
|
-
for (const name of _enum.CODE_EXECUTION_TOOLS) {
|
|
228
|
-
if (includeCodingTools)
|
|
229
|
-
continue;
|
|
230
|
-
if (!toolMap.has(name))
|
|
231
|
-
continue;
|
|
232
|
-
const localTool = createLocalExecutionTool(name, localConfig);
|
|
233
|
-
if (localTool == null) {
|
|
234
|
-
continue;
|
|
235
|
-
}
|
|
236
|
-
toolMap.set(name, localTool);
|
|
237
|
-
directToolNames.add(name);
|
|
238
|
-
}
|
|
239
|
-
return { toolMap, directToolNames, fileCheckpointer };
|
|
93
|
+
const directToolNames = /* @__PURE__ */ new Set();
|
|
94
|
+
if (!shouldUseLocalExecution(args.toolExecution) && !shouldUseCloudflareSandboxExecution(args.toolExecution)) return {
|
|
95
|
+
toolMap: args.toolMap,
|
|
96
|
+
directToolNames
|
|
97
|
+
};
|
|
98
|
+
const toolMap = new Map(args.toolMap);
|
|
99
|
+
let fileCheckpointer;
|
|
100
|
+
if (shouldUseCloudflareSandboxExecution(args.toolExecution)) {
|
|
101
|
+
const cloudflareConfig = getCloudflareConfig(args.toolExecution);
|
|
102
|
+
if (shouldIncludeCodingTools(args.toolExecution)) {
|
|
103
|
+
pruneCloudflareCodingToolAllowlist(toolMap, getSelectedCloudflareCodingToolNames(cloudflareConfig));
|
|
104
|
+
if (cloudflareConfig.fileCheckpointing === true || args.fileCheckpointer != null) {
|
|
105
|
+
const bundle = require_CloudflareSandboxTools.createCloudflareCodingToolBundle(cloudflareConfig, { checkpointer: args.fileCheckpointer });
|
|
106
|
+
fileCheckpointer = bundle.checkpointer;
|
|
107
|
+
for (const cloudflareTool of bundle.tools) {
|
|
108
|
+
toolMap.set(cloudflareTool.name, cloudflareTool);
|
|
109
|
+
directToolNames.add(cloudflareTool.name);
|
|
110
|
+
}
|
|
111
|
+
} else for (const cloudflareTool of require_CloudflareSandboxTools.createCloudflareCodingTools(cloudflareConfig)) {
|
|
112
|
+
toolMap.set(cloudflareTool.name, cloudflareTool);
|
|
113
|
+
directToolNames.add(cloudflareTool.name);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const includeCodingTools = shouldIncludeCodingTools(args.toolExecution);
|
|
117
|
+
for (const name of require_enum.CODE_EXECUTION_TOOLS) {
|
|
118
|
+
if (includeCodingTools) continue;
|
|
119
|
+
if (!toolMap.has(name)) continue;
|
|
120
|
+
const cloudflareTool = require_CloudflareSandboxTools.createCloudflareExecutionTool(name, cloudflareConfig);
|
|
121
|
+
if (cloudflareTool == null) continue;
|
|
122
|
+
toolMap.set(name, cloudflareTool);
|
|
123
|
+
directToolNames.add(name);
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
toolMap,
|
|
127
|
+
directToolNames,
|
|
128
|
+
fileCheckpointer
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const localConfig = args.toolExecution?.local ?? {};
|
|
132
|
+
if (shouldIncludeCodingTools(args.toolExecution)) if (localConfig.fileCheckpointing === true || args.fileCheckpointer != null) {
|
|
133
|
+
const bundle = require_LocalCodingTools.createLocalCodingToolBundle(localConfig, { checkpointer: args.fileCheckpointer });
|
|
134
|
+
fileCheckpointer = bundle.checkpointer;
|
|
135
|
+
for (const localTool of bundle.tools) {
|
|
136
|
+
toolMap.set(localTool.name, localTool);
|
|
137
|
+
directToolNames.add(localTool.name);
|
|
138
|
+
}
|
|
139
|
+
} else for (const localTool of require_LocalCodingTools.createLocalCodingTools(localConfig)) {
|
|
140
|
+
toolMap.set(localTool.name, localTool);
|
|
141
|
+
directToolNames.add(localTool.name);
|
|
142
|
+
}
|
|
143
|
+
const includeCodingTools = shouldIncludeCodingTools(args.toolExecution);
|
|
144
|
+
for (const name of require_enum.CODE_EXECUTION_TOOLS) {
|
|
145
|
+
if (includeCodingTools) continue;
|
|
146
|
+
if (!toolMap.has(name)) continue;
|
|
147
|
+
const localTool = createLocalExecutionTool(name, localConfig);
|
|
148
|
+
if (localTool == null) continue;
|
|
149
|
+
toolMap.set(name, localTool);
|
|
150
|
+
directToolNames.add(name);
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
toolMap,
|
|
154
|
+
directToolNames,
|
|
155
|
+
fileCheckpointer
|
|
156
|
+
};
|
|
240
157
|
}
|
|
241
|
-
|
|
158
|
+
//#endregion
|
|
242
159
|
exports.resolveLocalExecutionTools = resolveLocalExecutionTools;
|
|
243
160
|
exports.resolveLocalToolRegistry = resolveLocalToolRegistry;
|
|
244
161
|
exports.resolveLocalToolsForBinding = resolveLocalToolsForBinding;
|
|
245
|
-
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=resolveLocalExecutionTools.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveLocalExecutionTools.cjs","sources":["../../../../src/tools/local/resolveLocalExecutionTools.ts"],"sourcesContent":["import type * as t from '@/types';\nimport {\n createLocalBashProgrammaticToolCallingTool,\n createLocalProgrammaticToolCallingTool,\n} from './LocalProgrammaticToolCalling';\nimport {\n createCloudflareCodingToolBundle,\n createCloudflareCodingTools,\n createCloudflareExecutionTool,\n} from '@/tools/cloudflare';\nimport {\n createLocalCodingToolBundle,\n createLocalCodingToolDefinitions,\n createLocalCodingTools,\n} from './LocalCodingTools';\nimport {\n createLocalBashExecutionTool,\n createLocalCodeExecutionTool,\n} from './LocalExecutionTools';\nimport {\n Constants,\n CODE_EXECUTION_TOOLS,\n LOCAL_CODING_BUNDLE_NAMES,\n} from '@/common';\n\ntype ResolveLocalToolsResult = {\n toolMap: t.ToolMap;\n directToolNames: Set<string>;\n /**\n * Set when `local.fileCheckpointing === true` AND the auto-bind\n * coding suite is in use. ToolNode stashes this on the node and\n * exposes it via `getFileCheckpointer()` so the host can call\n * `rewind()` after a failed batch. Manual review (finding E)\n * flagged that the config flag was previously a no-op in the\n * Run/ToolNode auto-bind path — only direct\n * `createLocalCodingToolBundle()` callers could access the\n * checkpointer.\n */\n fileCheckpointer?: t.LocalFileCheckpointer;\n};\n\nfunction shouldUseLocalExecution(config?: t.ToolExecutionConfig): boolean {\n return config?.engine === 'local';\n}\n\nfunction shouldUseCloudflareSandboxExecution(\n config?: t.ToolExecutionConfig\n): boolean {\n return config?.engine === 'cloudflare-sandbox';\n}\n\nfunction shouldIncludeCodingTools(config?: t.ToolExecutionConfig): boolean {\n return (\n (shouldUseLocalExecution(config) &&\n config?.local?.includeCodingTools !== false) ||\n (shouldUseCloudflareSandboxExecution(config) &&\n config?.cloudflare?.includeCodingTools !== false)\n );\n}\n\nfunction getCloudflareConfig(\n config?: t.ToolExecutionConfig\n): t.CloudflareSandboxExecutionConfig {\n if (config?.cloudflare == null) {\n throw new Error(\n 'toolExecution.cloudflare is required when engine is \"cloudflare-sandbox\".'\n );\n }\n return config.cloudflare;\n}\n\nfunction getSelectedCloudflareCodingToolNames(\n config: t.CloudflareSandboxExecutionConfig\n): Set<string> {\n return new Set(config.codingToolNames ?? LOCAL_CODING_BUNDLE_NAMES);\n}\n\nfunction filterCloudflareCodingToolAllowlist(\n tools: t.GraphTools | undefined,\n selectedNames: Set<string>\n): t.GraphTools | undefined {\n const existingTools = (tools as t.GenericTool[] | undefined) ?? [];\n if (existingTools.length === 0) {\n return tools;\n }\n return existingTools.filter((existingTool) => {\n if (!('name' in existingTool) || typeof existingTool.name !== 'string') {\n return true;\n }\n return (\n !LOCAL_CODING_BUNDLE_NAMES.includes(existingTool.name) ||\n selectedNames.has(existingTool.name)\n );\n });\n}\n\nfunction pruneCloudflareCodingToolAllowlist(\n toolMap: t.ToolMap,\n selectedNames: Set<string>\n): void {\n for (const name of LOCAL_CODING_BUNDLE_NAMES) {\n if (!selectedNames.has(name)) {\n toolMap.delete(name);\n }\n }\n}\n\nfunction createLocalExecutionTool(\n name: string,\n config: t.LocalExecutionConfig\n): t.GenericTool | undefined {\n switch (name) {\n case Constants.EXECUTE_CODE:\n return createLocalCodeExecutionTool(config);\n case Constants.BASH_TOOL:\n return createLocalBashExecutionTool({ config });\n case Constants.PROGRAMMATIC_TOOL_CALLING:\n return createLocalProgrammaticToolCallingTool(config);\n case Constants.BASH_PROGRAMMATIC_TOOL_CALLING:\n return createLocalBashProgrammaticToolCallingTool(config);\n default:\n return undefined;\n }\n}\n\nfunction mergeToolsByName(\n baseTools: t.GraphTools | undefined,\n localTools: t.GenericTool[]\n): t.GraphTools {\n const orderedTools: t.GenericTool[] = [];\n const indexByName = new Map<string, number>();\n\n for (const tool of (baseTools as t.GenericTool[] | undefined) ?? []) {\n if ('name' in tool && typeof tool.name === 'string') {\n indexByName.set(tool.name, orderedTools.length);\n }\n orderedTools.push(tool);\n }\n\n for (const tool of localTools) {\n const existingIndex = indexByName.get(tool.name);\n if (existingIndex == null) {\n indexByName.set(tool.name, orderedTools.length);\n orderedTools.push(tool);\n continue;\n }\n orderedTools[existingIndex] = tool;\n }\n\n return orderedTools;\n}\n\nexport function resolveLocalToolsForBinding(args: {\n tools?: t.GraphTools;\n toolExecution?: t.ToolExecutionConfig;\n}): t.GraphTools | undefined {\n if (\n !shouldUseLocalExecution(args.toolExecution) &&\n !shouldUseCloudflareSandboxExecution(args.toolExecution)\n ) {\n return args.tools;\n }\n\n if (shouldUseCloudflareSandboxExecution(args.toolExecution)) {\n const cloudflareConfig = getCloudflareConfig(args.toolExecution);\n if (shouldIncludeCodingTools(args.toolExecution)) {\n const selectedNames =\n getSelectedCloudflareCodingToolNames(cloudflareConfig);\n return mergeToolsByName(\n filterCloudflareCodingToolAllowlist(args.tools, selectedNames),\n createCloudflareCodingTools(cloudflareConfig)\n );\n }\n\n const replacements = ((args.tools as t.GenericTool[] | undefined) ?? [])\n .filter(\n (existingTool): existingTool is t.GenericTool & { name: string } =>\n 'name' in existingTool &&\n typeof existingTool.name === 'string' &&\n CODE_EXECUTION_TOOLS.has(existingTool.name)\n )\n .map((existingTool) =>\n createCloudflareExecutionTool(existingTool.name, cloudflareConfig)\n )\n .filter(\n (cloudflareTool): cloudflareTool is t.GenericTool =>\n cloudflareTool != null\n );\n\n return replacements.length === 0\n ? args.tools\n : mergeToolsByName(args.tools, replacements);\n }\n\n const localConfig = args.toolExecution?.local ?? {};\n if (shouldIncludeCodingTools(args.toolExecution)) {\n return mergeToolsByName(args.tools, createLocalCodingTools(localConfig));\n }\n\n const replacements = ((args.tools as t.GenericTool[] | undefined) ?? [])\n .filter(\n (existingTool): existingTool is t.GenericTool & { name: string } =>\n 'name' in existingTool &&\n typeof existingTool.name === 'string' &&\n CODE_EXECUTION_TOOLS.has(existingTool.name)\n )\n .map((existingTool) =>\n createLocalExecutionTool(existingTool.name, localConfig)\n )\n .filter((localTool): localTool is t.GenericTool => localTool != null);\n\n return replacements.length === 0\n ? args.tools\n : mergeToolsByName(args.tools, replacements);\n}\n\nexport function resolveLocalToolRegistry(args: {\n toolRegistry?: t.LCToolRegistry;\n toolExecution?: t.ToolExecutionConfig;\n}): t.LCToolRegistry | undefined {\n if (!shouldIncludeCodingTools(args.toolExecution)) {\n return args.toolRegistry;\n }\n\n const registry = new Map(args.toolRegistry ?? []);\n const selectedNames = shouldUseCloudflareSandboxExecution(args.toolExecution)\n ? getSelectedCloudflareCodingToolNames(\n getCloudflareConfig(args.toolExecution)\n )\n : undefined;\n for (const definition of createLocalCodingToolDefinitions()) {\n if (selectedNames != null && !selectedNames.has(definition.name)) {\n registry.delete(definition.name);\n continue;\n }\n registry.set(definition.name, definition);\n }\n return registry;\n}\n\nexport function resolveLocalExecutionTools(args: {\n toolMap: t.ToolMap;\n toolExecution?: t.ToolExecutionConfig;\n /**\n * Caller-provided checkpointer that overrides the bundle's\n * auto-created one. The Graph layer threads a single per-Run\n * instance so every ToolNode it compiles shares one snapshot\n * store — without that, a multi-agent graph would each get a\n * private checkpointer and `Run.rewindFiles()` couldn't reach\n * any of them.\n */\n fileCheckpointer?: t.LocalFileCheckpointer;\n}): ResolveLocalToolsResult {\n const directToolNames = new Set<string>();\n if (\n !shouldUseLocalExecution(args.toolExecution) &&\n !shouldUseCloudflareSandboxExecution(args.toolExecution)\n ) {\n return {\n toolMap: args.toolMap,\n directToolNames,\n };\n }\n\n const toolMap = new Map(args.toolMap);\n let fileCheckpointer: t.LocalFileCheckpointer | undefined;\n\n if (shouldUseCloudflareSandboxExecution(args.toolExecution)) {\n const cloudflareConfig = getCloudflareConfig(args.toolExecution);\n if (shouldIncludeCodingTools(args.toolExecution)) {\n const selectedNames =\n getSelectedCloudflareCodingToolNames(cloudflareConfig);\n pruneCloudflareCodingToolAllowlist(toolMap, selectedNames);\n if (\n cloudflareConfig.fileCheckpointing === true ||\n args.fileCheckpointer != null\n ) {\n const bundle = createCloudflareCodingToolBundle(cloudflareConfig, {\n checkpointer: args.fileCheckpointer,\n });\n fileCheckpointer = bundle.checkpointer;\n for (const cloudflareTool of bundle.tools) {\n toolMap.set(cloudflareTool.name, cloudflareTool);\n directToolNames.add(cloudflareTool.name);\n }\n } else {\n for (const cloudflareTool of createCloudflareCodingTools(\n cloudflareConfig\n )) {\n toolMap.set(cloudflareTool.name, cloudflareTool);\n directToolNames.add(cloudflareTool.name);\n }\n }\n }\n\n const includeCodingTools = shouldIncludeCodingTools(args.toolExecution);\n for (const name of CODE_EXECUTION_TOOLS) {\n if (includeCodingTools) continue;\n if (!toolMap.has(name)) continue;\n\n const cloudflareTool = createCloudflareExecutionTool(\n name,\n cloudflareConfig\n );\n if (cloudflareTool == null) {\n continue;\n }\n\n toolMap.set(name, cloudflareTool);\n directToolNames.add(name);\n }\n\n return { toolMap, directToolNames, fileCheckpointer };\n }\n\n const localConfig = args.toolExecution?.local ?? {};\n\n if (shouldIncludeCodingTools(args.toolExecution)) {\n // Use the bundle factory when fileCheckpointing is on so we can\n // surface the checkpointer back to the caller — without this, the\n // execution-path tools each captured into a checkpointer that was\n // immediately discarded, making the public `fileCheckpointing`\n // config flag a silent no-op outside of direct\n // `createLocalCodingToolBundle()` use.\n if (\n localConfig.fileCheckpointing === true ||\n args.fileCheckpointer != null\n ) {\n const bundle = createLocalCodingToolBundle(localConfig, {\n checkpointer: args.fileCheckpointer,\n });\n fileCheckpointer = bundle.checkpointer;\n for (const localTool of bundle.tools) {\n toolMap.set(localTool.name, localTool);\n directToolNames.add(localTool.name);\n }\n } else {\n for (const localTool of createLocalCodingTools(localConfig)) {\n toolMap.set(localTool.name, localTool);\n directToolNames.add(localTool.name);\n }\n }\n }\n\n // When the coding-tool bundle was already installed above, it\n // already created `bash_tool` / `execute_code` / programmatic-tool\n // variants. Skip re-creating them here — the audit-of-audit (manual\n // finding #4) flagged that the original loop overwrote those bundle\n // instances with fresh ones via `createLocalExecutionTool`, wasting\n // work and (more importantly) replacing tools the bundle had\n // already wired up with shared state. The CODE_EXECUTION_TOOLS\n // loop is now only relevant when the host pre-bound a tool with\n // one of these names (the `toolMap.has(name)` branch) and coding\n // tools are off.\n const includeCodingTools = shouldIncludeCodingTools(args.toolExecution);\n for (const name of CODE_EXECUTION_TOOLS) {\n if (includeCodingTools) continue;\n if (!toolMap.has(name)) continue;\n\n const localTool = createLocalExecutionTool(name, localConfig);\n if (localTool == null) {\n continue;\n }\n\n toolMap.set(name, localTool);\n directToolNames.add(name);\n }\n\n return { toolMap, directToolNames, fileCheckpointer };\n}\n"],"names":["LOCAL_CODING_BUNDLE_NAMES","Constants","createLocalCodeExecutionTool","createLocalBashExecutionTool","createLocalProgrammaticToolCallingTool","createLocalBashProgrammaticToolCallingTool","createCloudflareCodingTools","CODE_EXECUTION_TOOLS","createCloudflareExecutionTool","createLocalCodingTools","createLocalCodingToolDefinitions","createCloudflareCodingToolBundle","createLocalCodingToolBundle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolveLocalExecutionTools.cjs","names":["LOCAL_CODING_BUNDLE_NAMES","createLocalCodeExecutionTool","createLocalBashExecutionTool","createLocalProgrammaticToolCallingTool","createLocalBashProgrammaticToolCallingTool","createCloudflareCodingTools","CODE_EXECUTION_TOOLS","createCloudflareExecutionTool","createLocalCodingTools","createLocalCodingToolDefinitions","createCloudflareCodingToolBundle","createLocalCodingToolBundle"],"sources":["../../../../src/tools/local/resolveLocalExecutionTools.ts"],"sourcesContent":["import type * as t from '@/types';\nimport {\n createLocalBashProgrammaticToolCallingTool,\n createLocalProgrammaticToolCallingTool,\n} from './LocalProgrammaticToolCalling';\nimport {\n createCloudflareCodingToolBundle,\n createCloudflareCodingTools,\n createCloudflareExecutionTool,\n} from '@/tools/cloudflare';\nimport {\n createLocalCodingToolBundle,\n createLocalCodingToolDefinitions,\n createLocalCodingTools,\n} from './LocalCodingTools';\nimport {\n createLocalBashExecutionTool,\n createLocalCodeExecutionTool,\n} from './LocalExecutionTools';\nimport {\n Constants,\n CODE_EXECUTION_TOOLS,\n LOCAL_CODING_BUNDLE_NAMES,\n} from '@/common';\n\ntype ResolveLocalToolsResult = {\n toolMap: t.ToolMap;\n directToolNames: Set<string>;\n /**\n * Set when `local.fileCheckpointing === true` AND the auto-bind\n * coding suite is in use. ToolNode stashes this on the node and\n * exposes it via `getFileCheckpointer()` so the host can call\n * `rewind()` after a failed batch. Manual review (finding E)\n * flagged that the config flag was previously a no-op in the\n * Run/ToolNode auto-bind path — only direct\n * `createLocalCodingToolBundle()` callers could access the\n * checkpointer.\n */\n fileCheckpointer?: t.LocalFileCheckpointer;\n};\n\nfunction shouldUseLocalExecution(config?: t.ToolExecutionConfig): boolean {\n return config?.engine === 'local';\n}\n\nfunction shouldUseCloudflareSandboxExecution(\n config?: t.ToolExecutionConfig\n): boolean {\n return config?.engine === 'cloudflare-sandbox';\n}\n\nfunction shouldIncludeCodingTools(config?: t.ToolExecutionConfig): boolean {\n return (\n (shouldUseLocalExecution(config) &&\n config?.local?.includeCodingTools !== false) ||\n (shouldUseCloudflareSandboxExecution(config) &&\n config?.cloudflare?.includeCodingTools !== false)\n );\n}\n\nfunction getCloudflareConfig(\n config?: t.ToolExecutionConfig\n): t.CloudflareSandboxExecutionConfig {\n if (config?.cloudflare == null) {\n throw new Error(\n 'toolExecution.cloudflare is required when engine is \"cloudflare-sandbox\".'\n );\n }\n return config.cloudflare;\n}\n\nfunction getSelectedCloudflareCodingToolNames(\n config: t.CloudflareSandboxExecutionConfig\n): Set<string> {\n return new Set(config.codingToolNames ?? LOCAL_CODING_BUNDLE_NAMES);\n}\n\nfunction filterCloudflareCodingToolAllowlist(\n tools: t.GraphTools | undefined,\n selectedNames: Set<string>\n): t.GraphTools | undefined {\n const existingTools = (tools as t.GenericTool[] | undefined) ?? [];\n if (existingTools.length === 0) {\n return tools;\n }\n return existingTools.filter((existingTool) => {\n if (!('name' in existingTool) || typeof existingTool.name !== 'string') {\n return true;\n }\n return (\n !LOCAL_CODING_BUNDLE_NAMES.includes(existingTool.name) ||\n selectedNames.has(existingTool.name)\n );\n });\n}\n\nfunction pruneCloudflareCodingToolAllowlist(\n toolMap: t.ToolMap,\n selectedNames: Set<string>\n): void {\n for (const name of LOCAL_CODING_BUNDLE_NAMES) {\n if (!selectedNames.has(name)) {\n toolMap.delete(name);\n }\n }\n}\n\nfunction createLocalExecutionTool(\n name: string,\n config: t.LocalExecutionConfig\n): t.GenericTool | undefined {\n switch (name) {\n case Constants.EXECUTE_CODE:\n return createLocalCodeExecutionTool(config);\n case Constants.BASH_TOOL:\n return createLocalBashExecutionTool({ config });\n case Constants.PROGRAMMATIC_TOOL_CALLING:\n return createLocalProgrammaticToolCallingTool(config);\n case Constants.BASH_PROGRAMMATIC_TOOL_CALLING:\n return createLocalBashProgrammaticToolCallingTool(config);\n default:\n return undefined;\n }\n}\n\nfunction mergeToolsByName(\n baseTools: t.GraphTools | undefined,\n localTools: t.GenericTool[]\n): t.GraphTools {\n const orderedTools: t.GenericTool[] = [];\n const indexByName = new Map<string, number>();\n\n for (const tool of (baseTools as t.GenericTool[] | undefined) ?? []) {\n if ('name' in tool && typeof tool.name === 'string') {\n indexByName.set(tool.name, orderedTools.length);\n }\n orderedTools.push(tool);\n }\n\n for (const tool of localTools) {\n const existingIndex = indexByName.get(tool.name);\n if (existingIndex == null) {\n indexByName.set(tool.name, orderedTools.length);\n orderedTools.push(tool);\n continue;\n }\n orderedTools[existingIndex] = tool;\n }\n\n return orderedTools;\n}\n\nexport function resolveLocalToolsForBinding(args: {\n tools?: t.GraphTools;\n toolExecution?: t.ToolExecutionConfig;\n}): t.GraphTools | undefined {\n if (\n !shouldUseLocalExecution(args.toolExecution) &&\n !shouldUseCloudflareSandboxExecution(args.toolExecution)\n ) {\n return args.tools;\n }\n\n if (shouldUseCloudflareSandboxExecution(args.toolExecution)) {\n const cloudflareConfig = getCloudflareConfig(args.toolExecution);\n if (shouldIncludeCodingTools(args.toolExecution)) {\n const selectedNames =\n getSelectedCloudflareCodingToolNames(cloudflareConfig);\n return mergeToolsByName(\n filterCloudflareCodingToolAllowlist(args.tools, selectedNames),\n createCloudflareCodingTools(cloudflareConfig)\n );\n }\n\n const replacements = ((args.tools as t.GenericTool[] | undefined) ?? [])\n .filter(\n (existingTool): existingTool is t.GenericTool & { name: string } =>\n 'name' in existingTool &&\n typeof existingTool.name === 'string' &&\n CODE_EXECUTION_TOOLS.has(existingTool.name)\n )\n .map((existingTool) =>\n createCloudflareExecutionTool(existingTool.name, cloudflareConfig)\n )\n .filter(\n (cloudflareTool): cloudflareTool is t.GenericTool =>\n cloudflareTool != null\n );\n\n return replacements.length === 0\n ? args.tools\n : mergeToolsByName(args.tools, replacements);\n }\n\n const localConfig = args.toolExecution?.local ?? {};\n if (shouldIncludeCodingTools(args.toolExecution)) {\n return mergeToolsByName(args.tools, createLocalCodingTools(localConfig));\n }\n\n const replacements = ((args.tools as t.GenericTool[] | undefined) ?? [])\n .filter(\n (existingTool): existingTool is t.GenericTool & { name: string } =>\n 'name' in existingTool &&\n typeof existingTool.name === 'string' &&\n CODE_EXECUTION_TOOLS.has(existingTool.name)\n )\n .map((existingTool) =>\n createLocalExecutionTool(existingTool.name, localConfig)\n )\n .filter((localTool): localTool is t.GenericTool => localTool != null);\n\n return replacements.length === 0\n ? args.tools\n : mergeToolsByName(args.tools, replacements);\n}\n\nexport function resolveLocalToolRegistry(args: {\n toolRegistry?: t.LCToolRegistry;\n toolExecution?: t.ToolExecutionConfig;\n}): t.LCToolRegistry | undefined {\n if (!shouldIncludeCodingTools(args.toolExecution)) {\n return args.toolRegistry;\n }\n\n const registry = new Map(args.toolRegistry ?? []);\n const selectedNames = shouldUseCloudflareSandboxExecution(args.toolExecution)\n ? getSelectedCloudflareCodingToolNames(\n getCloudflareConfig(args.toolExecution)\n )\n : undefined;\n for (const definition of createLocalCodingToolDefinitions()) {\n if (selectedNames != null && !selectedNames.has(definition.name)) {\n registry.delete(definition.name);\n continue;\n }\n registry.set(definition.name, definition);\n }\n return registry;\n}\n\nexport function resolveLocalExecutionTools(args: {\n toolMap: t.ToolMap;\n toolExecution?: t.ToolExecutionConfig;\n /**\n * Caller-provided checkpointer that overrides the bundle's\n * auto-created one. The Graph layer threads a single per-Run\n * instance so every ToolNode it compiles shares one snapshot\n * store — without that, a multi-agent graph would each get a\n * private checkpointer and `Run.rewindFiles()` couldn't reach\n * any of them.\n */\n fileCheckpointer?: t.LocalFileCheckpointer;\n}): ResolveLocalToolsResult {\n const directToolNames = new Set<string>();\n if (\n !shouldUseLocalExecution(args.toolExecution) &&\n !shouldUseCloudflareSandboxExecution(args.toolExecution)\n ) {\n return {\n toolMap: args.toolMap,\n directToolNames,\n };\n }\n\n const toolMap = new Map(args.toolMap);\n let fileCheckpointer: t.LocalFileCheckpointer | undefined;\n\n if (shouldUseCloudflareSandboxExecution(args.toolExecution)) {\n const cloudflareConfig = getCloudflareConfig(args.toolExecution);\n if (shouldIncludeCodingTools(args.toolExecution)) {\n const selectedNames =\n getSelectedCloudflareCodingToolNames(cloudflareConfig);\n pruneCloudflareCodingToolAllowlist(toolMap, selectedNames);\n if (\n cloudflareConfig.fileCheckpointing === true ||\n args.fileCheckpointer != null\n ) {\n const bundle = createCloudflareCodingToolBundle(cloudflareConfig, {\n checkpointer: args.fileCheckpointer,\n });\n fileCheckpointer = bundle.checkpointer;\n for (const cloudflareTool of bundle.tools) {\n toolMap.set(cloudflareTool.name, cloudflareTool);\n directToolNames.add(cloudflareTool.name);\n }\n } else {\n for (const cloudflareTool of createCloudflareCodingTools(\n cloudflareConfig\n )) {\n toolMap.set(cloudflareTool.name, cloudflareTool);\n directToolNames.add(cloudflareTool.name);\n }\n }\n }\n\n const includeCodingTools = shouldIncludeCodingTools(args.toolExecution);\n for (const name of CODE_EXECUTION_TOOLS) {\n if (includeCodingTools) continue;\n if (!toolMap.has(name)) continue;\n\n const cloudflareTool = createCloudflareExecutionTool(\n name,\n cloudflareConfig\n );\n if (cloudflareTool == null) {\n continue;\n }\n\n toolMap.set(name, cloudflareTool);\n directToolNames.add(name);\n }\n\n return { toolMap, directToolNames, fileCheckpointer };\n }\n\n const localConfig = args.toolExecution?.local ?? {};\n\n if (shouldIncludeCodingTools(args.toolExecution)) {\n // Use the bundle factory when fileCheckpointing is on so we can\n // surface the checkpointer back to the caller — without this, the\n // execution-path tools each captured into a checkpointer that was\n // immediately discarded, making the public `fileCheckpointing`\n // config flag a silent no-op outside of direct\n // `createLocalCodingToolBundle()` use.\n if (\n localConfig.fileCheckpointing === true ||\n args.fileCheckpointer != null\n ) {\n const bundle = createLocalCodingToolBundle(localConfig, {\n checkpointer: args.fileCheckpointer,\n });\n fileCheckpointer = bundle.checkpointer;\n for (const localTool of bundle.tools) {\n toolMap.set(localTool.name, localTool);\n directToolNames.add(localTool.name);\n }\n } else {\n for (const localTool of createLocalCodingTools(localConfig)) {\n toolMap.set(localTool.name, localTool);\n directToolNames.add(localTool.name);\n }\n }\n }\n\n // When the coding-tool bundle was already installed above, it\n // already created `bash_tool` / `execute_code` / programmatic-tool\n // variants. Skip re-creating them here — the audit-of-audit (manual\n // finding #4) flagged that the original loop overwrote those bundle\n // instances with fresh ones via `createLocalExecutionTool`, wasting\n // work and (more importantly) replacing tools the bundle had\n // already wired up with shared state. The CODE_EXECUTION_TOOLS\n // loop is now only relevant when the host pre-bound a tool with\n // one of these names (the `toolMap.has(name)` branch) and coding\n // tools are off.\n const includeCodingTools = shouldIncludeCodingTools(args.toolExecution);\n for (const name of CODE_EXECUTION_TOOLS) {\n if (includeCodingTools) continue;\n if (!toolMap.has(name)) continue;\n\n const localTool = createLocalExecutionTool(name, localConfig);\n if (localTool == null) {\n continue;\n }\n\n toolMap.set(name, localTool);\n directToolNames.add(name);\n }\n\n return { toolMap, directToolNames, fileCheckpointer };\n}\n"],"mappings":";;;;;;;;AAyCA,SAAS,wBAAwB,QAAyC;CACxE,OAAO,QAAQ,WAAW;AAC5B;AAEA,SAAS,oCACP,QACS;CACT,OAAO,QAAQ,WAAW;AAC5B;AAEA,SAAS,yBAAyB,QAAyC;CACzE,OACG,wBAAwB,MAAM,KAC7B,QAAQ,OAAO,uBAAuB,SACvC,oCAAoC,MAAM,KACzC,QAAQ,YAAY,uBAAuB;AAEjD;AAEA,SAAS,oBACP,QACoC;CACpC,IAAI,QAAQ,cAAc,MACxB,MAAM,IAAI,MACR,6EACF;CAEF,OAAO,OAAO;AAChB;AAEA,SAAS,qCACP,QACa;CACb,OAAO,IAAI,IAAI,OAAO,mBAAmBA,aAAAA,yBAAyB;AACpE;AAEA,SAAS,oCACP,OACA,eAC0B;CAC1B,MAAM,gBAAiB,SAAyC,CAAC;CACjE,IAAI,cAAc,WAAW,GAC3B,OAAO;CAET,OAAO,cAAc,QAAQ,iBAAiB;EAC5C,IAAI,EAAE,UAAU,iBAAiB,OAAO,aAAa,SAAS,UAC5D,OAAO;EAET,OACE,CAACA,aAAAA,0BAA0B,SAAS,aAAa,IAAI,KACrD,cAAc,IAAI,aAAa,IAAI;CAEvC,CAAC;AACH;AAEA,SAAS,mCACP,SACA,eACM;CACN,KAAK,MAAM,QAAQA,aAAAA,2BACjB,IAAI,CAAC,cAAc,IAAI,IAAI,GACzB,QAAQ,OAAO,IAAI;AAGzB;AAEA,SAAS,yBACP,MACA,QAC2B;CAC3B,QAAQ,MAAR;EACA,KAAA,gBACE,OAAOC,4BAAAA,6BAA6B,MAAM;EAC5C,KAAA,aACE,OAAOC,4BAAAA,6BAA6B,EAAE,OAAO,CAAC;EAChD,KAAA,uBACE,OAAOC,qCAAAA,uCAAuC,MAAM;EACtD,KAAA,uBACE,OAAOC,qCAAAA,2CAA2C,MAAM;EAC1D,SACE;CACF;AACF;AAEA,SAAS,iBACP,WACA,YACc;CACd,MAAM,eAAgC,CAAC;CACvC,MAAM,8BAAc,IAAI,IAAoB;CAE5C,KAAK,MAAM,QAAS,aAA6C,CAAC,GAAG;EACnE,IAAI,UAAU,QAAQ,OAAO,KAAK,SAAS,UACzC,YAAY,IAAI,KAAK,MAAM,aAAa,MAAM;EAEhD,aAAa,KAAK,IAAI;CACxB;CAEA,KAAK,MAAM,QAAQ,YAAY;EAC7B,MAAM,gBAAgB,YAAY,IAAI,KAAK,IAAI;EAC/C,IAAI,iBAAiB,MAAM;GACzB,YAAY,IAAI,KAAK,MAAM,aAAa,MAAM;GAC9C,aAAa,KAAK,IAAI;GACtB;EACF;EACA,aAAa,iBAAiB;CAChC;CAEA,OAAO;AACT;AAEA,SAAgB,4BAA4B,MAGf;CAC3B,IACE,CAAC,wBAAwB,KAAK,aAAa,KAC3C,CAAC,oCAAoC,KAAK,aAAa,GAEvD,OAAO,KAAK;CAGd,IAAI,oCAAoC,KAAK,aAAa,GAAG;EAC3D,MAAM,mBAAmB,oBAAoB,KAAK,aAAa;EAC/D,IAAI,yBAAyB,KAAK,aAAa,GAAG;GAChD,MAAM,gBACJ,qCAAqC,gBAAgB;GACvD,OAAO,iBACL,oCAAoC,KAAK,OAAO,aAAa,GAC7DC,+BAAAA,4BAA4B,gBAAgB,CAC9C;EACF;EAEA,MAAM,gBAAiB,KAAK,SAAyC,CAAC,EAAA,CACnE,QACE,iBACC,UAAU,gBACV,OAAO,aAAa,SAAS,YAC7BC,aAAAA,qBAAqB,IAAI,aAAa,IAAI,CAC9C,CAAC,CACA,KAAK,iBACJC,+BAAAA,8BAA8B,aAAa,MAAM,gBAAgB,CACnE,CAAC,CACA,QACE,mBACC,kBAAkB,IACtB;EAEF,OAAO,aAAa,WAAW,IAC3B,KAAK,QACL,iBAAiB,KAAK,OAAO,YAAY;CAC/C;CAEA,MAAM,cAAc,KAAK,eAAe,SAAS,CAAC;CAClD,IAAI,yBAAyB,KAAK,aAAa,GAC7C,OAAO,iBAAiB,KAAK,OAAOC,yBAAAA,uBAAuB,WAAW,CAAC;CAGzE,MAAM,gBAAiB,KAAK,SAAyC,CAAC,EAAA,CACnE,QACE,iBACC,UAAU,gBACV,OAAO,aAAa,SAAS,YAC7BF,aAAAA,qBAAqB,IAAI,aAAa,IAAI,CAC9C,CAAC,CACA,KAAK,iBACJ,yBAAyB,aAAa,MAAM,WAAW,CACzD,CAAC,CACA,QAAQ,cAA0C,aAAa,IAAI;CAEtE,OAAO,aAAa,WAAW,IAC3B,KAAK,QACL,iBAAiB,KAAK,OAAO,YAAY;AAC/C;AAEA,SAAgB,yBAAyB,MAGR;CAC/B,IAAI,CAAC,yBAAyB,KAAK,aAAa,GAC9C,OAAO,KAAK;CAGd,MAAM,WAAW,IAAI,IAAI,KAAK,gBAAgB,CAAC,CAAC;CAChD,MAAM,gBAAgB,oCAAoC,KAAK,aAAa,IACxE,qCACA,oBAAoB,KAAK,aAAa,CACxC,IACE,KAAA;CACJ,KAAK,MAAM,cAAcG,yBAAAA,iCAAiC,GAAG;EAC3D,IAAI,iBAAiB,QAAQ,CAAC,cAAc,IAAI,WAAW,IAAI,GAAG;GAChE,SAAS,OAAO,WAAW,IAAI;GAC/B;EACF;EACA,SAAS,IAAI,WAAW,MAAM,UAAU;CAC1C;CACA,OAAO;AACT;AAEA,SAAgB,2BAA2B,MAYf;CAC1B,MAAM,kCAAkB,IAAI,IAAY;CACxC,IACE,CAAC,wBAAwB,KAAK,aAAa,KAC3C,CAAC,oCAAoC,KAAK,aAAa,GAEvD,OAAO;EACL,SAAS,KAAK;EACd;CACF;CAGF,MAAM,UAAU,IAAI,IAAI,KAAK,OAAO;CACpC,IAAI;CAEJ,IAAI,oCAAoC,KAAK,aAAa,GAAG;EAC3D,MAAM,mBAAmB,oBAAoB,KAAK,aAAa;EAC/D,IAAI,yBAAyB,KAAK,aAAa,GAAG;GAGhD,mCAAmC,SADjC,qCAAqC,gBACiB,CAAC;GACzD,IACE,iBAAiB,sBAAsB,QACvC,KAAK,oBAAoB,MACzB;IACA,MAAM,SAASC,+BAAAA,iCAAiC,kBAAkB,EAChE,cAAc,KAAK,iBACrB,CAAC;IACD,mBAAmB,OAAO;IAC1B,KAAK,MAAM,kBAAkB,OAAO,OAAO;KACzC,QAAQ,IAAI,eAAe,MAAM,cAAc;KAC/C,gBAAgB,IAAI,eAAe,IAAI;IACzC;GACF,OACE,KAAK,MAAM,kBAAkBL,+BAAAA,4BAC3B,gBACF,GAAG;IACD,QAAQ,IAAI,eAAe,MAAM,cAAc;IAC/C,gBAAgB,IAAI,eAAe,IAAI;GACzC;EAEJ;EAEA,MAAM,qBAAqB,yBAAyB,KAAK,aAAa;EACtE,KAAK,MAAM,QAAQC,aAAAA,sBAAsB;GACvC,IAAI,oBAAoB;GACxB,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG;GAExB,MAAM,iBAAiBC,+BAAAA,8BACrB,MACA,gBACF;GACA,IAAI,kBAAkB,MACpB;GAGF,QAAQ,IAAI,MAAM,cAAc;GAChC,gBAAgB,IAAI,IAAI;EAC1B;EAEA,OAAO;GAAE;GAAS;GAAiB;EAAiB;CACtD;CAEA,MAAM,cAAc,KAAK,eAAe,SAAS,CAAC;CAElD,IAAI,yBAAyB,KAAK,aAAa,GAO7C,IACE,YAAY,sBAAsB,QAClC,KAAK,oBAAoB,MACzB;EACA,MAAM,SAASI,yBAAAA,4BAA4B,aAAa,EACtD,cAAc,KAAK,iBACrB,CAAC;EACD,mBAAmB,OAAO;EAC1B,KAAK,MAAM,aAAa,OAAO,OAAO;GACpC,QAAQ,IAAI,UAAU,MAAM,SAAS;GACrC,gBAAgB,IAAI,UAAU,IAAI;EACpC;CACF,OACE,KAAK,MAAM,aAAaH,yBAAAA,uBAAuB,WAAW,GAAG;EAC3D,QAAQ,IAAI,UAAU,MAAM,SAAS;EACrC,gBAAgB,IAAI,UAAU,IAAI;CACpC;CAcJ,MAAM,qBAAqB,yBAAyB,KAAK,aAAa;CACtE,KAAK,MAAM,QAAQF,aAAAA,sBAAsB;EACvC,IAAI,oBAAoB;EACxB,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG;EAExB,MAAM,YAAY,yBAAyB,MAAM,WAAW;EAC5D,IAAI,aAAa,MACf;EAGF,QAAQ,IAAI,MAAM,SAAS;EAC3B,gBAAgB,IAAI,IAAI;CAC1B;CAEA,OAAO;EAAE;EAAS;EAAiB;CAAiB;AACtD"}
|