@librechat/agents 3.2.32 → 3.2.34
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 +214 -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 +141 -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 +404 -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 +1035 -1273
- 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 +446 -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 +874 -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 +2146 -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 +46 -34
- 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 +214 -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 +140 -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 +403 -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 +1035 -1268
- 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 +446 -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 +872 -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 +2144 -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 +42 -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/llm/bedrock/utils/index.d.ts +1 -1
- package/dist/types/llm/bedrock/utils/message_outputs.d.ts +9 -0
- package/dist/types/llm/vertexai/index.d.ts +10 -0
- package/dist/types/tools/ToolNode.d.ts +8 -0
- package/dist/types/tools/search/tool.d.ts +17 -0
- package/dist/types/tools/search/types.d.ts +4 -0
- package/dist/types/tools/streamedToolCallSeals.d.ts +5 -1
- package/dist/types/types/tools.d.ts +10 -0
- package/package.json +4 -10
- package/src/__tests__/stream.eagerEventExecution.test.ts +703 -0
- package/src/llm/bedrock/index.ts +40 -0
- package/src/llm/bedrock/streamSealDispatch.test.ts +158 -0
- package/src/llm/bedrock/utils/index.ts +1 -0
- package/src/llm/bedrock/utils/message_outputs.test.ts +85 -0
- package/src/llm/bedrock/utils/message_outputs.ts +43 -0
- package/src/llm/google/utils/common.test.ts +64 -0
- package/src/llm/google/utils/common.ts +18 -0
- package/src/llm/openai/index.ts +95 -1
- package/src/llm/openai/sequentialToolCallSeals.test.ts +199 -0
- package/src/llm/vertexai/index.ts +31 -0
- package/src/llm/vertexai/sealStreamedToolCalls.test.ts +88 -0
- package/src/llm/vertexai/streamSealDispatch.test.ts +148 -0
- package/src/stream.ts +40 -6
- package/src/tools/ToolNode.ts +85 -3
- package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +368 -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/src/tools/streamedToolCallSeals.ts +37 -9
- package/src/types/tools.ts +10 -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":"CloudflareSandboxExecutionEngine.mjs","sources":["../../../../src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts"],"sourcesContent":["import { PassThrough } from 'stream';\nimport { posix as path } from 'path';\nimport { EventEmitter } from 'events';\nimport type { WriteFileOptions, MakeDirectoryOptions, Stats } from 'fs';\nimport type { ChildProcessWithoutNullStreams } from 'child_process';\nimport type { FileHandle } from 'fs/promises';\nimport type { WorkspaceFS, ReaddirEntry } from '@/tools/local/workspaceFS';\nimport type * as t from '@/types';\nimport {\n LOCAL_SPAWN_TIMEOUT_MS,\n validateBashCommand,\n} from '@/tools/local/LocalExecutionEngine';\n\nconst DEFAULT_WORKSPACE_ROOT = '/workspace';\nconst DEFAULT_TIMEOUT_MS = 60000;\nconst DEFAULT_MAX_OUTPUT_CHARS = 200000;\nconst PROTECTED_TARGET_ARG_RE = /^(?:\\/|~|\\$\\{?HOME\\}?|\\.)(?:\\/?\\.?\\*|\\/)?$/;\nconst DESTRUCTIVE_OP_IN_COMMAND_RE =\n /\\b(?:rm\\s+-[^\\s]*[rf]|chmod\\s+-R|chown\\s+-R)\\b/;\n\ntype SpawnResult = {\n stdout: string;\n stderr: string;\n exitCode: number | null;\n timedOut: boolean;\n};\n\ntype RuntimeCommand = {\n fileName: string;\n source?: string;\n command: string;\n};\n\ntype SandboxRuntimeContext = {\n sandbox: t.CloudflareSandboxRuntime;\n workspaceRoot: string;\n env?: Record<string, string | undefined>;\n timeoutMs: number;\n maxOutputChars: number;\n shell: string;\n};\n\nconst sandboxFactoryCache = new WeakMap<\n t.CloudflareSandboxExecutionConfig,\n Promise<t.CloudflareSandboxRuntime>\n>();\n\nfunction normalizeWorkspaceRoot(workspaceRoot: string): string {\n const normalized = path.normalize(workspaceRoot);\n return normalized === '/' ? normalized : normalized.replace(/\\/+$/, '');\n}\n\nexport function getCloudflareWorkspaceRoot(\n config?: t.CloudflareSandboxExecutionConfig\n): string {\n return normalizeWorkspaceRoot(\n config?.workspaceRoot ?? DEFAULT_WORKSPACE_ROOT\n );\n}\n\nexport async function resolveCloudflareSandbox(\n config: t.CloudflareSandboxExecutionConfig\n): Promise<t.CloudflareSandboxRuntime> {\n const sandbox = config.sandbox;\n if (typeof sandbox !== 'function') {\n return sandbox;\n }\n let cached = sandboxFactoryCache.get(config);\n if (cached == null) {\n cached = Promise.resolve()\n .then(() => sandbox())\n .catch((error: unknown) => {\n sandboxFactoryCache.delete(config);\n throw error;\n });\n sandboxFactoryCache.set(config, cached);\n }\n return cached;\n}\n\nasync function getRuntimeContext(\n config: t.CloudflareSandboxExecutionConfig\n): Promise<SandboxRuntimeContext> {\n return {\n sandbox: await resolveCloudflareSandbox(config),\n workspaceRoot: getCloudflareWorkspaceRoot(config),\n env: config.env,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n maxOutputChars: config.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS,\n shell: config.shell ?? 'bash',\n };\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 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 withInSandboxTimeout(command: string, timeoutMs: number): string {\n const timeoutSeconds = Math.max(1, Math.ceil(timeoutMs / 1000));\n return `timeout -k 2s ${timeoutSeconds}s ${command}`;\n}\n\nfunction outerTimeoutMs(timeoutMs: number): number {\n return timeoutMs + 5000;\n}\n\nfunction isInSandboxTimeoutExit(exitCode: number | null): boolean {\n return exitCode === 124 || exitCode === 137;\n}\n\nfunction truncateOutput(value: string, maxChars: number): string {\n if (maxChars <= 0 || value.length <= maxChars) {\n return value;\n }\n const head = Math.max(Math.floor(maxChars / 2), 0);\n const tail = Math.max(maxChars - head, 0);\n return `${value.slice(0, head)}\\n...[truncated ${value.length - maxChars} chars]...\\n${value.slice(value.length - tail)}`;\n}\n\nasync function readStream(stream: ReadableStream<Uint8Array>): Promise<Buffer> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n return Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)));\n}\n\nasync function normalizeReadFileContent(\n result: t.CloudflareSandboxReadFileResult\n): Promise<Buffer> {\n if (typeof result === 'string') {\n return Buffer.from(result, 'utf8');\n }\n if (Buffer.isBuffer(result)) {\n return result;\n }\n if (result instanceof Uint8Array) {\n return Buffer.from(result);\n }\n const content = result.content;\n if (typeof content === 'string') {\n if (result.encoding === 'base64') {\n return Buffer.from(content, 'base64');\n }\n return Buffer.from(content, 'utf8');\n }\n if (Buffer.isBuffer(content)) {\n return content;\n }\n if (content instanceof Uint8Array) {\n return Buffer.from(content);\n }\n return readStream(content);\n}\n\nfunction bytesToStream(bytes: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller): void {\n controller.enqueue(bytes);\n controller.close();\n },\n });\n}\n\nfunction normalizeWriteFileContent(content: string | Buffer | Uint8Array): {\n content: string | ReadableStream<Uint8Array>;\n options?: { encoding?: string };\n} {\n if (typeof content === 'string') {\n return { content, options: { encoding: 'utf8' } };\n }\n return { content: bytesToStream(content) };\n}\n\nfunction createStats(info: {\n size?: number;\n type?: t.CloudflareSandboxFileInfo['type'];\n}): Stats {\n const type = info.type ?? 'file';\n const now = new Date();\n return {\n size: info.size ?? 0,\n isFile: () => type === 'file',\n isDirectory: () => type === 'directory',\n isSymbolicLink: () => type === 'symlink',\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: 0,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n blksize: 0,\n blocks: 0,\n atimeMs: now.getTime(),\n mtimeMs: now.getTime(),\n ctimeMs: now.getTime(),\n birthtimeMs: now.getTime(),\n atime: now,\n mtime: now,\n ctime: now,\n birthtime: now,\n } as Stats;\n}\n\nfunction normalizeFileList(\n result: t.CloudflareSandboxListFilesResult\n): t.CloudflareSandboxFileInfo[] {\n return Array.isArray(result) ? result : result.files;\n}\n\nfunction entryNameFor(\n info: t.CloudflareSandboxFileInfo,\n parentPath: string\n): string {\n if (info.name !== '') {\n return info.name.includes('/') ? path.basename(info.name) : info.name;\n }\n if (info.absolutePath != null && info.absolutePath !== '') {\n return path.basename(info.absolutePath);\n }\n if (info.relativePath != null && info.relativePath !== '') {\n return path.basename(info.relativePath);\n }\n return path.basename(parentPath);\n}\n\nfunction entryAbsolutePath(\n info: t.CloudflareSandboxFileInfo,\n parentPath: string\n): string {\n if (info.absolutePath != null && info.absolutePath !== '') {\n return path.normalize(info.absolutePath);\n }\n if (info.relativePath != null && info.relativePath !== '') {\n return path.resolve(parentPath, info.relativePath);\n }\n return path.resolve(parentPath, info.name);\n}\n\nfunction createDirent(info: t.CloudflareSandboxFileInfo): ReaddirEntry {\n return {\n name: entryNameFor(info, ''),\n isFile: () => (info.type ?? 'file') === 'file',\n isDirectory: () => info.type === 'directory',\n isSymbolicLink: () => info.type === 'symlink',\n };\n}\n\nasync function findChildInfo(\n sandbox: t.CloudflareSandboxRuntime,\n filePath: string\n): Promise<t.CloudflareSandboxFileInfo | undefined> {\n const parent = path.dirname(filePath);\n const basename = path.basename(filePath);\n const entries = normalizeFileList(\n await sandbox.listFiles(parent, { includeHidden: true })\n );\n return entries.find((entry) => {\n const absolute = entryAbsolutePath(entry, parent);\n return absolute === filePath || entryNameFor(entry, parent) === basename;\n });\n}\n\nexport function createCloudflareWorkspaceFS(\n config: t.CloudflareSandboxExecutionConfig\n): WorkspaceFS {\n const workspaceRoot = getCloudflareWorkspaceRoot(config);\n\n const fs: WorkspaceFS = {\n readFile: (async (filePath: string, encoding?: 'utf8') => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved, encoding ? { encoding } : undefined)\n );\n return encoding != null ? buffer.toString(encoding) : buffer;\n }) as WorkspaceFS['readFile'],\n writeFile: async (\n filePath: string,\n content: string | Buffer,\n _options?: WriteFileOptions\n ) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const normalized = normalizeWriteFileContent(content);\n await sandbox.writeFile(resolved, normalized.content, normalized.options);\n },\n stat: async (filePath: string) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n if (resolved === workspaceRoot) {\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n return createStats({ size: entries.length, type: 'directory' });\n }\n const info = await findChildInfo(sandbox, resolved);\n if (info != null) {\n return createStats({ size: info.size, type: info.type });\n }\n try {\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n return createStats({ size: entries.length, type: 'directory' });\n } catch {\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved)\n );\n return createStats({ size: buffer.length, type: 'file' });\n }\n },\n readdir: (async (filePath: string, options?: { withFileTypes: true }) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n if (options?.withFileTypes === true) {\n return entries.map(createDirent);\n }\n return entries.map((entry) => entryNameFor(entry, resolved));\n }) as WorkspaceFS['readdir'],\n mkdir: async (filePath: string, options?: MakeDirectoryOptions) => {\n const sandbox = await resolveCloudflareSandbox(config);\n await sandbox.mkdir(toSandboxPath(filePath, workspaceRoot), {\n recursive: options?.recursive,\n });\n },\n realpath: async (filePath: string) =>\n toSandboxPath(filePath, workspaceRoot),\n unlink: async (filePath: string) => {\n const sandbox = await resolveCloudflareSandbox(config);\n await sandbox.deleteFile(toSandboxPath(filePath, workspaceRoot));\n },\n open: async (filePath: string, _flags: 'r') => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved)\n );\n return {\n read: async (\n target: Buffer,\n offset: number,\n length: number,\n position: number\n ) => {\n const start = Math.max(position, 0);\n const slice = buffer.subarray(start, start + length);\n slice.copy(target, offset);\n return { bytesRead: slice.length, buffer: target };\n },\n close: async () => undefined,\n } as unknown as FileHandle;\n },\n };\n\n return fs;\n}\n\nfunction createCloudflareSpawn(\n config: t.CloudflareSandboxExecutionConfig\n): t.LocalSpawn {\n return (command, args, options) => {\n const stdout = new PassThrough();\n const stderr = new PassThrough();\n const child = new EventEmitter() as ChildProcessWithoutNullStreams;\n const abortController = new AbortController();\n const state = { closed: false };\n /** Read through a function so concurrent `closeOnce` mutation (via\n * `kill()`/abort during an `await`) isn't statically narrowed away. */\n const isClosed = (): boolean => state.closed;\n const closeOnce = (\n exitCode: number | null,\n signal: NodeJS.Signals | null\n ): void => {\n if (state.closed) {\n return;\n }\n state.closed = true;\n stdout.end();\n stderr.end();\n Object.assign(child, {\n exitCode,\n signalCode: signal,\n });\n child.emit('close', exitCode, signal);\n };\n Object.assign(child, {\n stdout,\n stderr,\n stdin: new PassThrough(),\n stdio: [null, stdout, stderr],\n killed: false,\n exitCode: null,\n signalCode: null,\n pid: undefined,\n kill: (signal: NodeJS.Signals = 'SIGTERM') => {\n Object.assign(child, { killed: true, signalCode: signal });\n abortController.abort();\n closeOnce(null, signal);\n return true;\n },\n });\n\n void (async (): Promise<void> => {\n const ctx = await getRuntimeContext(config);\n const rendered = [command, ...args].map(quote).join(' ');\n const spawnTimeoutMs = (\n options as {\n [LOCAL_SPAWN_TIMEOUT_MS]?: number;\n }\n )[LOCAL_SPAWN_TIMEOUT_MS];\n const timeoutMs =\n typeof spawnTimeoutMs === 'number' && Number.isFinite(spawnTimeoutMs)\n ? spawnTimeoutMs\n : ctx.timeoutMs;\n const timedCommand = withInSandboxTimeout(rendered, timeoutMs);\n const cwd =\n options.cwd == null ? ctx.workspaceRoot : options.cwd.toString();\n if (isClosed()) {\n return;\n }\n const execOptions: t.CloudflareSandboxExecOptions = {\n cwd,\n env: ctx.env,\n timeout: outerTimeoutMs(timeoutMs),\n };\n if (ctx.sandbox.supportsExecSignal === true) {\n execOptions.signal = abortController.signal;\n }\n try {\n const result = await ctx.sandbox.exec(timedCommand, execOptions);\n if (isClosed()) {\n return;\n }\n if (result.stdout) stdout.write(result.stdout);\n if (result.stderr) stderr.write(result.stderr);\n closeOnce(result.exitCode, null);\n } catch (error) {\n if (isClosed()) {\n return;\n }\n stderr.write((error as Error).message);\n closeOnce(1, null);\n }\n })();\n\n return child;\n };\n}\n\nexport function createCloudflareLocalExecutionConfig(\n config: t.CloudflareSandboxExecutionConfig\n): t.LocalExecutionConfig {\n const workspaceRoot = getCloudflareWorkspaceRoot(config);\n return {\n cwd: workspaceRoot,\n workspace: { root: workspaceRoot },\n exec: {\n spawn: createCloudflareSpawn(config),\n fs: createCloudflareWorkspaceFS(config),\n sandboxed: true,\n },\n shell: config.shell ?? 'bash',\n timeoutMs: config.timeoutMs,\n maxOutputChars: config.maxOutputChars,\n env: config.env,\n includeCodingTools: config.includeCodingTools,\n compileCheck: config.compileCheck,\n readOnly: config.readOnly,\n allowDangerousCommands: config.allowDangerousCommands,\n bashAst: config.bashAst,\n fileCheckpointing: config.fileCheckpointing,\n maxReadBytes: config.maxReadBytes,\n attachReadAttachments: config.attachReadAttachments,\n maxAttachmentBytes: config.maxAttachmentBytes,\n postEditSyntaxCheck: config.postEditSyntaxCheck,\n };\n}\n\nexport async function validateCloudflareBashCommand(\n command: string,\n args: readonly string[],\n config: t.CloudflareSandboxExecutionConfig\n): Promise<void> {\n const localConfig = createCloudflareLocalExecutionConfig(config);\n const validation = await validateBashCommand(command, localConfig);\n if (!validation.valid) {\n throw new Error(validation.errors.join('\\n'));\n }\n\n if (\n args.length > 0 &&\n config.allowDangerousCommands !== true &&\n DESTRUCTIVE_OP_IN_COMMAND_RE.test(command)\n ) {\n const offending = args.find((arg) => PROTECTED_TARGET_ARG_RE.test(arg));\n if (offending !== undefined) {\n throw new Error(\n `Command matches a destructive command pattern (protected target \"${offending}\" passed via positional arg).`\n );\n }\n }\n}\n\nexport async function executeCloudflareBash(\n command: string,\n config: t.CloudflareSandboxExecutionConfig,\n args: readonly string[] = []\n): Promise<SpawnResult> {\n await validateCloudflareBashCommand(command, args, config);\n const ctx = await getRuntimeContext(config);\n const shellCommand =\n args.length > 0\n ? `${ctx.shell} -lc ${quote(command)} -- ${args.map(quote).join(' ')}`\n : `${ctx.shell} -lc ${quote(command)}`;\n const result = await ctx.sandbox.exec(\n withInSandboxTimeout(shellCommand, ctx.timeoutMs),\n {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: outerTimeoutMs(ctx.timeoutMs),\n }\n );\n return {\n stdout: truncateOutput(result.stdout, ctx.maxOutputChars),\n stderr: truncateOutput(result.stderr, ctx.maxOutputChars),\n exitCode: result.exitCode,\n timedOut: isInSandboxTimeoutExit(result.exitCode),\n };\n}\n\nfunction runtimeForCode(\n lang: string,\n tempDir: string,\n code: string,\n args: string[] = [],\n shell = 'bash'\n): RuntimeCommand {\n const fileFor = (name: string): string => path.join(tempDir, name);\n const argText = args.map(quote).join(' ');\n switch (lang) {\n case 'py':\n case 'python':\n return {\n fileName: 'main.py',\n source: code,\n command: `python3 ${quote(fileFor('main.py'))} ${argText}`,\n };\n case 'js':\n case 'javascript':\n return {\n fileName: 'main.js',\n source: code,\n command: `node ${quote(fileFor('main.js'))} ${argText}`,\n };\n case 'ts':\n case 'typescript':\n return {\n fileName: 'main.ts',\n source: code,\n command: `npx --no-install tsx ${quote(fileFor('main.ts'))} ${argText}`,\n };\n case 'php':\n return {\n fileName: 'main.php',\n source: code,\n command: `php ${quote(fileFor('main.php'))} ${argText}`,\n };\n case 'go':\n return {\n fileName: 'main.go',\n source: code,\n command: `go run ${quote(fileFor('main.go'))} ${argText}`,\n };\n case 'rs':\n return {\n fileName: 'main.rs',\n source: code,\n command: `${shell} -lc ${quote(\n `rustc ${quote(fileFor('main.rs'))} -o ${quote(fileFor('main-rs'))} && ${quote(fileFor('main-rs'))} ${argText}`\n )}`,\n };\n case 'c':\n return {\n fileName: 'main.c',\n source: code,\n command: `${shell} -lc ${quote(\n `cc ${quote(fileFor('main.c'))} -o ${quote(fileFor('main-c'))} && ${quote(fileFor('main-c'))} ${argText}`\n )}`,\n };\n case 'cpp':\n return {\n fileName: 'main.cpp',\n source: code,\n command: `${shell} -lc ${quote(\n `c++ ${quote(fileFor('main.cpp'))} -o ${quote(fileFor('main-cpp'))} && ${quote(fileFor('main-cpp'))} ${argText}`\n )}`,\n };\n case 'java':\n return {\n fileName: 'Main.java',\n source: code,\n command: `${shell} -lc ${quote(\n `javac ${quote(fileFor('Main.java'))} && java -cp ${quote(tempDir)} Main ${argText}`\n )}`,\n };\n case 'r':\n return {\n fileName: 'main.R',\n source: code,\n command: `Rscript ${quote(fileFor('main.R'))} ${argText}`,\n };\n case 'd':\n return {\n fileName: 'main.d',\n source: code,\n command: `${shell} -lc ${quote(\n `dmd ${quote(fileFor('main.d'))} -of=${quote(fileFor('main-d'))} && ${quote(fileFor('main-d'))} ${argText}`\n )}`,\n };\n case 'f90':\n return {\n fileName: 'main.f90',\n source: code,\n command: `${shell} -lc ${quote(\n `gfortran ${quote(fileFor('main.f90'))} -o ${quote(fileFor('main-f90'))} && ${quote(fileFor('main-f90'))} ${argText}`\n )}`,\n };\n case 'bash':\n case 'sh':\n return {\n fileName: 'main.sh',\n source: code,\n command: `${shell} -lc ${quote(code)} -- ${argText}`,\n };\n default:\n throw new Error(`Unsupported Cloudflare sandbox runtime: ${lang}`);\n }\n}\n\nexport async function executeCloudflareCode(\n input: { lang: string; code: string; args?: string[] },\n config: t.CloudflareSandboxExecutionConfig\n): Promise<SpawnResult> {\n if (input.lang === 'bash' || input.lang === 'sh') {\n return executeCloudflareBash(input.code, config, input.args ?? []);\n }\n const ctx = await getRuntimeContext(config);\n const id = globalThis.crypto.randomUUID();\n const tempDir = path.join(ctx.workspaceRoot, '.lc-exec', id);\n const runtime = runtimeForCode(\n input.lang,\n tempDir,\n input.code,\n input.args,\n ctx.shell\n );\n await ctx.sandbox.mkdir(tempDir, { recursive: true });\n if (runtime.source != null) {\n await ctx.sandbox.writeFile(\n path.join(tempDir, runtime.fileName),\n runtime.source,\n {\n encoding: 'utf8',\n }\n );\n }\n try {\n const result = await ctx.sandbox.exec(\n withInSandboxTimeout(runtime.command, ctx.timeoutMs),\n {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: outerTimeoutMs(ctx.timeoutMs),\n }\n );\n return {\n stdout: truncateOutput(result.stdout, ctx.maxOutputChars),\n stderr: truncateOutput(result.stderr, ctx.maxOutputChars),\n exitCode: result.exitCode,\n timedOut: isInSandboxTimeoutExit(result.exitCode),\n };\n } finally {\n await ctx.sandbox\n .exec(`rm -rf ${quote(tempDir)}`, {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: 10000,\n })\n .catch(() => undefined);\n }\n}\n\nexport function formatCloudflareOutput(\n result: SpawnResult,\n cwd: string\n): string {\n let formatted = '';\n if (result.stdout !== '') {\n formatted += `stdout:\\n${result.stdout}\\n`;\n } else {\n formatted += 'stdout: Empty. Ensure you\\'re writing output explicitly.\\n';\n }\n if (result.stderr !== '') {\n formatted += `stderr:\\n${result.stderr}\\n`;\n }\n if (result.exitCode != null && result.exitCode !== 0) {\n formatted += `exit_code: ${result.exitCode}\\n`;\n }\n if (result.timedOut) {\n formatted += 'timed_out: true\\n';\n }\n formatted += `working_directory: ${cwd}`;\n return formatted.trim();\n}\n"],"names":["path"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CloudflareSandboxExecutionEngine.mjs","names":["path"],"sources":["../../../../src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts"],"sourcesContent":["import { PassThrough } from 'stream';\nimport { posix as path } from 'path';\nimport { EventEmitter } from 'events';\nimport type { WriteFileOptions, MakeDirectoryOptions, Stats } from 'fs';\nimport type { ChildProcessWithoutNullStreams } from 'child_process';\nimport type { FileHandle } from 'fs/promises';\nimport type { WorkspaceFS, ReaddirEntry } from '@/tools/local/workspaceFS';\nimport type * as t from '@/types';\nimport {\n LOCAL_SPAWN_TIMEOUT_MS,\n validateBashCommand,\n} from '@/tools/local/LocalExecutionEngine';\n\nconst DEFAULT_WORKSPACE_ROOT = '/workspace';\nconst DEFAULT_TIMEOUT_MS = 60000;\nconst DEFAULT_MAX_OUTPUT_CHARS = 200000;\nconst PROTECTED_TARGET_ARG_RE = /^(?:\\/|~|\\$\\{?HOME\\}?|\\.)(?:\\/?\\.?\\*|\\/)?$/;\nconst DESTRUCTIVE_OP_IN_COMMAND_RE =\n /\\b(?:rm\\s+-[^\\s]*[rf]|chmod\\s+-R|chown\\s+-R)\\b/;\n\ntype SpawnResult = {\n stdout: string;\n stderr: string;\n exitCode: number | null;\n timedOut: boolean;\n};\n\ntype RuntimeCommand = {\n fileName: string;\n source?: string;\n command: string;\n};\n\ntype SandboxRuntimeContext = {\n sandbox: t.CloudflareSandboxRuntime;\n workspaceRoot: string;\n env?: Record<string, string | undefined>;\n timeoutMs: number;\n maxOutputChars: number;\n shell: string;\n};\n\nconst sandboxFactoryCache = new WeakMap<\n t.CloudflareSandboxExecutionConfig,\n Promise<t.CloudflareSandboxRuntime>\n>();\n\nfunction normalizeWorkspaceRoot(workspaceRoot: string): string {\n const normalized = path.normalize(workspaceRoot);\n return normalized === '/' ? normalized : normalized.replace(/\\/+$/, '');\n}\n\nexport function getCloudflareWorkspaceRoot(\n config?: t.CloudflareSandboxExecutionConfig\n): string {\n return normalizeWorkspaceRoot(\n config?.workspaceRoot ?? DEFAULT_WORKSPACE_ROOT\n );\n}\n\nexport async function resolveCloudflareSandbox(\n config: t.CloudflareSandboxExecutionConfig\n): Promise<t.CloudflareSandboxRuntime> {\n const sandbox = config.sandbox;\n if (typeof sandbox !== 'function') {\n return sandbox;\n }\n let cached = sandboxFactoryCache.get(config);\n if (cached == null) {\n cached = Promise.resolve()\n .then(() => sandbox())\n .catch((error: unknown) => {\n sandboxFactoryCache.delete(config);\n throw error;\n });\n sandboxFactoryCache.set(config, cached);\n }\n return cached;\n}\n\nasync function getRuntimeContext(\n config: t.CloudflareSandboxExecutionConfig\n): Promise<SandboxRuntimeContext> {\n return {\n sandbox: await resolveCloudflareSandbox(config),\n workspaceRoot: getCloudflareWorkspaceRoot(config),\n env: config.env,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n maxOutputChars: config.maxOutputChars ?? DEFAULT_MAX_OUTPUT_CHARS,\n shell: config.shell ?? 'bash',\n };\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 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 withInSandboxTimeout(command: string, timeoutMs: number): string {\n const timeoutSeconds = Math.max(1, Math.ceil(timeoutMs / 1000));\n return `timeout -k 2s ${timeoutSeconds}s ${command}`;\n}\n\nfunction outerTimeoutMs(timeoutMs: number): number {\n return timeoutMs + 5000;\n}\n\nfunction isInSandboxTimeoutExit(exitCode: number | null): boolean {\n return exitCode === 124 || exitCode === 137;\n}\n\nfunction truncateOutput(value: string, maxChars: number): string {\n if (maxChars <= 0 || value.length <= maxChars) {\n return value;\n }\n const head = Math.max(Math.floor(maxChars / 2), 0);\n const tail = Math.max(maxChars - head, 0);\n return `${value.slice(0, head)}\\n...[truncated ${value.length - maxChars} chars]...\\n${value.slice(value.length - tail)}`;\n}\n\nasync function readStream(stream: ReadableStream<Uint8Array>): Promise<Buffer> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n return Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)));\n}\n\nasync function normalizeReadFileContent(\n result: t.CloudflareSandboxReadFileResult\n): Promise<Buffer> {\n if (typeof result === 'string') {\n return Buffer.from(result, 'utf8');\n }\n if (Buffer.isBuffer(result)) {\n return result;\n }\n if (result instanceof Uint8Array) {\n return Buffer.from(result);\n }\n const content = result.content;\n if (typeof content === 'string') {\n if (result.encoding === 'base64') {\n return Buffer.from(content, 'base64');\n }\n return Buffer.from(content, 'utf8');\n }\n if (Buffer.isBuffer(content)) {\n return content;\n }\n if (content instanceof Uint8Array) {\n return Buffer.from(content);\n }\n return readStream(content);\n}\n\nfunction bytesToStream(bytes: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream<Uint8Array>({\n start(controller): void {\n controller.enqueue(bytes);\n controller.close();\n },\n });\n}\n\nfunction normalizeWriteFileContent(content: string | Buffer | Uint8Array): {\n content: string | ReadableStream<Uint8Array>;\n options?: { encoding?: string };\n} {\n if (typeof content === 'string') {\n return { content, options: { encoding: 'utf8' } };\n }\n return { content: bytesToStream(content) };\n}\n\nfunction createStats(info: {\n size?: number;\n type?: t.CloudflareSandboxFileInfo['type'];\n}): Stats {\n const type = info.type ?? 'file';\n const now = new Date();\n return {\n size: info.size ?? 0,\n isFile: () => type === 'file',\n isDirectory: () => type === 'directory',\n isSymbolicLink: () => type === 'symlink',\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode: 0,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n blksize: 0,\n blocks: 0,\n atimeMs: now.getTime(),\n mtimeMs: now.getTime(),\n ctimeMs: now.getTime(),\n birthtimeMs: now.getTime(),\n atime: now,\n mtime: now,\n ctime: now,\n birthtime: now,\n } as Stats;\n}\n\nfunction normalizeFileList(\n result: t.CloudflareSandboxListFilesResult\n): t.CloudflareSandboxFileInfo[] {\n return Array.isArray(result) ? result : result.files;\n}\n\nfunction entryNameFor(\n info: t.CloudflareSandboxFileInfo,\n parentPath: string\n): string {\n if (info.name !== '') {\n return info.name.includes('/') ? path.basename(info.name) : info.name;\n }\n if (info.absolutePath != null && info.absolutePath !== '') {\n return path.basename(info.absolutePath);\n }\n if (info.relativePath != null && info.relativePath !== '') {\n return path.basename(info.relativePath);\n }\n return path.basename(parentPath);\n}\n\nfunction entryAbsolutePath(\n info: t.CloudflareSandboxFileInfo,\n parentPath: string\n): string {\n if (info.absolutePath != null && info.absolutePath !== '') {\n return path.normalize(info.absolutePath);\n }\n if (info.relativePath != null && info.relativePath !== '') {\n return path.resolve(parentPath, info.relativePath);\n }\n return path.resolve(parentPath, info.name);\n}\n\nfunction createDirent(info: t.CloudflareSandboxFileInfo): ReaddirEntry {\n return {\n name: entryNameFor(info, ''),\n isFile: () => (info.type ?? 'file') === 'file',\n isDirectory: () => info.type === 'directory',\n isSymbolicLink: () => info.type === 'symlink',\n };\n}\n\nasync function findChildInfo(\n sandbox: t.CloudflareSandboxRuntime,\n filePath: string\n): Promise<t.CloudflareSandboxFileInfo | undefined> {\n const parent = path.dirname(filePath);\n const basename = path.basename(filePath);\n const entries = normalizeFileList(\n await sandbox.listFiles(parent, { includeHidden: true })\n );\n return entries.find((entry) => {\n const absolute = entryAbsolutePath(entry, parent);\n return absolute === filePath || entryNameFor(entry, parent) === basename;\n });\n}\n\nexport function createCloudflareWorkspaceFS(\n config: t.CloudflareSandboxExecutionConfig\n): WorkspaceFS {\n const workspaceRoot = getCloudflareWorkspaceRoot(config);\n\n const fs: WorkspaceFS = {\n readFile: (async (filePath: string, encoding?: 'utf8') => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved, encoding ? { encoding } : undefined)\n );\n return encoding != null ? buffer.toString(encoding) : buffer;\n }) as WorkspaceFS['readFile'],\n writeFile: async (\n filePath: string,\n content: string | Buffer,\n _options?: WriteFileOptions\n ) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const normalized = normalizeWriteFileContent(content);\n await sandbox.writeFile(resolved, normalized.content, normalized.options);\n },\n stat: async (filePath: string) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n if (resolved === workspaceRoot) {\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n return createStats({ size: entries.length, type: 'directory' });\n }\n const info = await findChildInfo(sandbox, resolved);\n if (info != null) {\n return createStats({ size: info.size, type: info.type });\n }\n try {\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n return createStats({ size: entries.length, type: 'directory' });\n } catch {\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved)\n );\n return createStats({ size: buffer.length, type: 'file' });\n }\n },\n readdir: (async (filePath: string, options?: { withFileTypes: true }) => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const entries = normalizeFileList(\n await sandbox.listFiles(resolved, { includeHidden: true })\n );\n if (options?.withFileTypes === true) {\n return entries.map(createDirent);\n }\n return entries.map((entry) => entryNameFor(entry, resolved));\n }) as WorkspaceFS['readdir'],\n mkdir: async (filePath: string, options?: MakeDirectoryOptions) => {\n const sandbox = await resolveCloudflareSandbox(config);\n await sandbox.mkdir(toSandboxPath(filePath, workspaceRoot), {\n recursive: options?.recursive,\n });\n },\n realpath: async (filePath: string) =>\n toSandboxPath(filePath, workspaceRoot),\n unlink: async (filePath: string) => {\n const sandbox = await resolveCloudflareSandbox(config);\n await sandbox.deleteFile(toSandboxPath(filePath, workspaceRoot));\n },\n open: async (filePath: string, _flags: 'r') => {\n const sandbox = await resolveCloudflareSandbox(config);\n const resolved = toSandboxPath(filePath, workspaceRoot);\n const buffer = await normalizeReadFileContent(\n await sandbox.readFile(resolved)\n );\n return {\n read: async (\n target: Buffer,\n offset: number,\n length: number,\n position: number\n ) => {\n const start = Math.max(position, 0);\n const slice = buffer.subarray(start, start + length);\n slice.copy(target, offset);\n return { bytesRead: slice.length, buffer: target };\n },\n close: async () => undefined,\n } as unknown as FileHandle;\n },\n };\n\n return fs;\n}\n\nfunction createCloudflareSpawn(\n config: t.CloudflareSandboxExecutionConfig\n): t.LocalSpawn {\n return (command, args, options) => {\n const stdout = new PassThrough();\n const stderr = new PassThrough();\n const child = new EventEmitter() as ChildProcessWithoutNullStreams;\n const abortController = new AbortController();\n const state = { closed: false };\n /** Read through a function so concurrent `closeOnce` mutation (via\n * `kill()`/abort during an `await`) isn't statically narrowed away. */\n const isClosed = (): boolean => state.closed;\n const closeOnce = (\n exitCode: number | null,\n signal: NodeJS.Signals | null\n ): void => {\n if (state.closed) {\n return;\n }\n state.closed = true;\n stdout.end();\n stderr.end();\n Object.assign(child, {\n exitCode,\n signalCode: signal,\n });\n child.emit('close', exitCode, signal);\n };\n Object.assign(child, {\n stdout,\n stderr,\n stdin: new PassThrough(),\n stdio: [null, stdout, stderr],\n killed: false,\n exitCode: null,\n signalCode: null,\n pid: undefined,\n kill: (signal: NodeJS.Signals = 'SIGTERM') => {\n Object.assign(child, { killed: true, signalCode: signal });\n abortController.abort();\n closeOnce(null, signal);\n return true;\n },\n });\n\n void (async (): Promise<void> => {\n const ctx = await getRuntimeContext(config);\n const rendered = [command, ...args].map(quote).join(' ');\n const spawnTimeoutMs = (\n options as {\n [LOCAL_SPAWN_TIMEOUT_MS]?: number;\n }\n )[LOCAL_SPAWN_TIMEOUT_MS];\n const timeoutMs =\n typeof spawnTimeoutMs === 'number' && Number.isFinite(spawnTimeoutMs)\n ? spawnTimeoutMs\n : ctx.timeoutMs;\n const timedCommand = withInSandboxTimeout(rendered, timeoutMs);\n const cwd =\n options.cwd == null ? ctx.workspaceRoot : options.cwd.toString();\n if (isClosed()) {\n return;\n }\n const execOptions: t.CloudflareSandboxExecOptions = {\n cwd,\n env: ctx.env,\n timeout: outerTimeoutMs(timeoutMs),\n };\n if (ctx.sandbox.supportsExecSignal === true) {\n execOptions.signal = abortController.signal;\n }\n try {\n const result = await ctx.sandbox.exec(timedCommand, execOptions);\n if (isClosed()) {\n return;\n }\n if (result.stdout) stdout.write(result.stdout);\n if (result.stderr) stderr.write(result.stderr);\n closeOnce(result.exitCode, null);\n } catch (error) {\n if (isClosed()) {\n return;\n }\n stderr.write((error as Error).message);\n closeOnce(1, null);\n }\n })();\n\n return child;\n };\n}\n\nexport function createCloudflareLocalExecutionConfig(\n config: t.CloudflareSandboxExecutionConfig\n): t.LocalExecutionConfig {\n const workspaceRoot = getCloudflareWorkspaceRoot(config);\n return {\n cwd: workspaceRoot,\n workspace: { root: workspaceRoot },\n exec: {\n spawn: createCloudflareSpawn(config),\n fs: createCloudflareWorkspaceFS(config),\n sandboxed: true,\n },\n shell: config.shell ?? 'bash',\n timeoutMs: config.timeoutMs,\n maxOutputChars: config.maxOutputChars,\n env: config.env,\n includeCodingTools: config.includeCodingTools,\n compileCheck: config.compileCheck,\n readOnly: config.readOnly,\n allowDangerousCommands: config.allowDangerousCommands,\n bashAst: config.bashAst,\n fileCheckpointing: config.fileCheckpointing,\n maxReadBytes: config.maxReadBytes,\n attachReadAttachments: config.attachReadAttachments,\n maxAttachmentBytes: config.maxAttachmentBytes,\n postEditSyntaxCheck: config.postEditSyntaxCheck,\n };\n}\n\nexport async function validateCloudflareBashCommand(\n command: string,\n args: readonly string[],\n config: t.CloudflareSandboxExecutionConfig\n): Promise<void> {\n const localConfig = createCloudflareLocalExecutionConfig(config);\n const validation = await validateBashCommand(command, localConfig);\n if (!validation.valid) {\n throw new Error(validation.errors.join('\\n'));\n }\n\n if (\n args.length > 0 &&\n config.allowDangerousCommands !== true &&\n DESTRUCTIVE_OP_IN_COMMAND_RE.test(command)\n ) {\n const offending = args.find((arg) => PROTECTED_TARGET_ARG_RE.test(arg));\n if (offending !== undefined) {\n throw new Error(\n `Command matches a destructive command pattern (protected target \"${offending}\" passed via positional arg).`\n );\n }\n }\n}\n\nexport async function executeCloudflareBash(\n command: string,\n config: t.CloudflareSandboxExecutionConfig,\n args: readonly string[] = []\n): Promise<SpawnResult> {\n await validateCloudflareBashCommand(command, args, config);\n const ctx = await getRuntimeContext(config);\n const shellCommand =\n args.length > 0\n ? `${ctx.shell} -lc ${quote(command)} -- ${args.map(quote).join(' ')}`\n : `${ctx.shell} -lc ${quote(command)}`;\n const result = await ctx.sandbox.exec(\n withInSandboxTimeout(shellCommand, ctx.timeoutMs),\n {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: outerTimeoutMs(ctx.timeoutMs),\n }\n );\n return {\n stdout: truncateOutput(result.stdout, ctx.maxOutputChars),\n stderr: truncateOutput(result.stderr, ctx.maxOutputChars),\n exitCode: result.exitCode,\n timedOut: isInSandboxTimeoutExit(result.exitCode),\n };\n}\n\nfunction runtimeForCode(\n lang: string,\n tempDir: string,\n code: string,\n args: string[] = [],\n shell = 'bash'\n): RuntimeCommand {\n const fileFor = (name: string): string => path.join(tempDir, name);\n const argText = args.map(quote).join(' ');\n switch (lang) {\n case 'py':\n case 'python':\n return {\n fileName: 'main.py',\n source: code,\n command: `python3 ${quote(fileFor('main.py'))} ${argText}`,\n };\n case 'js':\n case 'javascript':\n return {\n fileName: 'main.js',\n source: code,\n command: `node ${quote(fileFor('main.js'))} ${argText}`,\n };\n case 'ts':\n case 'typescript':\n return {\n fileName: 'main.ts',\n source: code,\n command: `npx --no-install tsx ${quote(fileFor('main.ts'))} ${argText}`,\n };\n case 'php':\n return {\n fileName: 'main.php',\n source: code,\n command: `php ${quote(fileFor('main.php'))} ${argText}`,\n };\n case 'go':\n return {\n fileName: 'main.go',\n source: code,\n command: `go run ${quote(fileFor('main.go'))} ${argText}`,\n };\n case 'rs':\n return {\n fileName: 'main.rs',\n source: code,\n command: `${shell} -lc ${quote(\n `rustc ${quote(fileFor('main.rs'))} -o ${quote(fileFor('main-rs'))} && ${quote(fileFor('main-rs'))} ${argText}`\n )}`,\n };\n case 'c':\n return {\n fileName: 'main.c',\n source: code,\n command: `${shell} -lc ${quote(\n `cc ${quote(fileFor('main.c'))} -o ${quote(fileFor('main-c'))} && ${quote(fileFor('main-c'))} ${argText}`\n )}`,\n };\n case 'cpp':\n return {\n fileName: 'main.cpp',\n source: code,\n command: `${shell} -lc ${quote(\n `c++ ${quote(fileFor('main.cpp'))} -o ${quote(fileFor('main-cpp'))} && ${quote(fileFor('main-cpp'))} ${argText}`\n )}`,\n };\n case 'java':\n return {\n fileName: 'Main.java',\n source: code,\n command: `${shell} -lc ${quote(\n `javac ${quote(fileFor('Main.java'))} && java -cp ${quote(tempDir)} Main ${argText}`\n )}`,\n };\n case 'r':\n return {\n fileName: 'main.R',\n source: code,\n command: `Rscript ${quote(fileFor('main.R'))} ${argText}`,\n };\n case 'd':\n return {\n fileName: 'main.d',\n source: code,\n command: `${shell} -lc ${quote(\n `dmd ${quote(fileFor('main.d'))} -of=${quote(fileFor('main-d'))} && ${quote(fileFor('main-d'))} ${argText}`\n )}`,\n };\n case 'f90':\n return {\n fileName: 'main.f90',\n source: code,\n command: `${shell} -lc ${quote(\n `gfortran ${quote(fileFor('main.f90'))} -o ${quote(fileFor('main-f90'))} && ${quote(fileFor('main-f90'))} ${argText}`\n )}`,\n };\n case 'bash':\n case 'sh':\n return {\n fileName: 'main.sh',\n source: code,\n command: `${shell} -lc ${quote(code)} -- ${argText}`,\n };\n default:\n throw new Error(`Unsupported Cloudflare sandbox runtime: ${lang}`);\n }\n}\n\nexport async function executeCloudflareCode(\n input: { lang: string; code: string; args?: string[] },\n config: t.CloudflareSandboxExecutionConfig\n): Promise<SpawnResult> {\n if (input.lang === 'bash' || input.lang === 'sh') {\n return executeCloudflareBash(input.code, config, input.args ?? []);\n }\n const ctx = await getRuntimeContext(config);\n const id = globalThis.crypto.randomUUID();\n const tempDir = path.join(ctx.workspaceRoot, '.lc-exec', id);\n const runtime = runtimeForCode(\n input.lang,\n tempDir,\n input.code,\n input.args,\n ctx.shell\n );\n await ctx.sandbox.mkdir(tempDir, { recursive: true });\n if (runtime.source != null) {\n await ctx.sandbox.writeFile(\n path.join(tempDir, runtime.fileName),\n runtime.source,\n {\n encoding: 'utf8',\n }\n );\n }\n try {\n const result = await ctx.sandbox.exec(\n withInSandboxTimeout(runtime.command, ctx.timeoutMs),\n {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: outerTimeoutMs(ctx.timeoutMs),\n }\n );\n return {\n stdout: truncateOutput(result.stdout, ctx.maxOutputChars),\n stderr: truncateOutput(result.stderr, ctx.maxOutputChars),\n exitCode: result.exitCode,\n timedOut: isInSandboxTimeoutExit(result.exitCode),\n };\n } finally {\n await ctx.sandbox\n .exec(`rm -rf ${quote(tempDir)}`, {\n cwd: ctx.workspaceRoot,\n env: ctx.env,\n timeout: 10000,\n })\n .catch(() => undefined);\n }\n}\n\nexport function formatCloudflareOutput(\n result: SpawnResult,\n cwd: string\n): string {\n let formatted = '';\n if (result.stdout !== '') {\n formatted += `stdout:\\n${result.stdout}\\n`;\n } else {\n formatted += 'stdout: Empty. Ensure you\\'re writing output explicitly.\\n';\n }\n if (result.stderr !== '') {\n formatted += `stderr:\\n${result.stderr}\\n`;\n }\n if (result.exitCode != null && result.exitCode !== 0) {\n formatted += `exit_code: ${result.exitCode}\\n`;\n }\n if (result.timedOut) {\n formatted += 'timed_out: true\\n';\n }\n formatted += `working_directory: ${cwd}`;\n return formatted.trim();\n}\n"],"mappings":"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"}
|
|
@@ -1,36 +1,37 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
1
|
+
import "../../common/enum.mjs";
|
|
2
|
+
import "../../common/index.mjs";
|
|
3
|
+
import { createCompileCheckTool } from "../local/CompileCheckTool.mjs";
|
|
4
|
+
import { createLocalFileCheckpointer } from "../local/FileCheckpointer.mjs";
|
|
5
|
+
import { CodeExecutionToolName, CodeExecutionToolSchema } from "../CodeExecutor.mjs";
|
|
6
|
+
import { BashExecutionToolName, BashExecutionToolSchema, BashToolOutputReferencesGuide } from "../BashExecutor.mjs";
|
|
7
|
+
import { createLocalEditFileTool, createLocalGlobSearchTool, createLocalGrepSearchTool, createLocalListDirectoryTool, createLocalReadFileTool, createLocalWriteFileTool } from "../local/LocalCodingTools.mjs";
|
|
8
|
+
import { createCloudflareLocalExecutionConfig, createCloudflareWorkspaceFS, executeCloudflareBash, executeCloudflareCode, formatCloudflareOutput, getCloudflareWorkspaceRoot } from "./CloudflareSandboxExecutionEngine.mjs";
|
|
9
|
+
import { createCloudflareBashProgrammaticToolCallingTool, createCloudflareProgrammaticToolCallingTool } from "./CloudflareProgrammaticToolCalling.mjs";
|
|
10
|
+
import { tool } from "@langchain/core/tools";
|
|
11
|
+
//#region src/tools/cloudflare/CloudflareSandboxTools.ts
|
|
11
12
|
const CLOUDFLARE_CODING_TOOL_NAMES = [
|
|
12
|
-
|
|
13
|
-
|
|
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",
|
|
22
|
+
"run_tools_with_code",
|
|
23
|
+
"run_tools_with_bash"
|
|
23
24
|
];
|
|
24
25
|
const CLOUDFLARE_BASH_CODING_TOOL_NAMES = [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
"read_file",
|
|
27
|
+
"write_file",
|
|
28
|
+
"edit_file",
|
|
29
|
+
"grep_search",
|
|
30
|
+
"glob_search",
|
|
31
|
+
"list_directory",
|
|
32
|
+
"compile_check",
|
|
33
|
+
"bash_tool",
|
|
34
|
+
"run_tools_with_bash"
|
|
34
35
|
];
|
|
35
36
|
const CloudflareCodeExecutionToolDescription = `
|
|
36
37
|
Runs code inside the configured Cloudflare Sandbox workspace. The sandbox can see files and installed runtimes available inside the Cloudflare Sandbox container.
|
|
@@ -49,107 +50,75 @@ Usage:
|
|
|
49
50
|
- Prefer project-native commands and inspect files before changing them.
|
|
50
51
|
`.trim();
|
|
51
52
|
function createCloudflareCodeExecutionTool(config) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
description: CloudflareCodeExecutionToolDescription,
|
|
66
|
-
schema: CodeExecutionToolSchema,
|
|
67
|
-
responseFormat: Constants.CONTENT_AND_ARTIFACT,
|
|
68
|
-
});
|
|
53
|
+
return tool(async (rawInput) => {
|
|
54
|
+
const input = rawInput;
|
|
55
|
+
const cwd = getCloudflareWorkspaceRoot(config);
|
|
56
|
+
return [formatCloudflareOutput(await executeCloudflareCode(input, config), cwd), {
|
|
57
|
+
session_id: "cloudflare-sandbox",
|
|
58
|
+
files: []
|
|
59
|
+
}];
|
|
60
|
+
}, {
|
|
61
|
+
name: CodeExecutionToolName,
|
|
62
|
+
description: CloudflareCodeExecutionToolDescription,
|
|
63
|
+
schema: CodeExecutionToolSchema,
|
|
64
|
+
responseFormat: "content_and_artifact"
|
|
65
|
+
});
|
|
69
66
|
}
|
|
70
67
|
function createCloudflareBashExecutionTool(options) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
description: options.enableToolOutputReferences === true
|
|
86
|
-
? `${CloudflareBashExecutionToolDescription}\n\n${BashToolOutputReferencesGuide}`
|
|
87
|
-
: CloudflareBashExecutionToolDescription,
|
|
88
|
-
schema: BashExecutionToolSchema,
|
|
89
|
-
responseFormat: Constants.CONTENT_AND_ARTIFACT,
|
|
90
|
-
});
|
|
68
|
+
const { config } = options;
|
|
69
|
+
return tool(async (rawInput) => {
|
|
70
|
+
const input = rawInput;
|
|
71
|
+
const cwd = getCloudflareWorkspaceRoot(config);
|
|
72
|
+
return [formatCloudflareOutput(await executeCloudflareBash(input.command, config, input.args ?? []), cwd), {
|
|
73
|
+
session_id: "cloudflare-sandbox",
|
|
74
|
+
files: []
|
|
75
|
+
}];
|
|
76
|
+
}, {
|
|
77
|
+
name: BashExecutionToolName,
|
|
78
|
+
description: options.enableToolOutputReferences === true ? `${CloudflareBashExecutionToolDescription}\n\n${BashToolOutputReferencesGuide}` : CloudflareBashExecutionToolDescription,
|
|
79
|
+
schema: BashExecutionToolSchema,
|
|
80
|
+
responseFormat: "content_and_artifact"
|
|
81
|
+
});
|
|
91
82
|
}
|
|
92
83
|
function getSelectedCodingToolNames(config) {
|
|
93
|
-
|
|
84
|
+
return new Set(config.codingToolNames ?? CLOUDFLARE_CODING_TOOL_NAMES);
|
|
94
85
|
}
|
|
95
86
|
function createCloudflareCodingTools(config, options = {}) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
[
|
|
114
|
-
Constants.PROGRAMMATIC_TOOL_CALLING,
|
|
115
|
-
createCloudflareProgrammaticToolCallingTool(config),
|
|
116
|
-
],
|
|
117
|
-
[
|
|
118
|
-
Constants.BASH_PROGRAMMATIC_TOOL_CALLING,
|
|
119
|
-
createCloudflareBashProgrammaticToolCallingTool(config),
|
|
120
|
-
],
|
|
121
|
-
];
|
|
122
|
-
const selectedNames = getSelectedCodingToolNames(config);
|
|
123
|
-
return tools
|
|
124
|
-
.filter(([name]) => selectedNames.has(name))
|
|
125
|
-
.map(([, selectedTool]) => selectedTool);
|
|
87
|
+
const localConfig = createCloudflareLocalExecutionConfig(config);
|
|
88
|
+
const checkpointer = options.checkpointer ?? (config.fileCheckpointing === true ? createLocalFileCheckpointer({ fs: createCloudflareWorkspaceFS(config) }) : void 0);
|
|
89
|
+
const tools = [
|
|
90
|
+
["read_file", createLocalReadFileTool(localConfig)],
|
|
91
|
+
["write_file", createLocalWriteFileTool(localConfig, checkpointer)],
|
|
92
|
+
["edit_file", createLocalEditFileTool(localConfig, checkpointer)],
|
|
93
|
+
["grep_search", createLocalGrepSearchTool(localConfig)],
|
|
94
|
+
["glob_search", createLocalGlobSearchTool(localConfig)],
|
|
95
|
+
["list_directory", createLocalListDirectoryTool(localConfig)],
|
|
96
|
+
["compile_check", createCompileCheckTool(localConfig)],
|
|
97
|
+
["bash_tool", createCloudflareBashExecutionTool({ config })],
|
|
98
|
+
["execute_code", createCloudflareCodeExecutionTool(config)],
|
|
99
|
+
["run_tools_with_code", createCloudflareProgrammaticToolCallingTool(config)],
|
|
100
|
+
["run_tools_with_bash", createCloudflareBashProgrammaticToolCallingTool(config)]
|
|
101
|
+
];
|
|
102
|
+
const selectedNames = getSelectedCodingToolNames(config);
|
|
103
|
+
return tools.filter(([name]) => selectedNames.has(name)).map(([, selectedTool]) => selectedTool);
|
|
126
104
|
}
|
|
127
105
|
function createCloudflareCodingToolBundle(config, options = {}) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
: undefined);
|
|
134
|
-
return {
|
|
135
|
-
tools: createCloudflareCodingTools(config, { checkpointer }),
|
|
136
|
-
checkpointer,
|
|
137
|
-
};
|
|
106
|
+
const checkpointer = options.checkpointer ?? (config.fileCheckpointing === true ? createLocalFileCheckpointer({ fs: createCloudflareWorkspaceFS(config) }) : void 0);
|
|
107
|
+
return {
|
|
108
|
+
tools: createCloudflareCodingTools(config, { checkpointer }),
|
|
109
|
+
checkpointer
|
|
110
|
+
};
|
|
138
111
|
}
|
|
139
112
|
function createCloudflareExecutionTool(name, config) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
case Constants.BASH_PROGRAMMATIC_TOOL_CALLING:
|
|
148
|
-
return createCloudflareBashProgrammaticToolCallingTool(config);
|
|
149
|
-
default:
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
113
|
+
switch (name) {
|
|
114
|
+
case "execute_code": return createCloudflareCodeExecutionTool(config);
|
|
115
|
+
case "bash_tool": return createCloudflareBashExecutionTool({ config });
|
|
116
|
+
case "run_tools_with_code": return createCloudflareProgrammaticToolCallingTool(config);
|
|
117
|
+
case "run_tools_with_bash": return createCloudflareBashProgrammaticToolCallingTool(config);
|
|
118
|
+
default: return;
|
|
119
|
+
}
|
|
152
120
|
}
|
|
153
|
-
|
|
121
|
+
//#endregion
|
|
154
122
|
export { CLOUDFLARE_BASH_CODING_TOOL_NAMES, CLOUDFLARE_CODING_TOOL_NAMES, CloudflareBashExecutionToolDescription, CloudflareCodeExecutionToolDescription, createCloudflareBashExecutionTool, createCloudflareCodeExecutionTool, createCloudflareCodingToolBundle, createCloudflareCodingTools, createCloudflareExecutionTool };
|
|
155
|
-
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=CloudflareSandboxTools.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudflareSandboxTools.mjs","sources":["../../../../src/tools/cloudflare/CloudflareSandboxTools.ts"],"sourcesContent":["import { tool } from '@langchain/core/tools';\nimport type { DynamicStructuredTool } from '@langchain/core/tools';\nimport type * as t from '@/types';\nimport {\n createCloudflareLocalExecutionConfig,\n createCloudflareWorkspaceFS,\n executeCloudflareBash,\n executeCloudflareCode,\n formatCloudflareOutput,\n getCloudflareWorkspaceRoot,\n} from './CloudflareSandboxExecutionEngine';\nimport {\n createLocalReadFileTool,\n createLocalWriteFileTool,\n createLocalEditFileTool,\n createLocalGrepSearchTool,\n createLocalGlobSearchTool,\n createLocalListDirectoryTool,\n} from '@/tools/local/LocalCodingTools';\nimport {\n createCloudflareBashProgrammaticToolCallingTool,\n createCloudflareProgrammaticToolCallingTool,\n} from './CloudflareProgrammaticToolCalling';\nimport {\n BashExecutionToolName,\n BashExecutionToolSchema,\n BashToolOutputReferencesGuide,\n} from '@/tools/BashExecutor';\nimport {\n CodeExecutionToolName,\n CodeExecutionToolSchema,\n} from '@/tools/CodeExecutor';\nimport { createLocalFileCheckpointer } from '@/tools/local/FileCheckpointer';\nimport { createCompileCheckTool } from '@/tools/local/CompileCheckTool';\nimport { Constants } from '@/common';\n\nexport const CLOUDFLARE_CODING_TOOL_NAMES: readonly string[] = [\n Constants.READ_FILE,\n Constants.WRITE_FILE,\n Constants.EDIT_FILE,\n Constants.GREP_SEARCH,\n Constants.GLOB_SEARCH,\n Constants.LIST_DIRECTORY,\n Constants.COMPILE_CHECK,\n Constants.BASH_TOOL,\n Constants.EXECUTE_CODE,\n Constants.PROGRAMMATIC_TOOL_CALLING,\n Constants.BASH_PROGRAMMATIC_TOOL_CALLING,\n];\n\nexport const CLOUDFLARE_BASH_CODING_TOOL_NAMES: readonly string[] = [\n Constants.READ_FILE,\n Constants.WRITE_FILE,\n Constants.EDIT_FILE,\n Constants.GREP_SEARCH,\n Constants.GLOB_SEARCH,\n Constants.LIST_DIRECTORY,\n Constants.COMPILE_CHECK,\n Constants.BASH_TOOL,\n Constants.BASH_PROGRAMMATIC_TOOL_CALLING,\n];\n\nexport const CloudflareCodeExecutionToolDescription = `\nRuns code inside the configured Cloudflare Sandbox workspace. The sandbox can see files and installed runtimes available inside the Cloudflare Sandbox container.\n\nUsage:\n- Commands execute in the Cloudflare Sandbox workspace and may modify sandbox files.\n- Input code is already displayed to the user, so do not repeat it unless asked.\n- Output is not displayed unless you print it explicitly.\n`.trim();\n\nexport const CloudflareBashExecutionToolDescription = `\nRuns bash commands inside the configured Cloudflare Sandbox workspace.\n\nUsage:\n- Commands execute in the Cloudflare Sandbox workspace and may modify sandbox files.\n- Output is not displayed unless you print it explicitly.\n- Prefer project-native commands and inspect files before changing them.\n`.trim();\n\nexport function createCloudflareCodeExecutionTool(\n config: t.CloudflareSandboxExecutionConfig\n): DynamicStructuredTool {\n return tool(\n async (rawInput) => {\n const input = rawInput as {\n lang: string;\n code: string;\n args?: string[];\n };\n const cwd = getCloudflareWorkspaceRoot(config);\n const result = await executeCloudflareCode(input, config);\n return [\n formatCloudflareOutput(result, cwd),\n {\n session_id: 'cloudflare-sandbox',\n files: [],\n } satisfies t.CodeExecutionArtifact,\n ];\n },\n {\n name: CodeExecutionToolName,\n description: CloudflareCodeExecutionToolDescription,\n schema: CodeExecutionToolSchema,\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\nexport function createCloudflareBashExecutionTool(options: {\n config: t.CloudflareSandboxExecutionConfig;\n enableToolOutputReferences?: boolean;\n}): DynamicStructuredTool {\n const { config } = options;\n return tool(\n async (rawInput) => {\n const input = rawInput as { command: string; args?: string[] };\n const cwd = getCloudflareWorkspaceRoot(config);\n const result = await executeCloudflareBash(\n input.command,\n config,\n input.args ?? []\n );\n return [\n formatCloudflareOutput(result, cwd),\n {\n session_id: 'cloudflare-sandbox',\n files: [],\n } satisfies t.CodeExecutionArtifact,\n ];\n },\n {\n name: BashExecutionToolName,\n description:\n options.enableToolOutputReferences === true\n ? `${CloudflareBashExecutionToolDescription}\\n\\n${BashToolOutputReferencesGuide}`\n : CloudflareBashExecutionToolDescription,\n schema: BashExecutionToolSchema,\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\nexport type CloudflareCodingToolBundle = {\n tools: DynamicStructuredTool[];\n checkpointer?: t.LocalFileCheckpointer;\n};\n\nfunction getSelectedCodingToolNames(\n config: t.CloudflareSandboxExecutionConfig\n): Set<string> {\n return new Set(config.codingToolNames ?? CLOUDFLARE_CODING_TOOL_NAMES);\n}\n\nexport function createCloudflareCodingTools(\n config: t.CloudflareSandboxExecutionConfig,\n options: { checkpointer?: t.LocalFileCheckpointer } = {}\n): DynamicStructuredTool[] {\n const localConfig = createCloudflareLocalExecutionConfig(config);\n const checkpointer =\n options.checkpointer ??\n (config.fileCheckpointing === true\n ? createLocalFileCheckpointer({\n fs: createCloudflareWorkspaceFS(config),\n })\n : undefined);\n const tools = [\n [Constants.READ_FILE, createLocalReadFileTool(localConfig)],\n [Constants.WRITE_FILE, createLocalWriteFileTool(localConfig, checkpointer)],\n [Constants.EDIT_FILE, createLocalEditFileTool(localConfig, checkpointer)],\n [Constants.GREP_SEARCH, createLocalGrepSearchTool(localConfig)],\n [Constants.GLOB_SEARCH, createLocalGlobSearchTool(localConfig)],\n [Constants.LIST_DIRECTORY, createLocalListDirectoryTool(localConfig)],\n [Constants.COMPILE_CHECK, createCompileCheckTool(localConfig)],\n [Constants.BASH_TOOL, createCloudflareBashExecutionTool({ config })],\n [Constants.EXECUTE_CODE, createCloudflareCodeExecutionTool(config)],\n [\n Constants.PROGRAMMATIC_TOOL_CALLING,\n createCloudflareProgrammaticToolCallingTool(config),\n ],\n [\n Constants.BASH_PROGRAMMATIC_TOOL_CALLING,\n createCloudflareBashProgrammaticToolCallingTool(config),\n ],\n ] satisfies Array<[string, DynamicStructuredTool]>;\n const selectedNames = getSelectedCodingToolNames(config);\n return tools\n .filter(([name]) => selectedNames.has(name))\n .map(([, selectedTool]) => selectedTool);\n}\n\nexport function createCloudflareCodingToolBundle(\n config: t.CloudflareSandboxExecutionConfig,\n options: { checkpointer?: t.LocalFileCheckpointer } = {}\n): CloudflareCodingToolBundle {\n const checkpointer =\n options.checkpointer ??\n (config.fileCheckpointing === true\n ? createLocalFileCheckpointer({\n fs: createCloudflareWorkspaceFS(config),\n })\n : undefined);\n return {\n tools: createCloudflareCodingTools(config, { checkpointer }),\n checkpointer,\n };\n}\n\nexport function createCloudflareExecutionTool(\n name: string,\n config: t.CloudflareSandboxExecutionConfig\n): t.GenericTool | undefined {\n switch (name) {\n case Constants.EXECUTE_CODE:\n return createCloudflareCodeExecutionTool(config);\n case Constants.BASH_TOOL:\n return createCloudflareBashExecutionTool({ config });\n case Constants.PROGRAMMATIC_TOOL_CALLING:\n return createCloudflareProgrammaticToolCallingTool(config);\n case Constants.BASH_PROGRAMMATIC_TOOL_CALLING:\n return createCloudflareBashProgrammaticToolCallingTool(config);\n default:\n return undefined;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CloudflareSandboxTools.mjs","names":[],"sources":["../../../../src/tools/cloudflare/CloudflareSandboxTools.ts"],"sourcesContent":["import { tool } from '@langchain/core/tools';\nimport type { DynamicStructuredTool } from '@langchain/core/tools';\nimport type * as t from '@/types';\nimport {\n createCloudflareLocalExecutionConfig,\n createCloudflareWorkspaceFS,\n executeCloudflareBash,\n executeCloudflareCode,\n formatCloudflareOutput,\n getCloudflareWorkspaceRoot,\n} from './CloudflareSandboxExecutionEngine';\nimport {\n createLocalReadFileTool,\n createLocalWriteFileTool,\n createLocalEditFileTool,\n createLocalGrepSearchTool,\n createLocalGlobSearchTool,\n createLocalListDirectoryTool,\n} from '@/tools/local/LocalCodingTools';\nimport {\n createCloudflareBashProgrammaticToolCallingTool,\n createCloudflareProgrammaticToolCallingTool,\n} from './CloudflareProgrammaticToolCalling';\nimport {\n BashExecutionToolName,\n BashExecutionToolSchema,\n BashToolOutputReferencesGuide,\n} from '@/tools/BashExecutor';\nimport {\n CodeExecutionToolName,\n CodeExecutionToolSchema,\n} from '@/tools/CodeExecutor';\nimport { createLocalFileCheckpointer } from '@/tools/local/FileCheckpointer';\nimport { createCompileCheckTool } from '@/tools/local/CompileCheckTool';\nimport { Constants } from '@/common';\n\nexport const CLOUDFLARE_CODING_TOOL_NAMES: readonly string[] = [\n Constants.READ_FILE,\n Constants.WRITE_FILE,\n Constants.EDIT_FILE,\n Constants.GREP_SEARCH,\n Constants.GLOB_SEARCH,\n Constants.LIST_DIRECTORY,\n Constants.COMPILE_CHECK,\n Constants.BASH_TOOL,\n Constants.EXECUTE_CODE,\n Constants.PROGRAMMATIC_TOOL_CALLING,\n Constants.BASH_PROGRAMMATIC_TOOL_CALLING,\n];\n\nexport const CLOUDFLARE_BASH_CODING_TOOL_NAMES: readonly string[] = [\n Constants.READ_FILE,\n Constants.WRITE_FILE,\n Constants.EDIT_FILE,\n Constants.GREP_SEARCH,\n Constants.GLOB_SEARCH,\n Constants.LIST_DIRECTORY,\n Constants.COMPILE_CHECK,\n Constants.BASH_TOOL,\n Constants.BASH_PROGRAMMATIC_TOOL_CALLING,\n];\n\nexport const CloudflareCodeExecutionToolDescription = `\nRuns code inside the configured Cloudflare Sandbox workspace. The sandbox can see files and installed runtimes available inside the Cloudflare Sandbox container.\n\nUsage:\n- Commands execute in the Cloudflare Sandbox workspace and may modify sandbox files.\n- Input code is already displayed to the user, so do not repeat it unless asked.\n- Output is not displayed unless you print it explicitly.\n`.trim();\n\nexport const CloudflareBashExecutionToolDescription = `\nRuns bash commands inside the configured Cloudflare Sandbox workspace.\n\nUsage:\n- Commands execute in the Cloudflare Sandbox workspace and may modify sandbox files.\n- Output is not displayed unless you print it explicitly.\n- Prefer project-native commands and inspect files before changing them.\n`.trim();\n\nexport function createCloudflareCodeExecutionTool(\n config: t.CloudflareSandboxExecutionConfig\n): DynamicStructuredTool {\n return tool(\n async (rawInput) => {\n const input = rawInput as {\n lang: string;\n code: string;\n args?: string[];\n };\n const cwd = getCloudflareWorkspaceRoot(config);\n const result = await executeCloudflareCode(input, config);\n return [\n formatCloudflareOutput(result, cwd),\n {\n session_id: 'cloudflare-sandbox',\n files: [],\n } satisfies t.CodeExecutionArtifact,\n ];\n },\n {\n name: CodeExecutionToolName,\n description: CloudflareCodeExecutionToolDescription,\n schema: CodeExecutionToolSchema,\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\nexport function createCloudflareBashExecutionTool(options: {\n config: t.CloudflareSandboxExecutionConfig;\n enableToolOutputReferences?: boolean;\n}): DynamicStructuredTool {\n const { config } = options;\n return tool(\n async (rawInput) => {\n const input = rawInput as { command: string; args?: string[] };\n const cwd = getCloudflareWorkspaceRoot(config);\n const result = await executeCloudflareBash(\n input.command,\n config,\n input.args ?? []\n );\n return [\n formatCloudflareOutput(result, cwd),\n {\n session_id: 'cloudflare-sandbox',\n files: [],\n } satisfies t.CodeExecutionArtifact,\n ];\n },\n {\n name: BashExecutionToolName,\n description:\n options.enableToolOutputReferences === true\n ? `${CloudflareBashExecutionToolDescription}\\n\\n${BashToolOutputReferencesGuide}`\n : CloudflareBashExecutionToolDescription,\n schema: BashExecutionToolSchema,\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\nexport type CloudflareCodingToolBundle = {\n tools: DynamicStructuredTool[];\n checkpointer?: t.LocalFileCheckpointer;\n};\n\nfunction getSelectedCodingToolNames(\n config: t.CloudflareSandboxExecutionConfig\n): Set<string> {\n return new Set(config.codingToolNames ?? CLOUDFLARE_CODING_TOOL_NAMES);\n}\n\nexport function createCloudflareCodingTools(\n config: t.CloudflareSandboxExecutionConfig,\n options: { checkpointer?: t.LocalFileCheckpointer } = {}\n): DynamicStructuredTool[] {\n const localConfig = createCloudflareLocalExecutionConfig(config);\n const checkpointer =\n options.checkpointer ??\n (config.fileCheckpointing === true\n ? createLocalFileCheckpointer({\n fs: createCloudflareWorkspaceFS(config),\n })\n : undefined);\n const tools = [\n [Constants.READ_FILE, createLocalReadFileTool(localConfig)],\n [Constants.WRITE_FILE, createLocalWriteFileTool(localConfig, checkpointer)],\n [Constants.EDIT_FILE, createLocalEditFileTool(localConfig, checkpointer)],\n [Constants.GREP_SEARCH, createLocalGrepSearchTool(localConfig)],\n [Constants.GLOB_SEARCH, createLocalGlobSearchTool(localConfig)],\n [Constants.LIST_DIRECTORY, createLocalListDirectoryTool(localConfig)],\n [Constants.COMPILE_CHECK, createCompileCheckTool(localConfig)],\n [Constants.BASH_TOOL, createCloudflareBashExecutionTool({ config })],\n [Constants.EXECUTE_CODE, createCloudflareCodeExecutionTool(config)],\n [\n Constants.PROGRAMMATIC_TOOL_CALLING,\n createCloudflareProgrammaticToolCallingTool(config),\n ],\n [\n Constants.BASH_PROGRAMMATIC_TOOL_CALLING,\n createCloudflareBashProgrammaticToolCallingTool(config),\n ],\n ] satisfies Array<[string, DynamicStructuredTool]>;\n const selectedNames = getSelectedCodingToolNames(config);\n return tools\n .filter(([name]) => selectedNames.has(name))\n .map(([, selectedTool]) => selectedTool);\n}\n\nexport function createCloudflareCodingToolBundle(\n config: t.CloudflareSandboxExecutionConfig,\n options: { checkpointer?: t.LocalFileCheckpointer } = {}\n): CloudflareCodingToolBundle {\n const checkpointer =\n options.checkpointer ??\n (config.fileCheckpointing === true\n ? createLocalFileCheckpointer({\n fs: createCloudflareWorkspaceFS(config),\n })\n : undefined);\n return {\n tools: createCloudflareCodingTools(config, { checkpointer }),\n checkpointer,\n };\n}\n\nexport function createCloudflareExecutionTool(\n name: string,\n config: t.CloudflareSandboxExecutionConfig\n): t.GenericTool | undefined {\n switch (name) {\n case Constants.EXECUTE_CODE:\n return createCloudflareCodeExecutionTool(config);\n case Constants.BASH_TOOL:\n return createCloudflareBashExecutionTool({ config });\n case Constants.PROGRAMMATIC_TOOL_CALLING:\n return createCloudflareProgrammaticToolCallingTool(config);\n case Constants.BASH_PROGRAMMATIC_TOOL_CALLING:\n return createCloudflareBashProgrammaticToolCallingTool(config);\n default:\n return undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;AAoCA,MAAa,+BAAkD;;;;;;;;;;;;AAY/D;AAEA,MAAa,oCAAuD;;;;;;;;;;AAUpE;AAEA,MAAa,yCAAyC;;;;;;;EAOpD,KAAK;AAEP,MAAa,yCAAyC;;;;;;;EAOpD,KAAK;AAEP,SAAgB,kCACd,QACuB;CACvB,OAAO,KACL,OAAO,aAAa;EAClB,MAAM,QAAQ;EAKd,MAAM,MAAM,2BAA2B,MAAM;EAE7C,OAAO,CACL,uBAAuB,MAFJ,sBAAsB,OAAO,MAAM,GAEvB,GAAG,GAClC;GACE,YAAY;GACZ,OAAO,CAAC;EACV,CACF;CACF,GACA;EACE,MAAM;EACN,aAAa;EACb,QAAQ;EACR,gBAAA;CACF,CACF;AACF;AAEA,SAAgB,kCAAkC,SAGxB;CACxB,MAAM,EAAE,WAAW;CACnB,OAAO,KACL,OAAO,aAAa;EAClB,MAAM,QAAQ;EACd,MAAM,MAAM,2BAA2B,MAAM;EAM7C,OAAO,CACL,uBAAuB,MANJ,sBACnB,MAAM,SACN,QACA,MAAM,QAAQ,CAAC,CACjB,GAEiC,GAAG,GAClC;GACE,YAAY;GACZ,OAAO,CAAC;EACV,CACF;CACF,GACA;EACE,MAAM;EACN,aACE,QAAQ,+BAA+B,OACnC,GAAG,uCAAuC,MAAM,kCAChD;EACN,QAAQ;EACR,gBAAA;CACF,CACF;AACF;AAOA,SAAS,2BACP,QACa;CACb,OAAO,IAAI,IAAI,OAAO,mBAAmB,4BAA4B;AACvE;AAEA,SAAgB,4BACd,QACA,UAAsD,CAAC,GAC9B;CACzB,MAAM,cAAc,qCAAqC,MAAM;CAC/D,MAAM,eACJ,QAAQ,iBACP,OAAO,sBAAsB,OAC1B,4BAA4B,EAC5B,IAAI,4BAA4B,MAAM,EACxC,CAAC,IACC,KAAA;CACN,MAAM,QAAQ;EACZ,CAAA,aAAsB,wBAAwB,WAAW,CAAC;EAC1D,CAAA,cAAuB,yBAAyB,aAAa,YAAY,CAAC;EAC1E,CAAA,aAAsB,wBAAwB,aAAa,YAAY,CAAC;EACxE,CAAA,eAAwB,0BAA0B,WAAW,CAAC;EAC9D,CAAA,eAAwB,0BAA0B,WAAW,CAAC;EAC9D,CAAA,kBAA2B,6BAA6B,WAAW,CAAC;EACpE,CAAA,iBAA0B,uBAAuB,WAAW,CAAC;EAC7D,CAAA,aAAsB,kCAAkC,EAAE,OAAO,CAAC,CAAC;EACnE,CAAA,gBAAyB,kCAAkC,MAAM,CAAC;EAClE,CAAA,uBAEE,4CAA4C,MAAM,CACpD;EACA,CAAA,uBAEE,gDAAgD,MAAM,CACxD;CACF;CACA,MAAM,gBAAgB,2BAA2B,MAAM;CACvD,OAAO,MACJ,QAAQ,CAAC,UAAU,cAAc,IAAI,IAAI,CAAC,CAAC,CAC3C,KAAK,GAAG,kBAAkB,YAAY;AAC3C;AAEA,SAAgB,iCACd,QACA,UAAsD,CAAC,GAC3B;CAC5B,MAAM,eACJ,QAAQ,iBACP,OAAO,sBAAsB,OAC1B,4BAA4B,EAC5B,IAAI,4BAA4B,MAAM,EACxC,CAAC,IACC,KAAA;CACN,OAAO;EACL,OAAO,4BAA4B,QAAQ,EAAE,aAAa,CAAC;EAC3D;CACF;AACF;AAEA,SAAgB,8BACd,MACA,QAC2B;CAC3B,QAAQ,MAAR;EACA,KAAA,gBACE,OAAO,kCAAkC,MAAM;EACjD,KAAA,aACE,OAAO,kCAAkC,EAAE,OAAO,CAAC;EACrD,KAAA,uBACE,OAAO,4CAA4C,MAAM;EAC3D,KAAA,uBACE,OAAO,gDAAgD,MAAM;EAC/D,SACE;CACF;AACF"}
|