Commit Graph

548 Commits

Author SHA1 Message Date
Jakub Dobry 631522d74a feat: use v2 template update endpoint with namespaced templates (#1105) 2026-01-29 07:01:41 -08:00
Mish Ushakov 4af9b4c3fc Avoid reading files on upload (#1098)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Optimizes file uploads in both JS and Python SDKs to avoid unnecessary
reads and add broader input support.
> 
> - JS SDK: `Filesystem.write`/`writeFiles` now build a single
`FormData` using `toBlob` (new util) to pass
`string`/`ArrayBuffer`/`Blob`/`ReadableStream` without pre-reading;
updated tests add `ReadableStream` coverage
> - Python SDK (sync/async): `write_files` accepts `str`/`bytes`
directly, reads `TextIOBase`, and passes `IOBase` (binary) streams
through without reading; new tests cover `BytesIO` and `StringIO`
> - Changeset: patch bumps for `@e2b/python-sdk` and `e2b`
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
45516e31fa8ba8b678824a6c1adc217287a8effe. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-01-27 15:30:38 -08:00
github-actions[bot] 168d9edbab [skip ci] Release new versions 2026-01-27 22:38:55 +00:00
Mish Ushakov 07ef17f1b0 Rename alias exists > name exists (#1100) 2026-01-27 21:53:37 +01:00
github-actions[bot] 3993a17189 [skip ci] Release new versions 2026-01-27 14:06:56 +00:00
Jakub Dobry 10abab8e96 feat: add template versioning with tags support for JS and Python SDKs (#1080) 2026-01-27 13:41:24 +00:00
github-actions[bot] be538de3e8 [skip ci] Release new versions 2026-01-26 18:09:49 +00:00
Mish Ushakov 1c5cf950b6 Fix tar upload content-length mismatch (#1089) (#1095)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Ensures deterministic tar.gz archives during upload to prevent
content-length mismatches.
> 
> - In `tarFileStream`, switch gzip option from `true` to `gzip: {
portable: true }` to produce stable gzip headers without altering file
modes
> - Adds a changeset noting a patch release for this behavior change
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ec90756b4c5bbf9bb3a6a14ea549f1866da0134f. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: noamzbr <noamzbr@users.noreply.github.com>
2026-01-26 06:17:33 -08:00
Jakub Novák ae48a0adeb Drop support for python 3.9 (#1092)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> **Python version floor raised**
> 
> - Require `python ^3.10` in `pyproject.toml` and `.tool-versions`;
update `poetry.lock` metadata and deps to remove 3.9-only
packages/markers
> - Update `Makefile` `datamodel-codegen` to `--target-python-version
3.10`
> - Add changeset entry documenting the drop of Python 3.9 support
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a75633f2d28fe24e9f33d0605c1059aeea219820. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-01-26 12:40:19 +01:00
github-actions[bot] 86cc7edb69 [skip ci] Release new versions 2026-01-23 15:53:25 +00:00
Berry c1ee183769 Add writeFiles function to js sdk (#1084)
To fix the inconsistency between the Python SDK and the JS SDK, add
writeFiles to the JS SDK. (no changes made to write function)

---------

Co-authored-by: Mish Ushakov <10400064+mishushakov@users.noreply.github.com>
2026-01-23 15:28:37 +00:00
github-actions[bot] 6ae267b75b [skip ci] Release new versions 2026-01-22 21:50:54 +00:00
Tomas Valenta 4ebabfeaa1 Add exec command to CLI (#1090)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds the ability to execute commands inside a running sandbox from the
CLI.
> 
> - New `sandbox exec` command (`exec.ts`): runs a command in a
specified sandbox, supports `--background`, `--cwd`, `--user`, and
repeatable `--env` options; streams stdout/stderr; returns remote exit
code; explicitly disallows stdin piping due to protocol limitations
> - Signal handling utility (`utils/signal.ts`): installs/removes
handlers to kill the remote process on termination signals
> - Registers `exec` in `sandbox/index.ts`
> - Updates `configOption` help in `options.ts` to recommend the new
build system
> - Adds changeset for `@e2b/cli` minor release
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
dcbc64211934c1f92ff033ff77ff6ad50497e8a7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-01-22 22:22:14 +01:00
github-actions[bot] 72f85a21f5 [skip ci] Release new versions 2026-01-20 21:11:50 +00:00
Berry 5fd71a2706 Add headers to EnvdApiClient (#1087)
Adding proper headers for EnvdApiClient.
2026-01-20 21:59:22 +01:00
github-actions[bot] 2081fb9ee9 [skip ci] Release new versions 2026-01-15 16:45:17 +00:00
Jakub Novák ab906adcd3 Fix metrics timestamps (#1083)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Aligns metrics APIs to use Unix seconds (no milliseconds) for
`start`/`end` across SDKs.
> 
> - **JS SDK**: `SandboxMetricsOpts` `start`/`end` now `Date` only;
convert to seconds before calling `GET /sandboxes/{sandboxID}/metrics`.
> - **Python SDK (async/sync)**: send `int(timestamp())` for
`start`/`end` instead of milliseconds.
> - **Tests**: JS and Python tests now pass `start`/`end` and validate
non-empty results.
> - **Changesets**: patch notes for `e2b` and `@e2b/python-sdk`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7c59f8023fc0de9a5eda7ffd4c588057c7465f3e. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-01-15 08:32:27 -08:00
Rayan Pal a8e5201c17 fix: convert float timeout to int before string conversion (#1076)
## Summary

The public API accepts `Optional[float]` for timeout parameters (e.g.,
`60.0`), but `_create_stream_timeout` was typed as `Optional[int]` and
passed the value directly to `str()`, producing `'60000.0'` instead of
`'60000'`.

The Go backend's `strconv.ParseInt` fails on float strings, causing
'invalid syntax' errors for valid timeout values.

## Changes

- Updates type hint to `Optional[float]` for consistency with public API
- Wraps `timeout * 1000` in `int()` before `str()` conversion

## Test

```python
# Before: str(60.0 * 1000) -> '60000.0' (fails ParseInt)
# After:  str(int(60.0 * 1000)) -> '60000' (works)
```

Fixes #1063
2026-01-13 01:01:27 -08:00
github-actions[bot] e77bda6a5a [skip ci] Release new versions 2026-01-12 13:23:45 +00:00
Mish Ushakov 31670f4068 Updated Template.aliasExists error type (#1079)
small follow-up to #1068

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Aligns alias existence error handling across SDKs to use
template-specific errors.
> 
> - JS: `checkAliasExists` now passes `TemplateError` to
`handleApiError` and imports `TemplateError` in `buildApi.ts`
> - Python: `check_alias_exists` uses `TemplateException` in both async
and sync `build_api.py`
> - Adds changeset for patch releases of `@e2b/python-sdk` and `e2b`
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0624c03207d0ee09b2fc838e204f6232cba5c748. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-01-12 14:00:01 +01:00
github-actions[bot] a7a7b6da01 [skip ci] Release new versions 2026-01-12 10:42:51 +00:00
Jiri Sveceny d8ef36d84f Support Template.aliasExists for JavaScript and Python SDKs (#1068)
Integration tests will fail until the feature is deployed in E2B Cloud
production.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Enables checking template alias availability from both SDKs.
> 
> - JS: Implements `checkAliasExists` in `template/buildApi.ts`, exposes
`Template.aliasExists` in `template/index.ts`, adds `AliasExistsOptions`
type and tests
> - Python: Adds `Template.alias_exists` and
`AsyncTemplate.alias_exists` wired to generated
`get_templates_aliases_{alias}` client; includes sync/async tests
> - API: Regenerates schemas/clients to include `GET
/templates/aliases/{alias}`, template build logs endpoint and
parameters, and supporting models (e.g., `TemplateAliasResponse`)
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
4e577fd77888478ac83b66db7537cd2355ea050b. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-12 10:05:48 +00:00
github-actions[bot] 6d0bbd4c27 [skip ci] Release new versions 2026-01-09 23:24:30 +00:00
Mish Ushakov 583c051b89 Added changeset for #1072 (#1073)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) is
generating a summary for commit
861072bafcd6563e73d9e278f59dde495326c97a. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-01-09 22:46:24 +00:00
github-actions[bot] 4f8b13b9d1 [skip ci] Release new versions 2026-01-09 22:42:20 +00:00
Mish Ushakov dc54fe0200 Parse chown on Docker COPY (#1071)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds support for parsing ownership on file copy operations in
Dockerfile-based templates.
> 
> - JS: Update `dockerfileParser.ts` to treat `COPY/ADD` as
`ModifiableInstruction`, parse `--chown` via `instruction.getFlags()`,
and pass `user` to `templateBuilder.copy(src, dest, { user })`
> - Python: Update `_handle_copy_instruction` in `dockerfile_parser.py`
to extract `--chown=<user[:group]>` and pass `user` to
`template_builder.copy(src, dest, user=user)`
> - Tests: Add JS and Python (sync/async) tests verifying `COPY --chown`
parsing and argument propagation
> - Changeset: Patch releases for `@e2b/python-sdk` and `e2b`
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9f3b151be18288bdcc41eaf37157b5d4572f0abf. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-01-09 23:29:40 +01:00
Vasek Mlejnsky 5aa1d245aa Fix tmux rendering issues by adding UTF-8 locale env vars to PTY (#1072)
## Summary

- Fixes garbled Unicode and box-drawing character rendering when running
tmux inside E2B sandboxes
- Adds `LANG=C.UTF-8` and `LC_ALL=C.UTF-8` environment variable defaults
to PTY creation in both JS/TS and Python SDKs

## Problem

When running applications like Claude Code inside tmux in an E2B
sandbox, Unicode characters and box-drawing glyphs render incorrectly:

**Before (broken):**
- Box-drawing characters appear as broken dashes
- Text alignment is garbled
- The Claude mascot renders as `------` instead of proper pixel art

**After (fixed):**
- Proper Unicode rendering
- Correct box-drawing characters
- Properly aligned text

## Root Cause

The PTY session was created with `TERM=xterm-256color` but without UTF-8
locale settings. Running `locale` in the sandbox showed:

```
LANG=
LC_CTYPE="POSIX"
LC_ALL=
```

tmux requires UTF-8 locale settings to properly render Unicode
characters. Without them, it falls back to ASCII-only rendering.

## Solution

Set `LANG` and `LC_ALL` to `C.UTF-8` by default when creating PTY
sessions. This locale is:
- Available on most modern Linux distributions
- Provides UTF-8 character encoding
- Portable and doesn't require specific locale packages

The fix uses `setdefault` (Python) / nullish coalescing (JS) to allow
users to override these values if needed.

## Files Changed

| File | Change |
|------|--------|
| `packages/js-sdk/src/sandbox/commands/pty.ts` | Add LANG and LC_ALL
defaults |
| `packages/python-sdk/e2b/sandbox_async/commands/pty.py` | Add LANG and
LC_ALL defaults |
| `packages/python-sdk/e2b/sandbox_sync/commands/pty.py` | Add LANG and
LC_ALL defaults |

🤖 Generated with [Claude Code](https://claude.com/claude-code)


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Fix tmux Unicode rendering by enforcing UTF-8 locale in PTYs**
> 
> - In PTY creation (JS `pty.ts`, Python async/sync `pty.py`), default
`LANG` and `LC_ALL` to `C.UTF-8`; set `TERM` only if not already
provided
> - Adds changeset entry documenting the patch
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a914027d39568da2c9b022cb25e6f9b4e9aab91c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 23:29:25 +01:00
dependabot[bot] 5d9413c913 Bump urllib3 from 2.6.0 to 2.6.3 in /packages/python-sdk in the pip group across 1 directory (#1066) 2026-01-08 06:56:47 +00:00
Jakub Dobry ca556d8b42 docs: remove inaccurate set timeout comment (#1059) 2026-01-02 13:20:19 +00:00
Jakub Novák 7bc9eb5d2d Dependencies update (#1058)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Updates dependency resolutions only; no app code changes.
> 
> - Bumps `js-yaml` from `4.1.0` to `4.1.1` across multiple transitive
deps (e.g., `@eslint/eslintrc`, `@apidevtools/json-schema-ref-parser`,
`json-schema-to-typescript`, `rc-config-loader`, etc.)
> - Bumps `mdast-util-to-hast` from `13.2.0` to `13.2.1` (and associated
reference in `hast-util-to-html`)
> - Lockfile (`pnpm-lock.yaml`) updated accordingly
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b05cc1a42c5de3acabbd65b24ee17c1e8454ef8c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-31 14:44:33 +00:00
github-actions[bot] 6e07b3b000 [skip ci] Release new versions 2025-12-22 18:02:47 +00:00
Berry 1ebc6dfae8 Template env vars (#1052)
Add a note to the template environment variables that they exist only
during template build, so users don't get confused.

---------

Co-authored-by: Mish <10400064+mishushakov@users.noreply.github.com>
2025-12-22 18:48:45 +01:00
Tomas Valenta 2d5af16b05 Add PTY reconnect (#1053)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Introduce `connect` methods to attach to running PTY sessions across
JS and Python SDKs, with tests and default timeout handling.
> 
> - **SDKs**:
>   - **JS (`packages/js-sdk/src/sandbox/commands/pty.ts`)**:
> - Add `Pty.connect(pid, opts?)` to attach to running PTYs; accepts
`PtyConnectOpts` with `onData`, `timeoutMs`, and `requestTimeoutMs`.
> - Factor default PTY connection timeout via
`defaultPtyConnectionTimeout` and apply to `create`/`connect` calls.
>   - **Python**:
> - Async: Add `AsyncSandbox.pty.connect(pid, on_data, timeout?,
request_timeout?)` in `e2b/sandbox_async/commands/pty.py`.
> - Sync: Add `sandbox.pty.connect(pid, timeout?, request_timeout?)` in
`e2b/sandbox_sync/commands/pty.py`.
> - **Tests**:
> - JS: `packages/js-sdk/tests/sandbox/pty/ptyConnect.test.ts` validates
connect/reconnect and output handling.
> - Python: async and sync tests under
`packages/python-sdk/tests/.../pty/test_pty_connect.py` verify
reconnection and exit codes.
> - **Release**:
> - Changeset: minor version bumps for `@e2b/python-sdk` and `e2b`; note
“added option to connect to a running pty session”.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
539c4f518606544dfcef253df5bde49354fe7903. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Mish <10400064+mishushakov@users.noreply.github.com>
2025-12-22 17:46:35 +00:00
github-actions[bot] d5e16f6ee6 [skip ci] Release new versions 2025-12-08 14:00:11 +00:00
Filip Brebera 37bd3e3d7c FIX(js-sdk): Template().copy() fails in ESM modules (#1046)
## Summary

 Fixes #1045

`getCallerDirectory()` fails in ESM modules because
`CallSite.getFileName()` returns
`file://` URLs, but `path.dirname()` doesn't handle URLs.

**Fix:** Convert `file://` URLs to filesystem paths using
`fileURLToPath()` before
  passing to `path.dirname()`.

  ## Changes

  - Added `fileURLToPath` import from `node:url`
  - Updated `getCallerDirectory()` to handle `file://` URLs
  - Added unit tests for ESM URL handling

  ## Testing

  - Built the SDK locally (`pnpm run build`)
- Linked to a test ESM project using my [reproduction
repository](https://github.com/bxxf/e2b-template-issue-repro) (`pnpm
link`)
  - Verified `Template().copy()` works without `ENOENT` errors
  - All existing tests pass

---------

Co-authored-by: Filip Brebera <filip.brebera@gendigital.com>
Co-authored-by: Mish <10400064+mishushakov@users.noreply.github.com>
2025-12-08 04:41:53 -08:00
github-actions[bot] f4cdbfbf64 [skip ci] Release new versions 2025-12-03 16:23:27 +00:00
Jakub Novák cc27297ff5 Update dependencies (#1041)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Updates js-sdk dependencies (glob, tar) and refreshes lockfile with
minor bumps including Vite 6.4.1; adds a changeset for a patch release.
> 
> - **Dependencies**:
>   - `packages/js-sdk/package.json`:
>     - Bump `glob` to `^11.1.0`.
>     - Bump `tar` to `^7.5.2`.
>   - `pnpm-lock.yaml`:
> - Refresh versions to match, notably `vite` `6.4.1`, `js-yaml`
`3.14.2`, `minimatch` `10.1.1`, `minizlib` `3.1.0`, and related
transitive updates.
> - **Release**:
> - Add changeset `.changeset/famous-stamps-tan.md` marking an `e2b`
patch release.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a27e3b182b126aca8d20aa7b3e26c2f5543fc43c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-03 13:13:50 +01:00
github-actions[bot] f561fc463c [skip ci] Release new versions 2025-12-01 15:49:40 +00:00
Mish Ushakov 7b687bddbb Fixes CMD parser in Python from_dockerfile method (#1040)
What was happening is that the following snippet:

```dockerfile
CMD ["sleep", "20"]
```

Was incorrectly converted to:

```
sleep, 20
```

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Fixes parsing of Dockerfile CMD/ENTRYPOINT array syntax to a proper
start command and updates tests accordingly.
> 
> - **Python SDK**:
> - `e2b/template/dockerfile_parser.py`: Parse CMD/ENTRYPOINT JSON array
(e.g., `["sleep", "20"]`) into a space-joined command (`sleep 20`) and
set as `start_cmd`.
> - **Tests**:
> - JS SDK and Python (sync/async): Add ENTRYPOINT case and assert
`startCmd`/`_start_cmd` equals `sleep 20`.
> - **Release**:
>   - Changeset: patch bump for `@e2b/python-sdk`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ed257ab11e618ece3e5fe70f232a3265fd857ad4. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-01 07:40:17 -08:00
github-actions[bot] 88106466a9 [skip ci] Release new versions 2025-12-01 10:44:36 +00:00
Mish Ushakov da925b5358 Fixes dot copy (#1037)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Fixes glob expansion when source is '.' to avoid absolute '/**/*'
traversal and adds targeted tests.
> 
> - **Bug fix (js-sdk)**:
> - Update `getAllFilesInPath` in
`packages/js-sdk/src/template/utils.ts` to construct a safe directory
pattern when the matched directory is `'.'` (uses
`path.join(file.relative() || '.', '**/*')`) preventing accidental
`/**/*` traversal.
> - **Tests**:
> - Add coverage for dot pattern in
`packages/js-sdk/tests/template/utils/getAllFilesInPath.test.ts`,
ensuring results stay within the context directory.
> - **Release**:
> - Add changeset `'.changeset/humble-badgers-cross.md'` (patch for
`e2b`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
aac954e0625a97a50ebab03416de8e61b5fde7a1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-11-28 03:52:32 -08:00
github-actions[bot] 3e6dc3aa62 [skip ci] Release new versions 2025-11-26 18:16:02 +00:00
Mish Ushakov 6ff14f8b2e Add Windows CI to test matrix (#1020)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Add Windows to CI matrices and make JS/Python utils and tests
cross-platform via path handling updates.
> 
> - **CI**:
> - Add Windows to test matrices in `cli_tests.yml`, `js_sdk_tests.yml`,
`python_sdk_tests.yml`; set bash shell/workdirs; disable fail-fast for
some jobs.
>   - Python CI runs `pytest -n 4` via Poetry.
> - **JS SDK**:
> - Path normalization for globbing (`normalizePath`) and use of
`Path.relativePosix()` in hashing and tar creation in
`src/template/utils.ts`.
> - **Python SDK**:
> - Add `normalize_path` and use forward-slash glob patterns in
`e2b/template/utils.py`.
> - **Tests**:
> - Make stack trace parsing robust to Windows paths; use `basename` in
file assertions; adjust Python tar tests tempdir fixture handling.
> - **Changeset**: add patch note for windows-related fixes.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1b8dbe4a1af642dbcb86500837e93f7998b223f6. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Joseph Lombrozo <joe.lombrozo@e2b.dev>
2025-11-26 09:50:26 -08:00
github-actions[bot] 4b770a1c6b [skip ci] Release new versions 2025-11-26 17:36:25 +00:00
Mish Ushakov 8be34f8344 Fixes default Dockerfile user/workdir behavior (#1033)
Fixes issue https://github.com/e2b-dev/E2B/issues/1032

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Preserve Dockerfile USER/WORKDIR when provided and only apply E2B
defaults if absent, with tests and CLI fixtures updated accordingly.
> 
> - **Dockerfile parsing (SDKs)**:
> - **JS (`packages/js-sdk/src/template/dockerfileParser.ts`)**: Track
`USER`/`WORKDIR` usage and only set E2B defaults (`user`, `/home/user`)
if not specified; keep Docker defaults (`root`, `/`) initially.
> - **Python
(`packages/python-sdk/e2b/template/dockerfile_parser.py`)**: Same
behavior—preserve explicit `USER`/`WORKDIR`, fallback to defaults only
when absent.
> - **Tests**:
> - **JS**: Add tests for default vs. custom `USER`/`WORKDIR` in
`fromMethods.test.ts`.
> - **Python (async/sync)**: Add analogous tests in
`test_from_methods.py`.
> - **CLI template fixtures**:
> - Update expected outputs to remove redundant
`.set_user('user')`/`.set_workdir('/home/user')` when already specified;
minor ordering tweak for `.setStartCmd` in TS fixture.
> - **Changeset**:
> - Minor version bumps for `@e2b/python-sdk` and `e2b`; note: keep
Docker `WORKDIR` and `USER` if specified.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1ce66362501932308292cef87b5d8a73012ee5f2. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-11-26 09:16:25 -08:00
Mish Ushakov 9577cf539f Remove unnecessary client headers in Python SDK (#1019)
- removed machine, os, processor, release default headers (these do not
occur in the JS version)
- particularly, "processor" header was causing issues on Windows due to
incorrect formatting/escape.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Removes unnecessary default headers from the Python SDK API client and
adds a patch changeset.
> 
> - **Python SDK**:
> - Trim `default_headers` in `packages/python-sdk/e2b/api/metadata.py`
by removing `machine`, `os`, `processor`, and `release`.
> - **Release**:
>   - Add changeset to publish a patch for `@e2b/python-sdk`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9a5ef769ee2eb0b9a05649c20a00dfd507984931. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-11-24 17:45:11 +00:00
github-actions[bot] a4852e19a9 [skip ci] Release new versions 2025-11-15 22:54:49 +00:00
Jakub Dobry 4c612888d4 feat: implement network out allow/deny list support (#1016) 2025-11-15 22:35:09 +00:00
Joseph Lombrozo 98d2c8c0a8 Ensure that httpx transport is reused across calls by default (#997)
This takes some shortcuts in order to keep backwards compatibility.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Reuses a singleton httpx transport/client across the SDK, introduces a
generic retry decorator for connect calls, and refactors code/tests to
use the shared clients and fixtures.
> 
> - **SDK (transport/client reuse)**
> - Add global `limits` (configurable via `E2B_*` env vars) and switch
`ApiClient` to accept `transport` instead of `limits`.
> - Introduce `e2b.api.client_async/client_sync` with `get_transport()`
(singleton) and `get_api_client()`; update `Sandbox`/`AsyncSandbox`,
paginators, and sandbox APIs to use them.
> - Remove per-class `_limits` from `SandboxBase`/`TemplateBase`; merge
extra headers correctly; pass `E2b-Sandbox-Port` as string.
> - Template build flows (sync/async) now reuse the API client's
underlying httpx client for file uploads.
> - **Connect client** (`e2b_connect/client.py`)
> - Add `_retry` decorator and apply to unary/server-stream methods;
simplify reconnection logic; minor typing/headers cleanups.
> - **Tests**
> - Add retry unit tests; introduce
`sandbox_factory`/`async_sandbox_factory` and a session `event_loop`;
refactor tests to use factories and shared transports; adjust tar
archive expectations.
> - **Misc**
>   - Add `.editorconfig`, CLI `.envrc`, and changeset entries.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1d359231b63dc21b6c8d797886f7d6a77c9ed6b7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Tomas Valenta <valenta.and.thomas@gmail.com>
Co-authored-by: Mish <10400064+mishushakov@users.noreply.github.com>
2025-11-14 16:48:29 -08:00
Joseph Lombrozo bbeff746f8 Support overriding envd API URL (#1013)
This requires [infra#1448](https://github.com/e2b-dev/infra/pull/1448)
first.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds support to override the sandbox API URL (E2B_SANDBOX_URL) across
JS/Python SDKs, centralizes sandbox host/url logic with headers, and
updates CI to build the SDK before CLI.
> 
> - **SDKs (JS & Python)**
> - Add `sandboxUrl` support in `ConnectionConfig` (env var
`E2B_SANDBOX_URL`), with new helpers `getSandboxUrl`/`getHost` and
shared `envdPort`.
> - Refactor sandbox initialization to use
`ConnectionConfig.getSandboxUrl(...)` and `getHost(...)`.
> - Always attach sandbox headers `E2b-Sandbox-Id` and
`E2b-Sandbox-Port` to sandbox and connect requests.
> - Python: thread `sandbox_url` through opts; update async/sync connect
calls to pass headers; minor fix to default `headers=None` in
`e2b_connect.client.Client` stream prep.
> - **CI**
> - Build `packages/js-sdk` before `packages/cli`; set step
`working-directory` for build/test.
> - **Dependencies**
>   - Point `e2b` dependency in lockfile to local `../js-sdk` link.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
5dc58171af6c170f8640f49d736dbe9c571f2b21. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Mish <10400064+mishushakov@users.noreply.github.com>
2025-11-14 10:13:59 -08:00