Commit Graph

4752 Commits

Author SHA1 Message Date
github-actions[bot] 63d6453eae [skip ci] Release new versions 2025-10-31 12:29:43 +00:00
Jakub Novák 742a9ba953 Update connect method (#1001)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Use new connect API for JS/Python SDKs to connect and only extend
(never shorten) running sandbox timeouts, with updated types/docs and
tests.
> 
> - **SDKs**:
>   - **JS**:
> - Replace `resume`/`setTimeout` flow with `SandboxApi.connectSandbox`
calling `POST /sandboxes/{sandboxID}/connect`.
> - Update `Sandbox.connect` (static/instance) to use returned
`sandboxDomain`, `envdAccessToken`, `envdVersion`.
> - Redefine `SandboxConnectOpts` to include `timeoutMs` that only
extends existing timeout.
>   - **Python (async/sync)**:
> - Introduce `_cls_connect` using `post_sandboxes_sandbox_id_connect`
with `ConnectSandbox`; return `Sandbox` model.
> - Update `connect` methods to use API response for
domain/token/version; remove extra info fetch.
>     - Docstrings clarify timeout only extends for running sandboxes.
> - **Tests**:
> - Add cases ensuring connect does not shorten timeout and does extend
when longer (JS, async Python, sync Python).
>   - Preserve error on connecting to non-running sandbox.
> - **Meta**:
> - Changeset: minor releases for `@e2b/python-sdk`, `e2b`, and
`@e2b/cli`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e76b07990cb4c05e51ba1c51fb5cc7bbd44b991b. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/cli@2.4.0 @e2b/python-sdk@2.6.0 e2b@2.6.0
2025-10-31 05:17:40 -07:00
Jakub Novák 423d87cf91 Update spec and templates to use /v3/ endpoint (#1002)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Switches SDKs to the /v3 template build API and updates spec with
sandbox connect, team max metrics, and related schema changes while
deprecating legacy endpoints.
> 
> - **API Spec / Schema**:
> - **Templates v3**: Add `POST /v3/templates` with
`TemplateBuildRequestV3` → `TemplateRequestResponseV3`; deprecate `POST
/templates`, `POST /templates/{templateID}`, and `POST /v2/templates`
(now return `TemplateLegacy`).
> - **Sandbox Connect**: Add `POST /sandboxes/{sandboxID}/connect` with
`ConnectSandbox`; mark `POST /sandboxes/{sandboxID}/resume` as
deprecated.
> - **Team Metrics**: Add `GET /teams/{teamID}/metrics/max` returning
`MaxTeamMetric`.
> - **Schema updates**: `Template` now includes `buildStatus`
(`TemplateBuildStatus`); `BuildLogEntry.step`;
`BuildStatusReason.logEntries`; `NodeStatusChange.clusterID`; replace
`McpConfig` with nullable `Mcp`; add `timestampUnix` to metrics and
deprecate `timestamp`.
> - **JS SDK**:
> - Update template build request to `POST /v3/templates` in
`template/buildApi.ts`.
> - Regenerate `schema.gen.ts` reflecting new endpoints/types and
deprecations.
> - **Python SDK**:
> - Add client for `POST /v3/templates`; switch sync/async build APIs to
use `TemplateBuildRequestV3` and new response type.
>   - Add client for `POST /sandboxes/{sandboxID}/connect`.
> - Introduce/adjust models: `TemplateBuildStatus`,
`TemplateRequestResponseV3`, `TemplateLegacy`, `ConnectSandbox`,
`MaxTeamMetric`, `McpType0`, and metric timestamp fields.
> - **Meta**:
>   - Changesets: patch bumps for affected packages.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
4672fbf655ae3e508bf375dc58a89299e19f0664. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-31 01:53:02 -07:00
Jakub Novák 60fb009e4a Use OIDC for npm publish (#990)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Move npm publishing to OIDC by adding id-token permissions and
removing NPM_TOKEN, update actions/setup-node to v6, and upgrade npm in
workflows.
> 
> - **Workflows**:
>   - **OIDC for npm publish**:
> - Add `permissions: id-token: write` in
`workflows/publish_packages.yml` and `workflows/release.yml`.
> - Remove `NPM_TOKEN` secret requirement and set `NPM_TOKEN: ""` in
`changesets/action` env.
>   - **Node/tooling updates**:
> - Bump `actions/setup-node` from `v3` to `v6` and set `registry-url`
where needed.
>     - Add step to upgrade `npm` to `^11.6` in `publish_packages.yml`.
>   - Keep pnpm caching/configuration and other steps intact.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
539db5937bfe83c4222015de3dcf9c1f90764bf3. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-30 02:13:40 -07:00
Tomas Valenta 0d8d0bce44 Add missing signal for request timeout (#999) 2025-10-29 14:55:41 -07:00
github-actions[bot] 2703721441 [skip ci] Release new versions 2025-10-28 17:10:46 +00:00
Mish Ushakov e8576a51e6 Add .fromBunImage and .bunInstall to the SDK (#993)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds `fromBunImage` and `bunInstall` to JS/Python SDKs, and extends
`npmInstall` with a `dev` flag, with tests across sync/async suites.
> 
> - **Template APIs**:
> - Add `fromBunImage` to start from `oven/bun:<variant>` in
`packages/js-sdk/src/template/index.ts` and
`packages/python-sdk/e2b/template/main.py`.
>   - Add `bunInstall(packages, { g, dev })` in both SDKs.
>   - Extend `npmInstall` to accept `{ dev: boolean }` in both SDKs.
> - **Types/Docs**:
> - Update `packages/js-sdk/src/template/types.ts` to declare
`fromBunImage`, `bunInstall`, and `npmInstall` `dev` option.
> - **Tests**:
> - Add tests for `fromBunImage` and `bunInstall` and update
`npmInstall` (global/dev) in JS (`packages/js-sdk/tests/...`) and Python
sync/async (`packages/python-sdk/tests/...`).
> - **Changeset**:
> - Minor releases for `@e2b/python-sdk` and `e2b`
(`.changeset/silly-lions-buy.md`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b6461d015743d38ba014d724167d2ca256cf7951. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/python-sdk@2.5.0 e2b@2.5.0
2025-10-28 16:59:37 +00:00
github-actions[bot] 70487f007e [skip ci] Release new versions 2025-10-28 11:14:31 +00:00
Mish Ushakov ffd1258adb Export ReadyCMD class (#992)
for building type-safe wrappers around .setStartCmd/.setReadyCmd

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Expose `ReadyCmd` via JS (`packages/js-sdk/src/index.ts`) and Python
(`e2b/__init__.py`) SDK entrypoints, with patch version bumps.
> 
> - **SDK Exports**:
> - **JS**: Re-exports `ReadyCmd` from `./template/readycmd` in
`packages/js-sdk/src/index.ts`.
> - **Python**: Exposes `ReadyCmd` in `e2b/__init__.py` imports and
`__all__`.
> - **Versioning**:
> - `.changeset/early-trainers-repeat.md`: Patch bumps for
`@e2b/python-sdk` and `e2b`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ff91a3e3578be8db6ea7644ee6717f1bd18b0165. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/python-sdk@2.4.3 e2b@2.4.3
2025-10-28 11:03:48 +00:00
github-actions[bot] 06aeae6a01 [skip ci] Release new versions 2025-10-27 18:52:30 +00:00
Mish Ushakov ad194b4f4a CLI migrate: Rename old template files no longer needed (#991)
Here's what it will look like. This highlights that the files are no
longer used.

```
🔄 Migrating template configuration to SDK format...

Using language: TypeScript

 Generated TypeScript template files:
   ./template.ts
   ./build.dev.ts
   ./build.prod.ts

📁 Old template files no longer needed:
   ./e2b.Dockerfile → ./e2b.Dockerfile.old
   ./e2b.toml → ./e2b.toml.old

🎉 Migration completed successfully!

🔨 You can now build your template using:
   npx tsx build.dev.ts (for development)
   npx tsx build.prod.ts (for production)

Learn more about Template SDK: https://e2b.dev/docs
```



<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Post-migration, the CLI renames `e2b.Dockerfile` and `e2b.toml` to
`.old` and refactors migration to use Dockerfile content directly.
> 
> - **CLI Template Migration
(`packages/cli/src/commands/template/migrate.ts`)**
> - **Refactor**: `migrateToLanguage` now accepts `dockerfileContent`
(string) instead of a path; Dockerfile retrieval moved to the command
action via `getDockerfile`.
> - **Post-migration cleanup**: Renames `e2b.Dockerfile` and `e2b.toml`
to `*.old` if present and logs old→new paths.
>   - Minor output tweaks (status messages/icons).
> - **Tests (`packages/cli/tests/commands/template/migrate.test.ts`)**
> - Add checks ensuring `e2b.Dockerfile.old` and `e2b.toml.old` exist
and originals are removed across fixtures/languages.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
5fc1add2ac8e688b7509c299211b53ac6b09188e. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/cli@2.3.3
2025-10-27 09:31:07 -07:00
github-actions[bot] 97a72597c5 [skip ci] Release new versions 2025-10-24 22:45:09 +00:00
Jakub Dobry f593bb7004 fix: update dev container naming (#989) @e2b/python-sdk@2.4.2 e2b@2.4.2 2025-10-24 22:34:45 +00:00
github-actions[bot] 865a8f8d18 [skip ci] Release new versions 2025-10-24 21:36:48 +00:00
Jakub Dobry 1fa99a3d20 feat: devcontainer template support (#988) @e2b/python-sdk@2.4.1 e2b@2.4.1 2025-10-24 14:20:29 -07:00
github-actions[bot] cb7464d2e4 [skip ci] Release new versions 2025-10-22 19:31:53 +00:00
Mish Ushakov c432805161 Promote beta MCP features to main (#986)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Promotes MCP to stable across JS/Python SDKs: add `mcp` config to
sandbox creation, auto-select MCP template, start gateway with token,
rename beta APIs to stable (`getMcpUrl`/`getMcpToken`, `addMcpServer`).
> 
> - **JS SDK**:
> - **Sandbox creation**: `Sandbox.create` now accepts `opts.mcp`;
auto-selects `defaultMcpTemplate`, starts `mcp-gateway` with generated
token, and returns initialized sandbox.
> - **API opts**: Move `mcp` from `SandboxBetaCreateOpts` to
`SandboxOpts`; pass `mcp` through `SandboxApi.createSandbox`.
> - **Stable MCP APIs**: Rename `betaGetMcpUrl` -> `getMcpUrl`,
`betaGetMcpToken` -> `getMcpToken`.
>   - **Template builder**: Rename `betaAddMcpServer` -> `addMcpServer`.
>   - **Tests**: Update stacktrace tests to new method names.
> - **Python SDK**:
> - **Sandbox creation**: `AsyncSandbox.create`/`Sandbox.create` accept
`mcp`; auto-select MCP template when unset, start `mcp-gateway`, store
token.
> - **Stable MCP APIs**: Add `get_mcp_url`; rename `beta_get_mcp_token`
-> `get_mcp_token`.
> - **Types**: Minor signature tweaks (e.g., `secure` default handling).
>   - **Tests**: Update stacktrace tests to new method names.
> - **Release**:
>   - Changeset: minor version bumps for `@e2b/python-sdk` and `e2b`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9c673f80eee37e530d05c6becf5a4a3c492ac9f3. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/python-sdk@2.4.0 e2b@2.4.0
2025-10-22 21:22:02 +02:00
github-actions[bot] 115e73b5a1 [skip ci] Release new versions 2025-10-22 09:44:35 +00:00
Mish Ushakov 818e8c2647 Add force option to make symlink method (#984)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds a force option to makeSymlink that passes -f to ln, with
typings/docs and tests across JS and Python SDKs.
> 
> - **Template symlink enhancement**
>   - **JS SDK (`packages/js-sdk`)**:
> - `makeSymlink(src, dest, options)` now accepts `{ user?: string;
force?: boolean }` and appends `-f` when `force` is true in
`src/template/index.ts`.
> - Types updated in `src/template/types.ts`, including example usage
with `{ force: true }`.
> - Tests added in `tests/template/methods/makeSymlink.test.ts` (regular
and forced).
>   - **Python SDK (`packages/python-sdk`)**:
> - `make_symlink(src, dest, user=None, force=False)` now supports
`force` and appends `-f` when true in `e2b/template/main.py`.
>     - Docstring examples updated to include `force=True`.
> - Tests added for async and sync in
`tests/async/template_async/methods/test_make_symlink.py` and
`tests/sync/template_sync/methods/test_make_symlink.py`.
> - **Release**:
>   - Changeset added for patch releases of `@e2b/python-sdk` and `e2b`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6c5bbf9edfc7234b703046f387d11b8f10a002ab. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/python-sdk@2.3.6 e2b@2.3.6
2025-10-22 00:48:11 +02:00
Mish Ushakov de2a922aa5 Make no install recommends optional (#983)
This was causing some unexpected issues if users were trying to
apt-install some packages that needed recommended dependencies.

<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds an option to `aptInstall`/`apt_install` to toggle
`--no-install-recommends`, updates typings/docs, and adds tests for both
modes.
> 
> - **Template APIs**:
>   - **JS SDK (`packages/js-sdk`)**:
> - `aptInstall` now accepts `options?: { noInstallRecommends?: boolean
}` and conditionally includes `--no-install-recommends`.
>     - Types updated in `src/template/types.ts` with example usage.
>   - **Python SDK (`packages/python-sdk`)**:
> - `apt_install` now accepts `no_install_recommends: bool = False` and
conditionally includes `--no-install-recommends`.
> - **Tests**:
> - JS: Add `aptInstall` tests (with and without `noInstallRecommends`);
refactor `npmInstall` tests to use `buildTemplateTest` helper.
> - Python: Add async and sync tests for `apt_install` with and without
`no_install_recommends`.
> - **Changeset**:
> - Patch bumps for `@e2b/python-sdk` and `e2b` with note on making
`--no-install-recommends` optional.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
3963b7daca73f1cfb99f405b09fbfb86c40c4b4f. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-21 14:59:57 -07:00
github-actions[bot] eb2dfd4bff [skip ci] Release new versions 2025-10-21 14:59:48 +00:00
Mish Ushakov d4619f641b Fixes ubuntu default image tag and added tests (#982)
The "lts" tag was unavailable on Docker Hub

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Switch default Ubuntu image tag from 'lts' to 'latest' across
JS/Python SDKs and expand/refactor template tests and test config.
> 
> - **SDKs**:
> - **Ubuntu default**: Change `fromUbuntuImage`/`from_ubuntu_image`
default variant from `'lts'` to `'latest'` in
`packages/js-sdk/src/template/index.ts` and
`packages/python-sdk/e2b/template/main.py`; update TS docs in
`packages/js-sdk/src/template/types.ts`.
> - **Tests**:
> - **JS**: Refactor template tests to use `buildTemplateTest`, add
`tests/template/methods/fromMethods.test.ts`, adjust npm/pip/runCmd
tests (include user install with `g: false`), and remove per-test
timeouts where not needed.
> - **Python (async/sync)**: Add comprehensive tests for from* methods,
npm/pip installs (including user installs), and runCmd behaviors; switch
to shared build fixtures.
> - **Vitest config**: Exclude `tests/template/**` from the main suite
and include all template tests in a dedicated project in
`vitest.workspace.mts`.
> - **Changeset**:
>   - Patch bumps for `@e2b/python-sdk` and `e2b`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0bf3a7c15122d28cbc99b8faa44e7e217f634377. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/python-sdk@2.3.5 e2b@2.3.5
2025-10-21 16:47:09 +02:00
Mish Ushakov 314bc14143 Test setup: append "e2b-test" to templates generated in tests (#981)
So that we ca distinguish templates in our team account that are built
from the CI tests.
2025-10-21 12:29:58 +00:00
Joseph Lombrozo ee8ec18829 Add a 'pretest' step to install chromium (#977)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Install Playwright Chromium via a new js-sdk pretest script and remove
redundant Playwright installs from CI workflows.
> 
> - **CI Workflows**:
> - Remove `npx playwright install --with-deps` from
`github/workflows/js_sdk_tests.yml` and
`github/workflows/release_candidates.yml` JS test steps.
> - **JS SDK (`packages/js-sdk/package.json`)**:
> - Add `pretest` script: `npx playwright install --with-deps chromium`
to handle Playwright installation automatically.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e05fc4d5ff2edf96c62633c302775dc8a218c050. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-20 19:36:35 -07:00
github-actions[bot] 5df9090f57 [skip ci] Release new versions 2025-10-20 22:16:19 +00:00
Jonas Scholz 68abd92c40 Add mcp server prepull (#975)
Adds prepulling mcp server images to the SDK.

```typescript
export const template = Template()
    .fromTemplate("mcp-gateway")
    .betaAddMcpServer("arxiv")

await Template.build(template, {
    alias: "arxiv-mcp-gateway",
    cpuCount: 1,
    memoryMB: 1024,
    onBuildLogs: console.log,
});

```


```python
template = Template().from_template("mcp-gateway").beta_add_mcp_server("arxiv")

Template.build(
    template,
    alias="arxiv-mcp-gateway-v1",
    cpu_count=1,
    memory_mb=1024,
)

```


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Introduce beta methods to prepull MCP servers via mcp-gateway in JS
and Python templates, with typing, validation, and stacktrace-tested
errors.
> 
> - **Template SDKs**
>   - **JS**:
> - Add `Template.betaAddMcpServer(servers: McpServerName |
McpServerName[])` to run `mcp-gateway pull ...`.
> - Enforce base template check (`'mcp-gateway'`), throwing `BuildError`
with stack trace.
> - Introduce and export `McpServerName` type (from `../sandbox/mcp`).
>   - **Python**:
> - Add `Template.beta_add_mcp_server(servers: Union[str, List[str]])`
to run `mcp-gateway pull ...`.
> - Enforce `'mcp-gateway'` base template; raise `BuildException` with
captured traceback.
> - **Tests**
> - Add stacktrace tests for `betaAddMcpServer` (JS) and
`beta_add_mcp_server` (Python async/sync).
> - **Release**
>   - Changeset: patch bumps for `@e2b/python-sdk` and `e2b`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
43b4a01ce3c856dff7def5ba6b706ee00eda0f84. 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>
@e2b/cli@2.3.2 @e2b/python-sdk@2.3.4 e2b@2.3.4
2025-10-20 14:52:30 -07:00
Joseph Lombrozo 3e430f66a1 support overriding apiUrl directly (#948)
This allows you to set E2B_API_URL and override the entire API URL in
the CLI and the SDK

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds API URL override to the JS SDK `ConnectionConfig` (via `apiUrl`
option or `E2B_API_URL`), with tests and test config updates.
> 
> - **JS SDK**:
> - **ConnectionConfig**: Add `apiUrl` option and resolve priority
`opts.apiUrl` → `E2B_API_URL` → `debug ? http://localhost:3000 :
https://api.${domain}`; add static `apiUrl` env getter.
> - **Tests**:
> - Add `tests/connectionConfig.test.ts` covering defaults, arg/env
override, and priority.
> - Update `vitest.workspace.mts` to exclude this test from the main
suite and run it in an isolated project with its own timeout.
> - **Release**:
>   - Add changeset for patch bumps (`e2b`, `@e2b/cli`).
> - **Misc**:
>   - Remove `packages/python-sdk/.tool-versions`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
46a86cba18865bd34ed5561a040af7736955c4ea. 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>
2025-10-20 14:45:04 -07:00
Mish Ushakov 83243d5b43 Add user option to fs methods in Template (#976)
(no tests as nothin was breaking)


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds an optional `user` parameter to fs-related template methods and
`gitClone`, with tests for running commands as specific users.
> 
> - **SDKs**:
>   - **JS (`packages/js-sdk`)**:
> - Add `user` option to `TemplateBuilder` methods: `remove`, `rename`,
`makeDir`, `makeSymlink`, and `gitClone`; pass through to `runCmd`.
>     - Update type defs and examples in `src/template/types.ts`.
>   - **Python (`packages/python-sdk`)**:
> - Add `user` arg to `TemplateBuilder` methods: `remove`, `rename`,
`make_dir`, `make_symlink`, and `git_clone`; forward to `run_cmd`.
>     - Update docstrings/examples.
> - **Tests**:
> - JS: add `runCmd` tests for default, specific `user`, and invalid
user in `packages/js-sdk/tests/template/methods/runCmd.test.ts`.
> - Python: add async and sync `run_cmd` tests (default, specific
`user`, invalid user) in
`packages/python-sdk/tests/async/.../test_run_cmd.py` and
`packages/python-sdk/tests/sync/.../test_run_cmd.py`.
> - **Release**:
> - Add changeset (`.changeset/warm-seals-design.md`) marking patch
bumps for `@e2b/python-sdk` and `e2b`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b0cbedc1d5c136367155c5646859842bd666b0d9. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-20 23:44:05 +02:00
Jonas Scholz 12daca8b39 Add custom MCP to SDK (#974)
This adds (experimantal) support to add arbitrary MCP server from
Github.
```python
sbx = await AsyncSandbox.beta_create(timeout=600, mcp={
    "github/modelcontextprotocol/servers": {
        "install_cmd": "npm install",
        "run_cmd": "sudo npx -y @modelcontextprotocol/server-filesystem /root",
    },
})
```

or in TS with better typing:

```typescript
const sandbox = await Sandbox.betaCreate({
    mcp: {
        duckduckgo: {},        
        'github/modelcontextprotocol/servers': {
            installCmd: 'npm install',
            runCmd: `sudo npx -y @modelcontextprotocol/server-filesystem /root`,
        },
    },
    timeoutMs: 600_000,
});
```


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Adds beta support to launch custom MCP servers (including
GitHub-defined ones) and updates MCP schemas/types; also switches
default MCP template to `mcp-gateway`.
> 
> - **SDK (JS & Python)**:
> - Add beta support for `mcp` config, including dynamic GitHub-based
servers with custom `runCmd/installCmd/envs` and automatic `mcp-gateway`
startup with token.
>   - Send `UNSET`/omit when `mcp` not provided to avoid API noise.
> - Change default MCP template from `mcp-gateway-v0-2` to
`mcp-gateway`.
> - **Types/Schema**:
> - Extend `McpServer` typings (JS `mcp.d.ts`, Python type hints) to
include many servers and descriptive metadata.
> - Introduce GitHub MCP types (TS `GitHubMcpServer`, Python
`GitHubMcpServerConfig`) and export in SDK surfaces.
> - Regenerate and enrich `spec/mcp-server.json` with
titles/descriptions and new server entries.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f3139b8fc2f1246c72734d8048ba277a13e3949d. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-20 14:38:18 -07:00
Joseph Lombrozo 4fbda293c2 Support labeling a PR after opening it (#979)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Expand Release Candidates workflow to run on PR label, open, reopen,
and sync events.
> 
> - **CI/CD**:
> - Update `on.pull_request.types` in
`.github/workflows/release_candidates.yml` to include `labeled`,
`opened`, `reopened`, and `synchronize` so the Release Candidate
workflow runs on these events.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a0842f5d6e0902ed04f9d42fa9b258dd098d56da. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-20 14:29:29 -07:00
Joseph Lombrozo 8c77cb04db Support overriding the api_url directly (#946)
This will help for local development

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Add support to override the API base URL via `api_url` parameter or
`E2B_API_URL` env var with clear precedence.
> 
> - **Python SDK**:
>   - **ConnectionConfig**:
> - Add `api_url` parameter and `_api_url()` env lookup (`E2B_API_URL`).
> - Resolve `api_url` in order: constructor arg > `E2B_API_URL` >
`debug` localhost or `https://api.<domain>`.
>   - **API Params**:
> - Include `api_url` in `ApiParams` and propagate via `get_api_params`.
>   - **Tests** (`packages/python-sdk/tests/test_connection_config.py`):
>     - Verify default, arg override, env override, and precedence.
> - **Changeset**: Patch release for `@e2b/python-sdk`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9be6d4e85bb0ad8ea52ad61c77530ac72f231c54. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-20 11:53:19 -07:00
Jonas Scholz cc595f3fc8 Revert timeout changes in tests (#973) 2025-10-20 00:25:50 +02:00
github-actions[bot] 04f3a1e036 [skip ci] Release new versions 2025-10-18 17:46:41 +00:00
Mish Ushakov c47927f1d0 Fix .toDocker RUN and COPY handling (#972)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Fix Dockerfile generation to properly render `RUN` and `COPY`
instructions using only relevant args, and add patch changesets.
> 
> - **Template to Dockerfile generation**:
> - JS (`packages/js-sdk/src/template/index.ts`): Special-case `RUN` and
`COPY` so Dockerfile emits `RUN <cmd>` and `COPY <src> <dest>` instead
of joining all args.
> - Python (`packages/python-sdk/e2b/template/main.py`): Same
special-casing for `RUN` and `COPY` during Dockerfile rendering.
> - **Release**:
> - Changeset: patch bumps for `@e2b/python-sdk` and `e2b` with note
"fix RUN and COPY handling in to_dockerfile".
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
04b2dbbda34f0845f3d4ec9963cc478b7b7b7f01. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/python-sdk@2.3.3 e2b@2.3.3
2025-10-18 19:35:22 +02:00
github-actions[bot] 538283691d [skip ci] Release new versions 2025-10-17 23:46:29 +00:00
Jonas Scholz 1a51777cc0 Fix mcp gateway race condition (#971)
Previously the gateway was just fire and forget which lead to a race
condition when you immediately tried to access the mcp server, changed
the template to launch a daemon with healthcheck.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Start MCP gateway synchronously with error checks and bump default MCP
template to `mcp-gateway-v0-2` across JS and Python SDKs.
> 
> - **MCP Gateway startup**:
> - JS (`packages/js-sdk/src/sandbox/index.ts`): Start `mcp-gateway`
without background mode; validate exit code and throw on failure.
> - Python Async (`packages/python-sdk/e2b/sandbox_async/main.py`):
Await `mcp-gateway` start, remove background/timeout flags; raise on
non-zero exit.
> - Python Sync (`packages/python-sdk/e2b/sandbox_sync/main.py`): Run
`mcp-gateway` synchronously; check exit code and raise on failure.
> - **Defaults**:
> - Update `default_mcp_template` from `mcp-gateway-v0-1` to
`mcp-gateway-v0-2` in JS and Python SDKs.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
79e431c78bf384c970a5b1fede55071116a089c5. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/python-sdk@2.3.2 e2b@2.3.2
2025-10-17 16:21:32 -07:00
Jonas Scholz d7d55df930 Add mcp to request body (#961)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Adds `mcp` config support for sandbox creation across API, JS, and
Python SDKs, and updates timeout tests to use explicit request timeouts.
> 
> - **API/OpenAPI**:
> - Add `McpConfig` schema and `mcp` field to `NewSandbox` in
`spec/openapi.yml` and generated TS `schema.gen.ts`.
> - **JS SDK**:
> - `SandboxApi.createSandbox` sends `mcp` in POST body
(`packages/js-sdk/src/sandbox/sandboxApi.ts`).
>   - Types updated to include `components["schemas"]["McpConfig"]`.
> - **Python SDK**:
> - Extend `NewSandbox` model and sandbox create flow to accept/pass
`mcp`; async/sync APIs propagate `mcp` to POST `/sandboxes`.
> - **Tests**:
> - Increase `is_running` request timeouts in timeout tests to reduce
flakiness (JS and Python).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
04ad4e6d4947e33523b74aba2f703fa1e9c05e72. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-17 12:31:32 -07:00
github-actions[bot] 546a2282fa [skip ci] Release new versions 2025-10-17 17:08:22 +00:00
Jonas Scholz 057f9027f0 Fix e2b tpl publish/delete --config flag (#968) @e2b/cli@2.3.1 2025-10-17 10:04:21 -07:00
Jakub Dobry c2cc1469f6 fix: CLI tests setup (#969) 2025-10-17 05:03:18 -07:00
Jakub Dobry 2c3b630b87 Purge migrated docs (#942) 2025-10-17 01:42:39 -07:00
github-actions[bot] d009507128 [skip ci] Release new versions 2025-10-16 23:25:59 +00:00
Mish Ushakov 7358b6120b Fix global packages permissions error (#967)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Global installs for pip/npm now run as root; pip gains an option to
install per-user instead.
> 
> - **Template SDKs**:
>   - **JavaScript (`packages/js-sdk/src/template`)**:
> - `pipInstall` now supports `options: { g?: boolean }` (default
`true`); when `g` is `true`, runs as `root`, when `false`, adds `--user`
and runs as current user.
>     - `npmInstall` runs as `root` when `options.g` is `true`.
>   - **Python (`packages/python-sdk/e2b/template/main.py`)**:
> - `pip_install` now accepts `g: bool = True`; when `True`, runs as
`root`, when `False`, adds `--user` and runs as current user.
>     - `npm_install` runs as `root` when `g` is `True`.
> - **Changeset**: patch bump for `@e2b/python-sdk` and `e2b` with note:
install global packages as sudo.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6be5ba211f7d200d50ffca50c1751d455b3e2cfa. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@e2b/python-sdk@2.3.1 e2b@2.3.1
2025-10-16 22:30:13 +02:00
github-actions[bot] ace327e948 [skip ci] Release new versions 2025-10-16 11:50:51 +00:00
Jakub Dobry c05c8c6f24 Build System v2 Introduction (#957) @e2b/cli@2.3.0 @e2b/python-sdk@2.3.0 e2b@2.3.0 2025-10-16 04:41:21 -07:00
Mish Ushakov b0aeeb5222 Revert "Add a postinstall that downloads chromium" (#964) 2025-10-16 11:40:28 +00:00
Mish Ushakov 48acc022f3 SDK reference: display submodules in the sidebar (#960) 2025-10-16 11:32:39 +00:00
Mish Ushakov 1d0d404dc0 Move template exceptions to shared (#953)
Co-authored-by: Jakub Dobry <jakub.dobry8@gmail.com>
2025-10-16 03:57:00 -07:00
Joseph Lombrozo 2942f481ad Use .tool-versions file to sync local dev and github actions (#955)
This way a version bump in the `.tool-versions` file is automatically
used in tests, linters, releases, and local dev. It also helps make it
clear which version we expect people to use locally.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> Add .tool-versions and update GitHub Actions to parse and use its
values for pnpm, Node.js, Python, Poetry, and Deno.
> 
> - **CI Workflows**:
> - Add parsing of `.tool-versions` via
`wistia/parse-tool-versions@v2.1.1` in `cli_tests.yml`,
`generated_files.yml`, `js_sdk_tests.yml`, `lint.yml`,
`publish_packages.yml`, `python_sdk_tests.yml`, `release.yml`,
`release_candidates.yml`.
>   - Replace hardcoded versions with `${{ env.TOOL_VERSION_* }}`:
>     - `pnpm`: `TOOL_VERSION_PNPM`
>     - `node-version`: `TOOL_VERSION_NODEJS`
>     - `python-version`: `TOOL_VERSION_PYTHON`
>     - `poetry` installer `version`: `TOOL_VERSION_POETRY`
>     - `deno-version`: `TOOL_VERSION_DENO`
> - **Tooling**:
> - Add `.tool-versions` specifying `deno 1.46.3`, `nodejs 20.19.5`,
`pnpm 9.15.5`, `python 3.9`, `poetry 1.8.3`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
358b62f586f3dfa164ad331f0ee7c7372e96bfac. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-15 16:12:30 -07:00
Joseph Lombrozo 5377b855cb Add a postinstall that downloads chromium (#962)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Move Playwright installation to JS SDK postinstall (Chromium) and
remove explicit installs from CI workflows.
> 
> - **Workflows**:
> - Remove `npx playwright install --with-deps` from
`/.github/workflows/js_sdk_tests.yml` and
`/.github/workflows/release_candidates.yml`.
> - **JS SDK (`packages/js-sdk/package.json`)**:
>   - Add `postinstall` script: `pnpm exec playwright install chromium`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6bc96ae4b8da0e03d98e99e6ecdc4e952d530866. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-10-15 16:12:16 -07:00