@librechat/agents 3.2.31 → 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 -696
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -252
- 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 +308 -401
- 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 -1382
- 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 -690
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -249
- 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 +308 -399
- 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 -1378
- 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/messages/format.d.ts +5 -0
- package/dist/types/tools/search/tool.d.ts +17 -0
- package/dist/types/tools/search/types.d.ts +4 -0
- package/package.json +11 -17
- package/src/llm/anthropic/llm.spec.ts +36 -0
- package/src/llm/anthropic/utils/message_inputs.ts +45 -3
- package/src/llm/anthropic/utils/message_outputs.ts +6 -2
- package/src/llm/anthropic/utils/streaming-tool-input.test.ts +186 -0
- package/src/messages/cache.test.ts +122 -0
- package/src/messages/cache.ts +25 -1
- package/src/messages/format.ts +9 -0
- package/src/messages/formatAgentMessages.skills.test.ts +100 -0
- 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":"CloudflareBridgeRuntime.cjs","sources":["../../../../src/tools/cloudflare/CloudflareBridgeRuntime.ts"],"sourcesContent":["import { posix as path } from 'path';\nimport type * as t from '@/types';\n\nconst DEFAULT_API_PREFIX = '/v1';\nconst DEFAULT_WORKSPACE_ROOT = '/workspace';\nconst DEFAULT_SHELL = 'bash';\n\nexport type CloudflareBridgeRuntimeConfig = {\n /** Base URL of a Worker using `bridge()` from `@cloudflare/sandbox/bridge`. */\n baseURL: string;\n /** Bearer token stored in the bridge Worker as `SANDBOX_API_KEY`. */\n apiKey?: string;\n /** Existing sandbox id. If omitted, the adapter creates one lazily. */\n sandboxId?: string;\n /** Bridge API route prefix. Defaults to `/v1`. */\n apiRoutePrefix?: string;\n /** Workspace root used for path clamping. Defaults to `/workspace`. */\n workspaceRoot?: string;\n /** Optional bridge session id sent as `Session-Id`. */\n sessionId?: string;\n /** Shell used to run command strings over the bridge exec endpoint. */\n shell?: string;\n /** Optional fetch implementation. Defaults to global `fetch`. */\n fetch?: typeof fetch;\n};\n\nexport type CloudflareBridgeRuntime = t.CloudflareSandboxRuntime & {\n getSandboxId(): Promise<string>;\n};\n\ntype BridgeSSEEvent = {\n event: string;\n data: string;\n};\n\nfunction normalizeBaseURL(baseURL: string): string {\n return baseURL.replace(/\\/+$/, '');\n}\n\nfunction normalizePrefix(prefix: string | undefined): string {\n const raw = prefix ?? DEFAULT_API_PREFIX;\n const withLeadingSlash = raw.startsWith('/') ? raw : `/${raw}`;\n return withLeadingSlash.replace(/\\/+$/, '');\n}\n\nfunction normalizeWorkspaceRoot(workspaceRoot: string): string {\n const normalized = path.normalize(workspaceRoot);\n return normalized === '/' ? normalized : normalized.replace(/\\/+$/, '');\n}\n\nfunction getFetch(config: CloudflareBridgeRuntimeConfig): typeof fetch {\n const fetchImpl = config.fetch ?? globalThis.fetch;\n return fetchImpl.bind(globalThis) as typeof fetch;\n}\n\nfunction quote(value: string): string {\n if (value === '') {\n return '\\'\\'';\n }\n if (/^[A-Za-z0-9_/:=.,@%+-]+$/.test(value)) {\n return value;\n }\n return `'${value.replace(/'/g, '\\'\\\\\\'\\'')}'`;\n}\n\nfunction encodeBridgePath(filePath: string): string {\n return filePath\n .replace(/^\\/+/, '')\n .split('/')\n .map((part) => encodeURIComponent(part))\n .join('/');\n}\n\nfunction toSandboxPath(filePath: string, workspaceRoot: string): string {\n const raw = filePath === '' ? '.' : filePath;\n const root = normalizeWorkspaceRoot(workspaceRoot);\n const resolved = raw.startsWith('/')\n ? path.normalize(raw)\n : path.resolve(root, raw);\n if (root === '/') {\n return resolved;\n }\n if (resolved === root || resolved.startsWith(`${root}/`)) {\n return resolved;\n }\n throw new Error(\n `Path is outside the Cloudflare sandbox workspace: ${filePath}`\n );\n}\n\nfunction typeFromFind(value: string): t.CloudflareSandboxFileInfo['type'] {\n switch (value) {\n case 'd':\n return 'directory';\n case 'l':\n return 'symlink';\n case 'f':\n return 'file';\n default:\n return 'other';\n }\n}\n\nfunction decodeBase64(value: string): string {\n return Buffer.from(value, 'base64').toString('utf8');\n}\n\nasync function readResponseText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n\nasync function assertOk(response: Response, operation: string): Promise<void> {\n if (response.ok) {\n return;\n }\n const text = await readResponseText(response);\n throw new Error(\n `Cloudflare sandbox bridge ${operation} failed (${response.status}): ${text}`\n );\n}\n\nfunction createHeaders(\n config: CloudflareBridgeRuntimeConfig,\n extra?: HeadersInit\n): Headers {\n const headers = new Headers(extra);\n if (config.apiKey != null && config.apiKey !== '') {\n headers.set('Authorization', `Bearer ${config.apiKey}`);\n }\n if (config.sessionId != null && config.sessionId !== '') {\n headers.set('Session-Id', config.sessionId);\n }\n return headers;\n}\n\nfunction envScript(env?: Record<string, string | undefined>): string {\n if (env == null) {\n return '';\n }\n return Object.entries(env)\n .filter((entry): entry is [string, string] => entry[1] != null)\n .map(([key, value]) => `export ${key}=${quote(value)}`)\n .join('\\n');\n}\n\nfunction commandWithEnv(\n command: string,\n env?: Record<string, string | undefined>\n): string {\n const exports = envScript(env);\n return exports === '' ? command : `${exports}\\n${command}`;\n}\n\nasync function collectReadableStream(\n stream: ReadableStream<Uint8Array>\n): Promise<Uint8Array> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n total += value.byteLength;\n }\n } finally {\n reader.releaseLock();\n }\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nasync function normalizeWriteBody(\n content: string | ReadableStream<Uint8Array>,\n options?: { encoding?: string }\n): Promise<Uint8Array> {\n if (typeof content !== 'string') {\n return collectReadableStream(content);\n }\n if (options?.encoding === 'base64') {\n return Buffer.from(content, 'base64');\n }\n return Buffer.from(content, options?.encoding === 'utf8' ? 'utf8' : 'utf8');\n}\n\nfunction parseSSEChunk(buffer: string): {\n events: BridgeSSEEvent[];\n remainder: string;\n} {\n const normalized = buffer.replace(/\\r\\n/g, '\\n');\n const parts = normalized.split('\\n\\n');\n const remainder = parts.pop() ?? '';\n const events = parts\n .map((part) => {\n let event = 'message';\n const dataLines: string[] = [];\n for (const line of part.split('\\n')) {\n if (line.startsWith('event:')) {\n event = line.slice('event:'.length).trim();\n } else if (line.startsWith('data:')) {\n dataLines.push(line.slice('data:'.length).trimStart());\n }\n }\n return { event, data: dataLines.join('\\n') };\n })\n .filter((event) => event.data !== '' || event.event !== 'message');\n return { events, remainder };\n}\n\nfunction parseExitCode(data: string): number {\n try {\n const parsed = JSON.parse(data) as { exit_code?: number };\n return typeof parsed.exit_code === 'number' ? parsed.exit_code : 1;\n } catch {\n return 1;\n }\n}\n\nfunction parseBridgeError(data: string): string {\n try {\n const parsed = JSON.parse(data) as { error?: string };\n return parsed.error ?? data;\n } catch {\n return data;\n }\n}\n\nexport function createCloudflareBridgeRuntime(\n config: CloudflareBridgeRuntimeConfig\n): CloudflareBridgeRuntime {\n const baseURL = normalizeBaseURL(config.baseURL);\n const apiPrefix = normalizePrefix(config.apiRoutePrefix);\n const workspaceRoot = normalizeWorkspaceRoot(\n config.workspaceRoot ?? DEFAULT_WORKSPACE_ROOT\n );\n const shell = config.shell ?? DEFAULT_SHELL;\n const fetchImpl = getFetch(config);\n let sandboxIdPromise: Promise<string> | undefined =\n config.sandboxId != null ? Promise.resolve(config.sandboxId) : undefined;\n\n function bridgeURL(suffix: string): string {\n return `${baseURL}${apiPrefix}${suffix}`;\n }\n\n async function getSandboxId(): Promise<string> {\n if (sandboxIdPromise == null) {\n sandboxIdPromise = (async (): Promise<string> => {\n const response = await fetchImpl(bridgeURL('/sandbox'), {\n method: 'POST',\n headers: createHeaders(config),\n });\n await assertOk(response, 'sandbox create');\n const payload = (await response.json()) as { id?: string };\n if (typeof payload.id !== 'string' || payload.id === '') {\n throw new Error(\n 'Cloudflare sandbox bridge create did not return an id.'\n );\n }\n return payload.id;\n })().catch((error: unknown) => {\n sandboxIdPromise = undefined;\n throw error;\n });\n }\n return sandboxIdPromise;\n }\n\n async function exec(\n command: string,\n options: t.CloudflareSandboxExecOptions = {}\n ): Promise<t.CloudflareSandboxExecResult> {\n const sandboxId = await getSandboxId();\n const sandboxPathId = encodeURIComponent(sandboxId);\n const response = await fetchImpl(\n bridgeURL(`/sandbox/${sandboxPathId}/exec`),\n {\n method: 'POST',\n headers: createHeaders(config, {\n 'Content-Type': 'application/json',\n }),\n body: JSON.stringify({\n argv: [shell, '-lc', commandWithEnv(command, options.env)],\n cwd: toSandboxPath(options.cwd ?? workspaceRoot, workspaceRoot),\n timeout_ms: options.timeout,\n }),\n signal: options.signal,\n }\n );\n await assertOk(response, 'exec');\n if (response.body == null) {\n throw new Error(\n 'Cloudflare sandbox bridge exec response did not include a body.'\n );\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n let buffer = '';\n let stdout = '';\n let stderr = '';\n let exitCode: number | undefined;\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const parsed = parseSSEChunk(buffer);\n buffer = parsed.remainder;\n for (const event of parsed.events) {\n if (event.event === 'stdout') {\n const decoded = decodeBase64(event.data);\n stdout += decoded;\n options.onOutput?.('stdout', decoded);\n } else if (event.event === 'stderr') {\n const decoded = decodeBase64(event.data);\n stderr += decoded;\n options.onOutput?.('stderr', decoded);\n } else if (event.event === 'exit') {\n exitCode = parseExitCode(event.data);\n } else if (event.event === 'error') {\n throw new Error(parseBridgeError(event.data));\n }\n }\n }\n buffer += decoder.decode();\n const parsed = parseSSEChunk(buffer);\n buffer = parsed.remainder;\n for (const event of parsed.events) {\n if (event.event === 'stdout') {\n const decoded = decodeBase64(event.data);\n stdout += decoded;\n options.onOutput?.('stdout', decoded);\n } else if (event.event === 'stderr') {\n const decoded = decodeBase64(event.data);\n stderr += decoded;\n options.onOutput?.('stderr', decoded);\n } else if (event.event === 'exit') {\n exitCode = parseExitCode(event.data);\n } else if (event.event === 'error') {\n throw new Error(parseBridgeError(event.data));\n }\n }\n } finally {\n reader.releaseLock();\n }\n\n if (exitCode == null) {\n throw new Error(\n 'Cloudflare sandbox bridge exec stream closed before an exit event.'\n );\n }\n\n return {\n success: exitCode === 0,\n exitCode,\n stdout,\n stderr,\n command,\n };\n }\n\n async function readFile(filePath: string): Promise<Buffer> {\n const sandboxId = await getSandboxId();\n const sandboxPathId = encodeURIComponent(sandboxId);\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const response = await fetchImpl(\n bridgeURL(\n `/sandbox/${sandboxPathId}/file/${encodeBridgePath(resolvedPath)}`\n ),\n {\n headers: createHeaders(config),\n }\n );\n await assertOk(response, 'readFile');\n return Buffer.from(await response.arrayBuffer());\n }\n\n async function writeFile(\n filePath: string,\n content: string | ReadableStream<Uint8Array>,\n options?: { encoding?: string }\n ): Promise<unknown> {\n const sandboxId = await getSandboxId();\n const sandboxPathId = encodeURIComponent(sandboxId);\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const body = await normalizeWriteBody(content, options);\n const response = await fetchImpl(\n bridgeURL(\n `/sandbox/${sandboxPathId}/file/${encodeBridgePath(resolvedPath)}`\n ),\n {\n method: 'PUT',\n headers: createHeaders(config, {\n 'Content-Type': 'application/octet-stream',\n }),\n body,\n }\n );\n await assertOk(response, 'writeFile');\n return response.json().catch(() => ({ ok: true }));\n }\n\n async function mkdir(\n filePath: string,\n options?: { recursive?: boolean }\n ): Promise<unknown> {\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const command = `${options?.recursive === true ? 'mkdir -p' : 'mkdir'} -- ${quote(resolvedPath)}`;\n const result = await exec(command, { cwd: workspaceRoot });\n if (result.exitCode !== 0) {\n throw new Error(result.stderr || `mkdir failed for ${resolvedPath}`);\n }\n return { ok: true };\n }\n\n async function listFiles(\n filePath: string,\n options?: t.CloudflareSandboxListFilesOptions\n ): Promise<t.CloudflareSandboxFileInfo[]> {\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const maxDepth = options?.recursive === true ? '' : '-maxdepth 1';\n const hiddenFilter =\n options?.includeHidden === true ? '' : ' \\\\( -name \\'.*\\' -prune \\\\) -o';\n const quotedPath = quote(resolvedPath);\n const command =\n `[ -d ${quotedPath} ] || { printf '%s is not a directory\\\\n' ${quotedPath} >&2; exit 20; }; ` +\n `find ${quotedPath} -mindepth 1 ${maxDepth}${hiddenFilter} ` +\n '-printf \\'%y\\\\t%s\\\\t%p\\\\n\\'';\n const result = await exec(command, { cwd: workspaceRoot });\n if (result.exitCode !== 0) {\n throw new Error(result.stderr || `listFiles failed for ${resolvedPath}`);\n }\n return result.stdout\n .split('\\n')\n .filter(Boolean)\n .map((line) => {\n const [rawType, rawSize, ...pathParts] = line.split('\\t');\n const absolutePath = pathParts.join('\\t');\n return {\n name: path.basename(absolutePath),\n absolutePath,\n relativePath: path.relative(resolvedPath, absolutePath),\n type: typeFromFind(rawType),\n size: Number.parseInt(rawSize, 10) || 0,\n };\n });\n }\n\n async function deleteFile(filePath: string): Promise<unknown> {\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const result = await exec(`rm -rf -- ${quote(resolvedPath)}`, {\n cwd: workspaceRoot,\n });\n if (result.exitCode !== 0) {\n throw new Error(result.stderr || `deleteFile failed for ${resolvedPath}`);\n }\n return { ok: true };\n }\n\n return {\n supportsExecSignal: true,\n getSandboxId,\n exec,\n readFile,\n writeFile,\n mkdir,\n listFiles,\n deleteFile,\n };\n}\n"],"names":["path","exports"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CloudflareBridgeRuntime.cjs","names":[],"sources":["../../../../src/tools/cloudflare/CloudflareBridgeRuntime.ts"],"sourcesContent":["import { posix as path } from 'path';\nimport type * as t from '@/types';\n\nconst DEFAULT_API_PREFIX = '/v1';\nconst DEFAULT_WORKSPACE_ROOT = '/workspace';\nconst DEFAULT_SHELL = 'bash';\n\nexport type CloudflareBridgeRuntimeConfig = {\n /** Base URL of a Worker using `bridge()` from `@cloudflare/sandbox/bridge`. */\n baseURL: string;\n /** Bearer token stored in the bridge Worker as `SANDBOX_API_KEY`. */\n apiKey?: string;\n /** Existing sandbox id. If omitted, the adapter creates one lazily. */\n sandboxId?: string;\n /** Bridge API route prefix. Defaults to `/v1`. */\n apiRoutePrefix?: string;\n /** Workspace root used for path clamping. Defaults to `/workspace`. */\n workspaceRoot?: string;\n /** Optional bridge session id sent as `Session-Id`. */\n sessionId?: string;\n /** Shell used to run command strings over the bridge exec endpoint. */\n shell?: string;\n /** Optional fetch implementation. Defaults to global `fetch`. */\n fetch?: typeof fetch;\n};\n\nexport type CloudflareBridgeRuntime = t.CloudflareSandboxRuntime & {\n getSandboxId(): Promise<string>;\n};\n\ntype BridgeSSEEvent = {\n event: string;\n data: string;\n};\n\nfunction normalizeBaseURL(baseURL: string): string {\n return baseURL.replace(/\\/+$/, '');\n}\n\nfunction normalizePrefix(prefix: string | undefined): string {\n const raw = prefix ?? DEFAULT_API_PREFIX;\n const withLeadingSlash = raw.startsWith('/') ? raw : `/${raw}`;\n return withLeadingSlash.replace(/\\/+$/, '');\n}\n\nfunction normalizeWorkspaceRoot(workspaceRoot: string): string {\n const normalized = path.normalize(workspaceRoot);\n return normalized === '/' ? normalized : normalized.replace(/\\/+$/, '');\n}\n\nfunction getFetch(config: CloudflareBridgeRuntimeConfig): typeof fetch {\n const fetchImpl = config.fetch ?? globalThis.fetch;\n return fetchImpl.bind(globalThis) as typeof fetch;\n}\n\nfunction quote(value: string): string {\n if (value === '') {\n return '\\'\\'';\n }\n if (/^[A-Za-z0-9_/:=.,@%+-]+$/.test(value)) {\n return value;\n }\n return `'${value.replace(/'/g, '\\'\\\\\\'\\'')}'`;\n}\n\nfunction encodeBridgePath(filePath: string): string {\n return filePath\n .replace(/^\\/+/, '')\n .split('/')\n .map((part) => encodeURIComponent(part))\n .join('/');\n}\n\nfunction toSandboxPath(filePath: string, workspaceRoot: string): string {\n const raw = filePath === '' ? '.' : filePath;\n const root = normalizeWorkspaceRoot(workspaceRoot);\n const resolved = raw.startsWith('/')\n ? path.normalize(raw)\n : path.resolve(root, raw);\n if (root === '/') {\n return resolved;\n }\n if (resolved === root || resolved.startsWith(`${root}/`)) {\n return resolved;\n }\n throw new Error(\n `Path is outside the Cloudflare sandbox workspace: ${filePath}`\n );\n}\n\nfunction typeFromFind(value: string): t.CloudflareSandboxFileInfo['type'] {\n switch (value) {\n case 'd':\n return 'directory';\n case 'l':\n return 'symlink';\n case 'f':\n return 'file';\n default:\n return 'other';\n }\n}\n\nfunction decodeBase64(value: string): string {\n return Buffer.from(value, 'base64').toString('utf8');\n}\n\nasync function readResponseText(response: Response): Promise<string> {\n try {\n return await response.text();\n } catch {\n return '';\n }\n}\n\nasync function assertOk(response: Response, operation: string): Promise<void> {\n if (response.ok) {\n return;\n }\n const text = await readResponseText(response);\n throw new Error(\n `Cloudflare sandbox bridge ${operation} failed (${response.status}): ${text}`\n );\n}\n\nfunction createHeaders(\n config: CloudflareBridgeRuntimeConfig,\n extra?: HeadersInit\n): Headers {\n const headers = new Headers(extra);\n if (config.apiKey != null && config.apiKey !== '') {\n headers.set('Authorization', `Bearer ${config.apiKey}`);\n }\n if (config.sessionId != null && config.sessionId !== '') {\n headers.set('Session-Id', config.sessionId);\n }\n return headers;\n}\n\nfunction envScript(env?: Record<string, string | undefined>): string {\n if (env == null) {\n return '';\n }\n return Object.entries(env)\n .filter((entry): entry is [string, string] => entry[1] != null)\n .map(([key, value]) => `export ${key}=${quote(value)}`)\n .join('\\n');\n}\n\nfunction commandWithEnv(\n command: string,\n env?: Record<string, string | undefined>\n): string {\n const exports = envScript(env);\n return exports === '' ? command : `${exports}\\n${command}`;\n}\n\nasync function collectReadableStream(\n stream: ReadableStream<Uint8Array>\n): Promise<Uint8Array> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n total += value.byteLength;\n }\n } finally {\n reader.releaseLock();\n }\n const bytes = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nasync function normalizeWriteBody(\n content: string | ReadableStream<Uint8Array>,\n options?: { encoding?: string }\n): Promise<Uint8Array> {\n if (typeof content !== 'string') {\n return collectReadableStream(content);\n }\n if (options?.encoding === 'base64') {\n return Buffer.from(content, 'base64');\n }\n return Buffer.from(content, options?.encoding === 'utf8' ? 'utf8' : 'utf8');\n}\n\nfunction parseSSEChunk(buffer: string): {\n events: BridgeSSEEvent[];\n remainder: string;\n} {\n const normalized = buffer.replace(/\\r\\n/g, '\\n');\n const parts = normalized.split('\\n\\n');\n const remainder = parts.pop() ?? '';\n const events = parts\n .map((part) => {\n let event = 'message';\n const dataLines: string[] = [];\n for (const line of part.split('\\n')) {\n if (line.startsWith('event:')) {\n event = line.slice('event:'.length).trim();\n } else if (line.startsWith('data:')) {\n dataLines.push(line.slice('data:'.length).trimStart());\n }\n }\n return { event, data: dataLines.join('\\n') };\n })\n .filter((event) => event.data !== '' || event.event !== 'message');\n return { events, remainder };\n}\n\nfunction parseExitCode(data: string): number {\n try {\n const parsed = JSON.parse(data) as { exit_code?: number };\n return typeof parsed.exit_code === 'number' ? parsed.exit_code : 1;\n } catch {\n return 1;\n }\n}\n\nfunction parseBridgeError(data: string): string {\n try {\n const parsed = JSON.parse(data) as { error?: string };\n return parsed.error ?? data;\n } catch {\n return data;\n }\n}\n\nexport function createCloudflareBridgeRuntime(\n config: CloudflareBridgeRuntimeConfig\n): CloudflareBridgeRuntime {\n const baseURL = normalizeBaseURL(config.baseURL);\n const apiPrefix = normalizePrefix(config.apiRoutePrefix);\n const workspaceRoot = normalizeWorkspaceRoot(\n config.workspaceRoot ?? DEFAULT_WORKSPACE_ROOT\n );\n const shell = config.shell ?? DEFAULT_SHELL;\n const fetchImpl = getFetch(config);\n let sandboxIdPromise: Promise<string> | undefined =\n config.sandboxId != null ? Promise.resolve(config.sandboxId) : undefined;\n\n function bridgeURL(suffix: string): string {\n return `${baseURL}${apiPrefix}${suffix}`;\n }\n\n async function getSandboxId(): Promise<string> {\n if (sandboxIdPromise == null) {\n sandboxIdPromise = (async (): Promise<string> => {\n const response = await fetchImpl(bridgeURL('/sandbox'), {\n method: 'POST',\n headers: createHeaders(config),\n });\n await assertOk(response, 'sandbox create');\n const payload = (await response.json()) as { id?: string };\n if (typeof payload.id !== 'string' || payload.id === '') {\n throw new Error(\n 'Cloudflare sandbox bridge create did not return an id.'\n );\n }\n return payload.id;\n })().catch((error: unknown) => {\n sandboxIdPromise = undefined;\n throw error;\n });\n }\n return sandboxIdPromise;\n }\n\n async function exec(\n command: string,\n options: t.CloudflareSandboxExecOptions = {}\n ): Promise<t.CloudflareSandboxExecResult> {\n const sandboxId = await getSandboxId();\n const sandboxPathId = encodeURIComponent(sandboxId);\n const response = await fetchImpl(\n bridgeURL(`/sandbox/${sandboxPathId}/exec`),\n {\n method: 'POST',\n headers: createHeaders(config, {\n 'Content-Type': 'application/json',\n }),\n body: JSON.stringify({\n argv: [shell, '-lc', commandWithEnv(command, options.env)],\n cwd: toSandboxPath(options.cwd ?? workspaceRoot, workspaceRoot),\n timeout_ms: options.timeout,\n }),\n signal: options.signal,\n }\n );\n await assertOk(response, 'exec');\n if (response.body == null) {\n throw new Error(\n 'Cloudflare sandbox bridge exec response did not include a body.'\n );\n }\n\n const decoder = new TextDecoder();\n const reader = response.body.getReader();\n let buffer = '';\n let stdout = '';\n let stderr = '';\n let exitCode: number | undefined;\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n const parsed = parseSSEChunk(buffer);\n buffer = parsed.remainder;\n for (const event of parsed.events) {\n if (event.event === 'stdout') {\n const decoded = decodeBase64(event.data);\n stdout += decoded;\n options.onOutput?.('stdout', decoded);\n } else if (event.event === 'stderr') {\n const decoded = decodeBase64(event.data);\n stderr += decoded;\n options.onOutput?.('stderr', decoded);\n } else if (event.event === 'exit') {\n exitCode = parseExitCode(event.data);\n } else if (event.event === 'error') {\n throw new Error(parseBridgeError(event.data));\n }\n }\n }\n buffer += decoder.decode();\n const parsed = parseSSEChunk(buffer);\n buffer = parsed.remainder;\n for (const event of parsed.events) {\n if (event.event === 'stdout') {\n const decoded = decodeBase64(event.data);\n stdout += decoded;\n options.onOutput?.('stdout', decoded);\n } else if (event.event === 'stderr') {\n const decoded = decodeBase64(event.data);\n stderr += decoded;\n options.onOutput?.('stderr', decoded);\n } else if (event.event === 'exit') {\n exitCode = parseExitCode(event.data);\n } else if (event.event === 'error') {\n throw new Error(parseBridgeError(event.data));\n }\n }\n } finally {\n reader.releaseLock();\n }\n\n if (exitCode == null) {\n throw new Error(\n 'Cloudflare sandbox bridge exec stream closed before an exit event.'\n );\n }\n\n return {\n success: exitCode === 0,\n exitCode,\n stdout,\n stderr,\n command,\n };\n }\n\n async function readFile(filePath: string): Promise<Buffer> {\n const sandboxId = await getSandboxId();\n const sandboxPathId = encodeURIComponent(sandboxId);\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const response = await fetchImpl(\n bridgeURL(\n `/sandbox/${sandboxPathId}/file/${encodeBridgePath(resolvedPath)}`\n ),\n {\n headers: createHeaders(config),\n }\n );\n await assertOk(response, 'readFile');\n return Buffer.from(await response.arrayBuffer());\n }\n\n async function writeFile(\n filePath: string,\n content: string | ReadableStream<Uint8Array>,\n options?: { encoding?: string }\n ): Promise<unknown> {\n const sandboxId = await getSandboxId();\n const sandboxPathId = encodeURIComponent(sandboxId);\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const body = await normalizeWriteBody(content, options);\n const response = await fetchImpl(\n bridgeURL(\n `/sandbox/${sandboxPathId}/file/${encodeBridgePath(resolvedPath)}`\n ),\n {\n method: 'PUT',\n headers: createHeaders(config, {\n 'Content-Type': 'application/octet-stream',\n }),\n body,\n }\n );\n await assertOk(response, 'writeFile');\n return response.json().catch(() => ({ ok: true }));\n }\n\n async function mkdir(\n filePath: string,\n options?: { recursive?: boolean }\n ): Promise<unknown> {\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const command = `${options?.recursive === true ? 'mkdir -p' : 'mkdir'} -- ${quote(resolvedPath)}`;\n const result = await exec(command, { cwd: workspaceRoot });\n if (result.exitCode !== 0) {\n throw new Error(result.stderr || `mkdir failed for ${resolvedPath}`);\n }\n return { ok: true };\n }\n\n async function listFiles(\n filePath: string,\n options?: t.CloudflareSandboxListFilesOptions\n ): Promise<t.CloudflareSandboxFileInfo[]> {\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const maxDepth = options?.recursive === true ? '' : '-maxdepth 1';\n const hiddenFilter =\n options?.includeHidden === true ? '' : ' \\\\( -name \\'.*\\' -prune \\\\) -o';\n const quotedPath = quote(resolvedPath);\n const command =\n `[ -d ${quotedPath} ] || { printf '%s is not a directory\\\\n' ${quotedPath} >&2; exit 20; }; ` +\n `find ${quotedPath} -mindepth 1 ${maxDepth}${hiddenFilter} ` +\n '-printf \\'%y\\\\t%s\\\\t%p\\\\n\\'';\n const result = await exec(command, { cwd: workspaceRoot });\n if (result.exitCode !== 0) {\n throw new Error(result.stderr || `listFiles failed for ${resolvedPath}`);\n }\n return result.stdout\n .split('\\n')\n .filter(Boolean)\n .map((line) => {\n const [rawType, rawSize, ...pathParts] = line.split('\\t');\n const absolutePath = pathParts.join('\\t');\n return {\n name: path.basename(absolutePath),\n absolutePath,\n relativePath: path.relative(resolvedPath, absolutePath),\n type: typeFromFind(rawType),\n size: Number.parseInt(rawSize, 10) || 0,\n };\n });\n }\n\n async function deleteFile(filePath: string): Promise<unknown> {\n const resolvedPath = toSandboxPath(filePath, workspaceRoot);\n const result = await exec(`rm -rf -- ${quote(resolvedPath)}`, {\n cwd: workspaceRoot,\n });\n if (result.exitCode !== 0) {\n throw new Error(result.stderr || `deleteFile failed for ${resolvedPath}`);\n }\n return { ok: true };\n }\n\n return {\n supportsExecSignal: true,\n getSandboxId,\n exec,\n readFile,\n writeFile,\n mkdir,\n listFiles,\n deleteFile,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,150 +1,138 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const DEFAULT_MAX_OUTPUT_CHARS = 200000;
|
|
1
|
+
require("../../common/enum.cjs");
|
|
2
|
+
require("../../common/index.cjs");
|
|
3
|
+
const require_ProgrammaticToolCalling = require("../ProgrammaticToolCalling.cjs");
|
|
4
|
+
const require_BashProgrammaticToolCalling = require("../BashProgrammaticToolCalling.cjs");
|
|
5
|
+
const require_CloudflareSandboxExecutionEngine = require("./CloudflareSandboxExecutionEngine.cjs");
|
|
6
|
+
let _langchain_core_tools = require("@langchain/core/tools");
|
|
7
|
+
//#region src/tools/cloudflare/CloudflareProgrammaticToolCalling.ts
|
|
8
|
+
const DEFAULT_TIMEOUT = 6e4;
|
|
9
|
+
const MIN_TIMEOUT = 1e3;
|
|
10
|
+
const MAX_TIMEOUT = 3e5;
|
|
11
|
+
const DEFAULT_MAX_OUTPUT_CHARS = 2e5;
|
|
13
12
|
const NATIVE_TOOL_NAMES = new Set([
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
"read_file",
|
|
14
|
+
"write_file",
|
|
15
|
+
"edit_file",
|
|
16
|
+
"grep_search",
|
|
17
|
+
"glob_search",
|
|
18
|
+
"list_directory",
|
|
19
|
+
"compile_check",
|
|
20
|
+
"bash_tool",
|
|
21
|
+
"execute_code"
|
|
23
22
|
]);
|
|
24
23
|
function normalizeTimeout(timeoutMs) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
return Math.max(MIN_TIMEOUT, Math.floor(timeoutMs));
|
|
24
|
+
if (timeoutMs == null || !Number.isFinite(timeoutMs)) return DEFAULT_TIMEOUT;
|
|
25
|
+
return Math.max(MIN_TIMEOUT, Math.floor(timeoutMs));
|
|
29
26
|
}
|
|
30
27
|
function formatTimeout(timeoutMs) {
|
|
31
|
-
|
|
32
|
-
? `${timeoutMs / 1000} seconds`
|
|
33
|
-
: `${timeoutMs} milliseconds`;
|
|
28
|
+
return timeoutMs % 1e3 === 0 ? `${timeoutMs / 1e3} seconds` : `${timeoutMs} milliseconds`;
|
|
34
29
|
}
|
|
35
30
|
function createTimeoutSchema(timeoutMs) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
};
|
|
31
|
+
const defaultTimeout = normalizeTimeout(timeoutMs);
|
|
32
|
+
const maxTimeout = Math.max(MAX_TIMEOUT, defaultTimeout);
|
|
33
|
+
return {
|
|
34
|
+
type: "integer",
|
|
35
|
+
minimum: MIN_TIMEOUT,
|
|
36
|
+
maximum: maxTimeout,
|
|
37
|
+
default: defaultTimeout,
|
|
38
|
+
description: `Maximum Cloudflare Sandbox execution time in milliseconds. Default: ${formatTimeout(defaultTimeout)}. Max: ${formatTimeout(maxTimeout)}.`
|
|
39
|
+
};
|
|
46
40
|
}
|
|
47
41
|
function clampExecutionTimeout(requestedTimeoutMs, configuredTimeoutMs) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
return Math.min(Math.max(MIN_TIMEOUT, Math.floor(requestedTimeoutMs)), maxTimeout);
|
|
42
|
+
const defaultTimeout = normalizeTimeout(configuredTimeoutMs);
|
|
43
|
+
const maxTimeout = Math.max(MAX_TIMEOUT, defaultTimeout);
|
|
44
|
+
if (requestedTimeoutMs == null || !Number.isFinite(requestedTimeoutMs)) return defaultTimeout;
|
|
45
|
+
return Math.min(Math.max(MIN_TIMEOUT, Math.floor(requestedTimeoutMs)), maxTimeout);
|
|
54
46
|
}
|
|
55
47
|
function quoteShell(value) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const escapedQuote = String.raw `'\''`;
|
|
60
|
-
return `'${value.replace(/'/g, escapedQuote)}'`;
|
|
48
|
+
if (/^[A-Za-z0-9_/:=.,@%+-]+$/.test(value)) return value;
|
|
49
|
+
const escapedQuote = String.raw`'\''`;
|
|
50
|
+
return `'${value.replace(/'/g, escapedQuote)}'`;
|
|
61
51
|
}
|
|
62
52
|
function truncateOutput(value, maxChars = DEFAULT_MAX_OUTPUT_CHARS) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const omitted = value.length - maxChars;
|
|
69
|
-
return `${value.slice(0, head)}\n\n[... ${omitted} characters truncated ...]\n\n${value.slice(value.length - tail)}`;
|
|
53
|
+
if (value.length <= maxChars) return value;
|
|
54
|
+
const head = Math.floor(maxChars * .6);
|
|
55
|
+
const tail = maxChars - head;
|
|
56
|
+
const omitted = value.length - maxChars;
|
|
57
|
+
return `${value.slice(0, head)}\n\n[... ${omitted} characters truncated ...]\n\n${value.slice(value.length - tail)}`;
|
|
70
58
|
}
|
|
71
59
|
function withInSandboxTimeout(command, timeoutMs) {
|
|
72
|
-
|
|
73
|
-
return `timeout -k 2s ${timeoutSeconds}s ${command}`;
|
|
60
|
+
return `timeout -k 2s ${Math.max(1, Math.ceil(timeoutMs / 1e3))}s ${command}`;
|
|
74
61
|
}
|
|
75
62
|
function outerTimeoutMs(timeoutMs) {
|
|
76
|
-
|
|
63
|
+
return timeoutMs + 5e3;
|
|
77
64
|
}
|
|
78
65
|
function isInSandboxTimeoutExit(exitCode) {
|
|
79
|
-
|
|
66
|
+
return exitCode === 124 || exitCode === 137;
|
|
80
67
|
}
|
|
81
68
|
async function executeGeneratedCloudflareBash(command, config) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
69
|
+
const sandbox = await require_CloudflareSandboxExecutionEngine.resolveCloudflareSandbox(config);
|
|
70
|
+
const workspaceRoot = require_CloudflareSandboxExecutionEngine.getCloudflareWorkspaceRoot(config);
|
|
71
|
+
const shell = config.shell ?? "bash";
|
|
72
|
+
const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT;
|
|
73
|
+
const result = await sandbox.exec(withInSandboxTimeout(`${shell} -lc ${quoteShell(command)}`, timeoutMs), {
|
|
74
|
+
cwd: workspaceRoot,
|
|
75
|
+
env: config.env,
|
|
76
|
+
timeout: outerTimeoutMs(timeoutMs)
|
|
77
|
+
});
|
|
78
|
+
const maxOutputChars = config.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS;
|
|
79
|
+
return {
|
|
80
|
+
stdout: truncateOutput(result.stdout, maxOutputChars),
|
|
81
|
+
stderr: truncateOutput(result.stderr, maxOutputChars),
|
|
82
|
+
exitCode: result.exitCode,
|
|
83
|
+
timedOut: isInSandboxTimeoutExit(result.exitCode)
|
|
84
|
+
};
|
|
98
85
|
}
|
|
99
86
|
function createCloudflareProgrammaticToolCallingSchema(config) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
87
|
+
return {
|
|
88
|
+
...require_ProgrammaticToolCalling.ProgrammaticToolCallingSchema,
|
|
89
|
+
properties: {
|
|
90
|
+
...require_ProgrammaticToolCalling.ProgrammaticToolCallingSchema.properties,
|
|
91
|
+
timeout: createTimeoutSchema(config.timeoutMs),
|
|
92
|
+
lang: {
|
|
93
|
+
type: "string",
|
|
94
|
+
enum: [
|
|
95
|
+
"py",
|
|
96
|
+
"python",
|
|
97
|
+
"bash",
|
|
98
|
+
"sh"
|
|
99
|
+
],
|
|
100
|
+
default: "bash",
|
|
101
|
+
description: "Cloudflare Sandbox runtime for orchestration code. Defaults to bash; use py/python for Python orchestration."
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
};
|
|
113
105
|
}
|
|
114
106
|
function createCloudflareBashProgrammaticToolCallingSchema(config) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
107
|
+
return {
|
|
108
|
+
...require_BashProgrammaticToolCalling.BashProgrammaticToolCallingSchema,
|
|
109
|
+
properties: {
|
|
110
|
+
...require_BashProgrammaticToolCalling.BashProgrammaticToolCallingSchema.properties,
|
|
111
|
+
timeout: createTimeoutSchema(config.timeoutMs)
|
|
112
|
+
}
|
|
113
|
+
};
|
|
122
114
|
}
|
|
123
115
|
function resolveRuntime(params) {
|
|
124
|
-
|
|
125
|
-
|
|
116
|
+
const raw = params.lang ?? params.runtime ?? params.language ?? "bash";
|
|
117
|
+
return raw === "py" || raw === "python" ? "python" : "bash";
|
|
126
118
|
}
|
|
127
119
|
function filterNativeTools(toolDefs, code, runtime) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return filter(nativeDefs, code);
|
|
120
|
+
const nativeDefs = toolDefs.filter((def) => NATIVE_TOOL_NAMES.has(def.name));
|
|
121
|
+
return (runtime === "bash" ? require_BashProgrammaticToolCalling.filterBashToolsByUsage : require_ProgrammaticToolCalling.filterToolsByUsage)(nativeDefs, code);
|
|
131
122
|
}
|
|
132
123
|
function indent(code, spaces = 4) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
.split('\n')
|
|
136
|
-
.map((line) => (line === '' ? line : prefix + line))
|
|
137
|
-
.join('\n');
|
|
124
|
+
const prefix = " ".repeat(spaces);
|
|
125
|
+
return code.split("\n").map((line) => line === "" ? line : prefix + line).join("\n");
|
|
138
126
|
}
|
|
139
127
|
function pythonBoolean(value) {
|
|
140
|
-
|
|
128
|
+
return value === true ? "True" : "False";
|
|
141
129
|
}
|
|
142
130
|
function createPythonNativeToolSource(config, workspaceRoot) {
|
|
143
|
-
|
|
131
|
+
return `
|
|
144
132
|
import asyncio, fnmatch, glob, json, os, pathlib, re, shlex, shutil, subprocess, sys, tempfile
|
|
145
133
|
|
|
146
134
|
WORKSPACE = ${JSON.stringify(workspaceRoot)}
|
|
147
|
-
SHELL = ${JSON.stringify(config.shell ??
|
|
135
|
+
SHELL = ${JSON.stringify(config.shell ?? "bash")}
|
|
148
136
|
READ_ONLY = ${pythonBoolean(config.readOnly)}
|
|
149
137
|
ALLOW_DANGEROUS_COMMANDS = ${pythonBoolean(config.allowDangerousCommands)}
|
|
150
138
|
DESTRUCTIVE_TARGET = r"(?:/|~|\\$\\{?HOME\\}?|\\.)(?:/?\\.?\\*|/)?"
|
|
@@ -454,14 +442,14 @@ glob_module = glob
|
|
|
454
442
|
`.trim();
|
|
455
443
|
}
|
|
456
444
|
function createNodeNativeToolSource(config, workspaceRoot) {
|
|
457
|
-
|
|
445
|
+
return `
|
|
458
446
|
const fs = require("fs");
|
|
459
447
|
const fsp = fs.promises;
|
|
460
448
|
const path = require("path");
|
|
461
449
|
const cp = require("child_process");
|
|
462
450
|
|
|
463
451
|
const WORKSPACE = ${JSON.stringify(workspaceRoot)};
|
|
464
|
-
const SHELL = ${JSON.stringify(config.shell ??
|
|
452
|
+
const SHELL = ${JSON.stringify(config.shell ?? "bash")};
|
|
465
453
|
const READ_ONLY = ${JSON.stringify(config.readOnly === true)};
|
|
466
454
|
const ALLOW_DANGEROUS_COMMANDS = ${JSON.stringify(config.allowDangerousCommands === true)};
|
|
467
455
|
const DESTRUCTIVE_TARGET = "(?:\\\\/|~|\\\\$\\\\{?HOME\\\\}?|\\\\.)(?:\\\\/?\\\\.?\\\\*|\\\\/)?";
|
|
@@ -884,16 +872,11 @@ main().catch((error) => {
|
|
|
884
872
|
`.trim();
|
|
885
873
|
}
|
|
886
874
|
function createPythonProgram(userCode, toolDefs, config, workspaceRoot) {
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
: '';
|
|
893
|
-
})
|
|
894
|
-
.filter(Boolean)
|
|
895
|
-
.join('\n');
|
|
896
|
-
return `${createPythonNativeToolSource(config, workspaceRoot)}
|
|
875
|
+
const aliases = toolDefs.map((def) => {
|
|
876
|
+
const pythonName = require_ProgrammaticToolCalling.normalizeToPythonIdentifier(def.name);
|
|
877
|
+
return NATIVE_TOOL_NAMES.has(def.name) && pythonName !== def.name ? `${pythonName} = globals()[${JSON.stringify(def.name)}]` : "";
|
|
878
|
+
}).filter(Boolean).join("\n");
|
|
879
|
+
return `${createPythonNativeToolSource(config, workspaceRoot)}
|
|
897
880
|
${aliases}
|
|
898
881
|
|
|
899
882
|
async def __lc_user_main__():
|
|
@@ -903,95 +886,85 @@ asyncio.run(__lc_user_main__())
|
|
|
903
886
|
`;
|
|
904
887
|
}
|
|
905
888
|
function createBashProgram(userCode, toolDefs, config, workspaceRoot) {
|
|
906
|
-
|
|
907
|
-
const functions = toolDefs
|
|
908
|
-
.map((def) => {
|
|
909
|
-
const bashName = BashProgrammaticToolCalling.normalizeToBashIdentifier(def.name);
|
|
910
|
-
if (!NATIVE_TOOL_NAMES.has(def.name)) {
|
|
911
|
-
return '';
|
|
912
|
-
}
|
|
913
|
-
return `${bashName}() { node "$__LC_TOOL_HELPER" ${JSON.stringify(def.name)} "$1"; }`;
|
|
914
|
-
})
|
|
915
|
-
.filter(Boolean)
|
|
916
|
-
.join('\n');
|
|
917
|
-
return `
|
|
889
|
+
return `
|
|
918
890
|
set -euo pipefail
|
|
919
891
|
command -v node >/dev/null 2>&1 || { echo "Cloudflare programmatic tool calling requires node in the sandbox image." >&2; exit 127; }
|
|
920
892
|
__LC_TOOL_HELPER="$(mktemp /tmp/lc-tools.XXXXXX.js)"
|
|
921
893
|
cat > "$__LC_TOOL_HELPER" <<'JS'
|
|
922
|
-
${
|
|
894
|
+
${createNodeNativeToolSource(config, workspaceRoot)}
|
|
923
895
|
JS
|
|
924
896
|
trap 'rm -f "$__LC_TOOL_HELPER"' EXIT
|
|
925
|
-
${
|
|
897
|
+
${toolDefs.map((def) => {
|
|
898
|
+
const bashName = require_BashProgrammaticToolCalling.normalizeToBashIdentifier(def.name);
|
|
899
|
+
if (!NATIVE_TOOL_NAMES.has(def.name)) return "";
|
|
900
|
+
return `${bashName}() { node "$__LC_TOOL_HELPER" ${JSON.stringify(def.name)} "$1"; }`;
|
|
901
|
+
}).filter(Boolean).join("\n")}
|
|
926
902
|
${userCode}
|
|
927
903
|
`.trim();
|
|
928
904
|
}
|
|
929
905
|
async function runProgrammatic(args) {
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
stderr: result.stderr,
|
|
959
|
-
files: [],
|
|
960
|
-
});
|
|
906
|
+
const effectiveTools = filterNativeTools((args.config?.toolCall ?? {}).toolDefs ?? [], args.params.code, args.runtime);
|
|
907
|
+
const timeoutMs = clampExecutionTimeout(args.params.timeout, args.cloudflareConfig.timeoutMs);
|
|
908
|
+
const workspaceRoot = require_CloudflareSandboxExecutionEngine.getCloudflareWorkspaceRoot(args.cloudflareConfig);
|
|
909
|
+
let result;
|
|
910
|
+
if (args.runtime === "bash") {
|
|
911
|
+
await require_CloudflareSandboxExecutionEngine.validateCloudflareBashCommand(args.params.code, [], {
|
|
912
|
+
...args.cloudflareConfig,
|
|
913
|
+
timeoutMs
|
|
914
|
+
});
|
|
915
|
+
result = await executeGeneratedCloudflareBash(createBashProgram(args.params.code, effectiveTools, args.cloudflareConfig, workspaceRoot), {
|
|
916
|
+
...args.cloudflareConfig,
|
|
917
|
+
timeoutMs
|
|
918
|
+
});
|
|
919
|
+
} else result = await require_CloudflareSandboxExecutionEngine.executeCloudflareCode({
|
|
920
|
+
lang: "py",
|
|
921
|
+
code: createPythonProgram(args.params.code, effectiveTools, args.cloudflareConfig, workspaceRoot)
|
|
922
|
+
}, {
|
|
923
|
+
...args.cloudflareConfig,
|
|
924
|
+
timeoutMs
|
|
925
|
+
});
|
|
926
|
+
if (result.exitCode !== 0 || result.timedOut) throw new Error(result.stderr !== "" ? result.stderr : `Cloudflare ${args.runtime} programmatic execution exited with code ${result.exitCode ?? "unknown"}`);
|
|
927
|
+
return require_ProgrammaticToolCalling.formatCompletedResponse({
|
|
928
|
+
status: "completed",
|
|
929
|
+
session_id: "cloudflare-sandbox",
|
|
930
|
+
stdout: result.stdout,
|
|
931
|
+
stderr: result.stderr,
|
|
932
|
+
files: []
|
|
933
|
+
});
|
|
961
934
|
}
|
|
962
935
|
function createCloudflareProgrammaticToolCallingTool(cloudflareConfig) {
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
936
|
+
return (0, _langchain_core_tools.tool)(async (rawParams, config) => {
|
|
937
|
+
const params = rawParams;
|
|
938
|
+
return runProgrammatic({
|
|
939
|
+
params,
|
|
940
|
+
config,
|
|
941
|
+
cloudflareConfig,
|
|
942
|
+
runtime: resolveRuntime(params)
|
|
943
|
+
});
|
|
944
|
+
}, {
|
|
945
|
+
name: require_ProgrammaticToolCalling.ProgrammaticToolCallingName,
|
|
946
|
+
description: `${require_ProgrammaticToolCalling.ProgrammaticToolCallingDescription}\n\nCloudflare Sandbox engine: exposes the built-in coding tools inside the sandbox process. Non-coding host tools are not callable from this in-sandbox programmatic runner.`,
|
|
947
|
+
schema: createCloudflareProgrammaticToolCallingSchema(cloudflareConfig),
|
|
948
|
+
responseFormat: "content_and_artifact"
|
|
949
|
+
});
|
|
977
950
|
}
|
|
978
951
|
function createCloudflareBashProgrammaticToolCallingTool(cloudflareConfig) {
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
952
|
+
return (0, _langchain_core_tools.tool)(async (rawParams, config) => {
|
|
953
|
+
return runProgrammatic({
|
|
954
|
+
params: rawParams,
|
|
955
|
+
config,
|
|
956
|
+
cloudflareConfig,
|
|
957
|
+
runtime: "bash"
|
|
958
|
+
});
|
|
959
|
+
}, {
|
|
960
|
+
name: "run_tools_with_bash",
|
|
961
|
+
description: `${require_BashProgrammaticToolCalling.BashProgrammaticToolCallingDescription}\n\nCloudflare Sandbox engine: exposes the built-in coding tools as bash functions inside the sandbox process. Non-coding host tools are not callable from this in-sandbox programmatic runner.`,
|
|
962
|
+
schema: createCloudflareBashProgrammaticToolCallingSchema(cloudflareConfig),
|
|
963
|
+
responseFormat: "content_and_artifact"
|
|
964
|
+
});
|
|
965
|
+
}
|
|
966
|
+
//#endregion
|
|
995
967
|
exports.createCloudflareBashProgrammaticToolCallingTool = createCloudflareBashProgrammaticToolCallingTool;
|
|
996
968
|
exports.createCloudflareProgrammaticToolCallingTool = createCloudflareProgrammaticToolCallingTool;
|
|
997
|
-
|
|
969
|
+
|
|
970
|
+
//# sourceMappingURL=CloudflareProgrammaticToolCalling.cjs.map
|