From 699650565ed275f6b96bedb7d995b90aa71365c3 Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Wed, 21 Jan 2026 16:07:12 +0800 Subject: [PATCH] fix: reduce e2b uname calls --- .../providers/e2b_sandbox.py.md | 16 ++++++++++++++++ .../virtual_environment/providers/e2b_sandbox.py | 7 +++---- 2 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 api/agent-notes/core/virtual_environment/providers/e2b_sandbox.py.md diff --git a/api/agent-notes/core/virtual_environment/providers/e2b_sandbox.py.md b/api/agent-notes/core/virtual_environment/providers/e2b_sandbox.py.md new file mode 100644 index 0000000000..763334a89e --- /dev/null +++ b/api/agent-notes/core/virtual_environment/providers/e2b_sandbox.py.md @@ -0,0 +1,16 @@ +# E2B Sandbox Provider Notes + +## Purpose +- Implements the E2B-backed `VirtualEnvironment` provider and bootstraps sandbox metadata, file I/O, and command execution. + +## Key Decisions +- Sandbox metadata is gathered during `_construct_environment` using the E2B SDK before returning `Metadata`. +- Architecture/OS detection uses a single `uname -m -s` call split into two lines to reduce round-trips. +- Command execution streams stdout/stderr through `QueueTransportReadCloser`; stdin is unsupported. + +## Edge Cases +- `release_environment` raises when sandbox termination fails. +- `execute_command` runs in a background thread; consumers must read stdout/stderr until EOF. + +## Tests/Verification +- None yet. Add targeted service tests when behavior changes. diff --git a/api/core/virtual_environment/providers/e2b_sandbox.py b/api/core/virtual_environment/providers/e2b_sandbox.py index 2f63f9b92d..b5f1bb46a5 100644 --- a/api/core/virtual_environment/providers/e2b_sandbox.py +++ b/api/core/virtual_environment/providers/e2b_sandbox.py @@ -132,13 +132,12 @@ class E2BEnvironment(VirtualEnvironment): envs=dict(environments), ) info = sandbox.get_info(api_key=options.get(self.OptionsKey.API_KEY, "")) - arch_output = sandbox.commands.run("uname -m").stdout.strip() - os_output = sandbox.commands.run("uname -s").stdout.strip() + system_info = sandbox.commands.run("uname -m -s").stdout.splitlines() return Metadata( id=info.sandbox_id, - arch=self._convert_architecture(arch_output), - os=self._convert_operating_system(os_output), + arch=self._convert_architecture(system_info[0].strip()), + os=self._convert_operating_system(system_info[1].strip()), store={ self.StoreKey.SANDBOX: sandbox, },