Commit Graph

186 Commits

Author SHA1 Message Date
devin-ai-integration[bot] 42553c22c9 ci: pin @changesets/cli to v2 so releases tag and publish GitHub releases again (#1723)
## Summary
GitHub releases and git tags stopped being created after Aug 13, even
though the Release workflow was green and packages still landed on
npm/PyPI (e.g. `e2b@2.40.0`/`2.41.0` exist on npm but have no tag or
GitHub release).

Root cause: the `changeset` script was `pnpm dlx @changesets/cli`, i.e.
always the latest version. `@changesets/cli` v3.0.0 (published Aug 11)
replaced the `🦋 New tag: ...` output with a clack-style `Created git
tags:` listing. `changesets/action@v1.9.0` parses the publish output for
`New tag:` lines to build `publishedPackages` — with v3 it finds none,
so it skips pushing tags and creating GitHub releases (the workflow's
own "Push new versions" step only runs `git push`, no `--tags`). The Aug
13 run still printed `New tag:`; the Aug 18/19 runs printed `Created git
tags:` and released nothing.

Fix: pin `@changesets/cli` to `2.31.1` as a devDependency and run the
local binary instead of `pnpm dlx`:

```diff
-    "changeset": "pnpm dlx @changesets/cli"
+    "changeset": "changeset"
 devDependencies:
-    "changeset": "^0.2.6",   // unrelated squatter package from 2013
+    "@changesets/cli": "2.31.1",
```

The removed `changeset@0.2.6` devDependency was an unrelated legacy
package that also shadowed the `changeset` bin name.

Moving to changesets v3 later requires bumping `changesets/action` to
v2.1.1 in `publish_packages.yml`; this PR intentionally keeps the
known-good v2 CLI + v1.9.0 action pairing.

Note: tags/releases for `e2b@2.40.0`, `e2b@2.41.0`,
`@e2b/python-sdk@2.40.0`, `@e2b/python-sdk@2.41.0` (and CLI if
applicable) are still missing on GitHub and need a one-off backfill;
this PR only prevents future runs from skipping them.

Link to Devin session:
https://app.devin.ai/sessions/4eeb8679b8d74c848bc46456a035df21
Requested by: @mishushakov

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: mish@e2b.dev <mish@e2b.dev>
2026-08-20 00:48:45 +02:00
cursor[bot] 02ba746e9f fix(deps): patch 4 advisories found by dependency audit (3 high, 1 medium) (#1685)
Daily dependency vulnerability audit. `pnpm audit` reported 8 findings
across 2 packages (3 distinct advisories, all high), and `pip-audit`
reported 1 (medium). All 4 have published patches, and every one is
applied here. Both ecosystems now report clean.

All findings were cross-referenced against the GitHub Advisory Database
via `gh api /advisories/<ghsa>` to confirm severity and first-patched
version before bumping.

## Advisories fixed

| Severity | CVSS | Advisory | Package | Was | Now |
| --- | --- | --- | --- | --- | --- |
| High | 7.5 |
[CVE-2026-14257](https://github.com/advisories/GHSA-mh99-v99m-4gvg) |
`brace-expansion` | 1.1.16 / 2.1.2 / 5.0.7 | 1.1.18 / 2.1.4 / 5.0.9 |
| High | 7.5 |
[CVE-2026-69152](https://github.com/advisories/GHSA-rgw5-rvv9-x895) |
`brace-expansion` | 1.1.16 / 2.1.2 / 5.0.7 | 1.1.18 / 2.1.4 / 5.0.9 |
| High | 7.5 |
[GHSA-5p4m-2wfm-xmqj](https://github.com/advisories/GHSA-5p4m-2wfm-xmqj)
(no CVE assigned) | `js-yaml` | 3.15.0 / 4.3.0 | 3.15.1 / 4.3.1 |
| Medium | 5.3 |
[CVE-2026-71554](https://github.com/advisories/GHSA-6hr6-w5qg-qmwg) |
`h2` | 4.3.0 | 4.4.1 |

The two `brace-expansion` CVEs are handled together because the second
one bypasses the mitigation added for the first, so only the 1.1.18 /
2.1.4 / 5.0.9 line is safe against both. Note that the existing
overrides already covered earlier rounds of these same advisories — they
were pinning 1.1.13 / 2.1.2 / 5.0.6 and js-yaml 3.15.0 / 4.2.0, which
have since been superseded.

## Why each one matters here

**`brace-expansion` (high, DoS).** Reachable through `glob > minimatch >
brace-expansion`, and `glob` is a *production* dependency of the
published `e2b` JS SDK — so this is the one finding that was not
dev-only. Worth noting for reviewers: `glob@13.0.6` requires
`minimatch@^10.2.2`, which in turn requires `brace-expansion@^5.0.8`, so
a fresh `npm install e2b` already resolves the patched 5.0.9 on its own.
No `js-sdk` manifest change is needed and end users were not exposed;
the override bump is what keeps this repo's own lockfile and CI off the
vulnerable versions.

**`js-yaml` (high, quadratic CPU in `!!omap`).** Dev-tooling only, via
`@changesets/read > ... > read-yaml-file` and `knip`.

**`h2` (medium, duplicate `Host` header / request smuggling).** A
production dependency of the Python SDK. Bumping `uv.lock` alone would
only fix this repo's dev environment, since `uv.lock` does not constrain
downstream installs — so the floor in `pyproject.toml` is raised too,
which is what actually prevents a consumer from resolving the vulnerable
4.3.0 or 4.4.0. `h2` 4.4.1 declares `requires_python >=3.10`, matching
the SDK's own `requires-python`, so no supported Python version is
dropped. This is the only user-facing change in the PR and it carries a
`patch` changeset.

This one is below the high/critical bar the audit normally acts on, and
is included because the remediation is a single in-range floor bump on a
dependency that ships to users.

## Changes

- `package.json` — retarget the `brace-expansion` and `js-yaml` pnpm
overrides at the new patched versions.
- `pnpm-lock.yaml`, `packages/python-sdk/uv.lock` — regenerated.
- `packages/python-sdk/pyproject.toml` — `h2>=4,<5` becomes
`h2>=4.4.1,<5`.
- `.changeset/bump-h2-4-4-1.md` — `patch` for `@e2b/python-sdk`.

No source code changed; this is dependency metadata only.

## Verification

All three audits are clean after the change:

```bash
pnpm audit                 # No known vulnerabilities found
pnpm audit --prod          # No known vulnerabilities found
cd packages/python-sdk && uv run --with pip-audit pip-audit
                           # No known vulnerabilities found
```

`pnpm run format`, `pnpm run lint`, and `pnpm run typecheck` all pass
with no diff.

Tests: 256 Python unit tests, 101 CLI tests, and 345 JS SDK tests pass.
The remaining suites could not run in this environment because no
`E2B_API_KEY` was available — every one of those failures is an
`AuthenticationError: API key is required` / `E2B_API_KEY must be set`
from a live-sandbox integration test, and none is related to this diff.
**The credential-gated integration suites should be confirmed green in
CI before merge.**

```bash
cd packages/python-sdk && uv run pytest tests --ignore=tests/async --ignore=tests/sync --ignore=tests/bugs --ignore=tests/shared -q
# 256 passed

cd packages/cli && npx vitest run
# 101 passed | 8 skipped

cd packages/js-sdk && npx vitest run --project unit --project connectionConfig --project template
# 345 passed; 267 failures, all missing-API-key
```

## Note on PR structure

The audit task asks for one PR per vulnerability. This run was scoped to
a single branch, so all 4 advisories are grouped here. That grouping is
also the correct shape for the two `brace-expansion` CVEs, which share
one fix and cannot be split. If separate PRs are preferred, the three
commits on this branch are already split by advisory group and can be
cherry-picked apart.

<div><a
href="https://cursor.com/agents/bc-c4b46d1f-a426-45b9-9c03-46e5decd398d?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/open-in-web-light.png"><img
alt="Open in Web" width="114" height="28"
src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a
href="https://cursor.com/automations/979f8043-9b01-11f1-ba66-0e7d0216e441"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/view-automation-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/view-automation-light.png"><img
alt="View Automation" width="141" height="28"
src="https://cursor.com/assets/images/view-automation-dark.png"></picture></a>&nbsp;</div>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Mish Ushakov <mishushakov@users.noreply.github.com>
2026-08-19 14:36:24 +02:00
Mish Ushakov d5a382ed67 chore(js-sdk): bump undici to ^7.29.0 and optional undici8 to 8.10.0 (#1645)
Bumps both undici dependencies in the js-sdk past the 2026-07-24
security advisories: the required `undici` from `^7.28.0` to `^7.29.0`,
and the optional `undici8` (`npm:undici@…`) from 8.8.0 to 8.10.0. Both
releases patch one High
([GHSA-4cwx-7wf7-3272](https://github.com/nodejs/undici/security/advisories/GHSA-4cwx-7wf7-3272),
cache-control parsing / cross-user disclosure) and four Medium
advisories, clearing the open Dependabot alerts for undici; 8.10.0
additionally fixes HTTP/2 request settling, refused-stream retries and
GOAWAY handling, which we exercise because every dispatcher the SDK
builds sets `allowH2: true`.

A root `pnpm.overrides` entry (`undici@>=7.0.0 <7.29.0`) is included
because miniflare pins undici at exactly 7.28.0, which would otherwise
keep a vulnerable copy in the lockfile; with it, the lockfile carries
only 7.29.0 and 8.10.0. No code change was needed and there is no
user-facing API change — 7.29.0 still requires Node `>=20.18.1` and
8.10.0 still requires `>=22.19.0`, matching the `UNDICI_8_MIN_NODE` gate
in `packages/js-sdk/src/undici.ts`, so `getUndiciPackageCandidates()`
picks the same package on the same Node versions.

`format`, `lint` and `typecheck` pass, `tests/undici.test.ts` is 9/9,
and `test:cf` was run to confirm miniflare still boots on the overridden
undici. The remaining vitest projects need `E2B_API_KEY`, which isn't
available locally, so they're left to CI. A patch changeset for `e2b` is
included.

Linear:
[SDK-317](https://linear.app/e2b/issue/SDK-317/js-sdk-bump-optional-undici8-dependency-to-8100)

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 14:29:06 +00:00
Mish Ushakov 26ee42c10a chore: upgrade pnpm to 10.34.5 and delay fresh releases by 3 days (#1644)
Bumps pnpm 9.15.5 → 10.34.5 in all three places it is pinned
(`.tool-versions`, the root `packageManager` field, and
`codegen.Dockerfile` — pnpm 10 self-manages from `packageManager`, so a
mismatched Docker pin would make it re-download itself on every `make
generate`) and sets `minimumReleaseAge: 4320` in `pnpm-workspace.yaml`,
so a freshly published version is not resolved until it is 3 days old;
CI is unaffected because every workflow installs with
`--frozen-lockfile` and nothing installs a just-published package.

Two pnpm 10 breaking changes needed handling: dependency lifecycle
scripts no longer run by default, so `esbuild` and `workerd` are
allowlisted via `pnpm.onlyBuiltDependencies` for binary resolution while
`bufferutil`, `msw`, and `utf-8-validate` are explicitly declined via
`pnpm.ignoredBuiltDependencies` (which also keeps the "Ignored build
scripts" warning off every install); and pnpm 10 stopped public-hoisting
`*prettier*`/`*eslint*`, which broke `pnpm run format` in both JS
packages with `prettier: command not found` — prettier was never
declared anywhere and only resolved because pnpm 9 hoisted it out of
`json-schema-to-typescript`, so it is now a root devDependency alongside
`oxlint`, resolved to the 3.6.2 already in the lockfile for zero
formatting churn.

`engines.pnpm` moves to `>=10.16.0 <11` so, with `engine-strict`, pnpm 9
fails with an actionable "install the required pnpm version globally"
message instead of silently installing.

Verified with a clean `node_modules` + `--frozen-lockfile` install and
green `lint`, `typecheck`, `format`, and both JS builds, plus a
from-scratch re-resolve of the whole tree to confirm
`minimumReleaseAgeStrict` (which silently defaults to `true` once the
age is set explicitly) does not trap any current range; enforcement was
checked empirically — with the setting, `wrangler@^4` resolves to
4.118.0 (6d old) rather than 4.119.0 (1d old). The lockfile diff is
limited to the prettier entry plus pnpm 10's importer-section reordering
and new `libc:` fields, with no dependency version drift.

No changeset: nothing in a published package changed. A follow-up to
pnpm 11 is deliberately out of scope — it removes both build-script
fields in favor of `allowBuilds`, restricts `.npmrc` to auth/registry
settings, and replaces the npm-delegating `pnpm publish`, which the
release flow depends on.

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

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 16:29:18 +02:00
Mish Ushakov 4fcf7cb150 feat: sync API specs from infra and belt with Copybara (#1564)
The specs in `spec/` were copied from their source repos by hand and had
drifted ~2,400 lines behind infra, so they are now imported with
Copybara (`copy.bara.sky`, run in a pinned Docker image by
`scripts/fetch-spec.sh`): `make codegen` re-fetches them at the commits
pinned in `spec/infra-ref` and `spec/belt-ref` before generating, and
the generated-files CI check fails if the tracked copies don't match the
pins. Regenerating from the current pins picks up the accumulated spec
changes in the generated JS/Python clients (renamed request schemas,
`SandboxNetworkConfig`, `SandboxIam` workload identity,
`FILE_TYPE_SYMLINK`, access-token auth deprecation, volume path-metadata
tweaks). The one handwritten SDK change follows from that: the public
`FileType` enums gain a `SYMLINK` member (JS and both Python surfaces)
so entries envd reports as symlinks show up in `files.list()` and
`getInfo()`/`get_info()` instead of being silently skipped as unknown
types. The custom `spec/remove_extra_tags.py` tag-filtering script is
replaced by Redocly CLI's `filter-in` decorator (`redocly.yaml`), which
produces identical generated JS output; a `filter-out` decorator
additionally drops any operation or component schema the upstream specs
mark `x-not-implemented: true` (currently the SOCKS5
`SandboxEgressProxyConfig`/`egressProxy` surface, which infra flagged as
spec-only); each SDK's bundle now goes to its own gitignored
`spec/openapi_generated.<api>.yml` instead of both pipelines overwriting
one shared file; Python client models now list fields in spec order
instead of alphabetical (mechanical reordering only — construct models
with keyword args). Spec fetches try whatever GitHub token is available
and fall back to the tracked copies with a warning (the public infra
specs also fetch anonymously); in CI a short-lived belt-scoped token is
minted from the org-wide Autofixer GitHub App (no new secrets), so fork
PRs simply fall back for the belt spec; the CI workflows also cache the
Copybara image alongside the codegen image, and the previously ignored
`CODEGEN_IMAGE` env is honored by the Makefile.

## Usage

```sh
# update the specs: bump a pin, then regenerate
echo <infra-commit-sha> > spec/infra-ref
make codegen

# fetch a single spec without regenerating
pnpm fetch:api-spec     # spec/openapi.yml from infra
pnpm fetch:envd-spec    # spec/envd/ from infra
pnpm fetch:volume-spec  # spec/openapi-volumecontent.yml from belt

# try the latest spec without touching the pin
E2B_INFRA_REF=main pnpm fetch:api-spec

# change which endpoint tags an SDK exposes
$EDITOR redocly.yaml && make codegen
```

```ts
// symlinks are now visible in the filesystem API (JS; same shape in Python)
const entries = await sandbox.files.list('/home/user')
const link = entries.find((e) => e.type === FileType.SYMLINK)
console.log(link?.symlinkTarget)
```

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 16:37:02 +02:00
Mish Ushakov 5417dd4f9f fix(deps): resolve all open Dependabot alerts (#1598)
## Summary

Fixes all 8 open [Dependabot
alerts](https://github.com/e2b-dev/E2B/security/dependabot), all in
`pnpm-lock.yaml`:

| Package | Severity | Alerts | Before | After | How |
|---|---|---|---|---|---|
| `@vitest/browser` | critical | #328 | 4.1.8 | 4.1.10 | updated the
vitest family in js-sdk and cli devDeps (4.1.10 peer-requires
`vitest@4.1.10` exactly) |
| `tar` | critical/high/medium ×4 | #324–#327 | 7.5.16 | 7.5.21 | bumped
the js-sdk runtime dep floor to `^7.5.19` + repo-wide override |
| `sharp` | high | #329 | 0.34.5 | 0.35.3 | new override (pinned exactly
by miniflare, dev-only) |
| `shell-quote` | high | #323 | 1.8.4 | 1.10.0 | widened existing
override (dev-only, via npm-run-all) |
| `brace-expansion` | high | #322 | 2.1.0 | 2.1.2 | widened existing
override |

The only runtime-dependency change is `tar` in the js-sdk (used for
template build contexts), so a patch changeset for `e2b` is included.
The CLI bundles the SDK and its dependencies into `dist/index.js`, so
the published CLI also ships the vulnerable `tar` — a patch changeset
for `@e2b/cli` is included to rebundle it. Everything else is dev
tooling or lockfile-only.

## Verification

- `pnpm run lint` and `pnpm run typecheck` pass (the 7 python-sdk ty
diagnostics pre-exist on main)
- js-sdk: unit + connectionConfig (393 passed) and template projects
(132 passed, exercises the new `tar` end-to-end against the real API) on
vitest 4.1.10; `pnpm run build` clean
- js-sdk `test:cf` passes — miniflare/workerd boots with sharp 0.35.3
- cli: full suite green (103 passed) on vitest 4.1.10

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 18:56:01 +02:00
Mish Ushakov be1ffa19f6 chore(deps): remove dead pnpm overrides and add CLI changeset (#1561)
Follow-up to #1559 with two changes. First, it removes four
`pnpm.overrides` entries whose targets are no longer in the dependency
graph at all — `@next/eslint-plugin-next>glob` (the parent package is
gone), `yaml@2.x`, `@tootallnate/once`, and `flatted`; the lockfile
change is header-only and no resolved package versions change, verified
with a clean `pnpm audit`. The remaining overrides are kept because no
parent's declared range excludes the vulnerable versions, so they are
the only enforcement of the patched floors. Second, it adds a patch
changeset for `@e2b/cli`: the CLI bundles all runtime dependencies into
`dist/index.js` at build time (tsdown `alwaysBundle`), so the patched
transitive deps from #1559 (e.g. brace-expansion 5.0.7 via the
glob/minimatch chains) only reach users through a new release. No
changeset is needed for the `e2b` SDK or Python SDK since they publish
dependency ranges that resolve fresh at user install time. Supersedes
#1560.

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 11:20:05 +00:00
Mish Ushakov f6cb5a0da7 fix(deps): resolve open Dependabot alerts via pnpm overrides (#1559)
Fixes all 6 open [Dependabot
alerts](https://github.com/e2b-dev/E2B/security/dependabot) plus 2
advisories surfaced by `pnpm audit`, by bumping vulnerable transitive
dependencies through `pnpm.overrides`: vite 6.4.2→6.4.3
(`server.fs.deny` bypass, NTLMv2 hash disclosure), js-yaml 3.14.2→3.15.0
/ 4.1.1→4.3.0 (merge-key DoS), @babel/core 7.27.1→7.29.7 (arbitrary file
read via `sourceMappingURL`), brace-expansion 1.1.12→1.1.16 /
5.0.5→5.0.7 (DoS), and underscore 1.13.6→1.13.8 (recursion DoS). Vite
required a manual lockfile version+integrity rewrite because pnpm does
not re-resolve auto-installed optional peers (vite enters the graph via
vitest) when an override changes. Only brace-expansion@5 is in a runtime
dependency chain (`glob` in the SDK/CLI); all other bumps are dev
tooling, no package manifests changed, so no changeset is needed.
Verified with a clean `pnpm audit`, passing
lint/typecheck/format/builds, and a live vitest smoke test against a
real sandbox.

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

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 12:53:54 +02:00
Mish Ushakov a39db3bb36 chore: switch from eslint to oxlint (#1514)
Replaces ESLint (and its `@typescript-eslint/*` and `unused-imports`
plugins) with [oxlint](https://oxc.rs) across the `js-sdk` and `cli`
packages. A root `.oxlintrc.json` replaces the three `.eslintrc.cjs`
files, the package `lint` scripts now run `oxlint`, the related
devDependencies are swapped for `oxlint`, and the lint CI path filter is
updated accordingly. Formatting rules
(`quotes`/`semi`/`linebreak-style`) are dropped because Prettier already
enforces them, and `no-unused-vars` is set to error to preserve the
previous unused-imports check. The one behavior change is that
`@typescript-eslint/member-ordering` has no oxlint equivalent and is no
longer enforced. `lint`, `typecheck`, and `prettier` all pass clean for
both packages.

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

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 14:34:39 +02:00
Mish Ushakov 9ffb104456 fix(deps): override shell-quote to ^1.8.4 (CVE-2026-9277) (#1432)
## Summary

Fixes Dependabot alert
[#304](https://github.com/e2b-dev/E2B/security/dependabot/304)
(critical,
[CVE-2026-9277](https://nvd.nist.gov/vuln/detail/CVE-2026-9277) /
[GHSA-w7jw-789q-3m8p](https://github.com/ljharb/shell-quote/security/advisories/GHSA-w7jw-789q-3m8p)).

`shell-quote` is a transitive dependency (pulled in via `npm-run-all`).
Versions `< 1.8.4` are vulnerable to a command-injection issue:
`quote()` did not escape line terminators (`\n`, `\r`, U+2028, U+2029)
in object `.op` values, allowing content after a newline to execute as a
separate shell command.

This adds a pnpm override forcing `shell-quote` to `^1.8.4`, consistent
with the existing security-override pattern in the root `package.json`.
The lockfile now resolves `shell-quote@1.8.4`.

## Changes

- `package.json`: add `"shell-quote@<1.8.4": "^1.8.4"` to
`pnpm.overrides`
- `pnpm-lock.yaml`: regenerated — `shell-quote` 1.8.3 → 1.8.4

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

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 15:55:32 +02:00
Mish Ushakov 5e6d78fbc8 fix(deps): bump ws to >=8.20.1 (CVE-2026-45736) (#1382)
Resolves Dependabot alert #300 (GHSA-58qx-3vcg-4xpx / CVE-2026-45736),
an uninitialized memory disclosure in `ws`. Adds a pnpm override forcing
`ws` to `^8.20.1`, which bumps the transitive resolution (pulled in via
`@vitest/browser`) from `8.19.0` to `8.21.0`. This follows the existing
override pattern in the root `package.json` for prior CVE bumps. No
changeset needed since only root dev tooling is affected.

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

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 10:40:52 +00:00
Mish Ushakov 55e9e0eb5a chore(deps): resolve Dependabot security alerts across npm and python (#1302)
## Summary

Resolves all 31 open [Dependabot
alerts](https://github.com/e2b-dev/e2b/security/dependabot) across the
workspace.

- **npm** — added range-based `pnpm.overrides` to bump vulnerable
transitive deps to their patched versions: postcss, vite, lodash,
brace-expansion, picomatch (2.x + 4.x), yaml, @tootallnate/once,
smol-toml, flatted, and minimatch (3.x/5.x/9.x/10.x).
- **python-sdk** — bumped dev deps in `poetry.lock`: pytest 7.4 → 9.0.3
(with constraint update in `pyproject.toml`), pytest-asyncio 0.23 → 1.3
(required for pytest 9), python-dotenv 1.2.2, pygments 2.20.0, requests
2.33.1, black 26.3.1; removed 4 now-unused `# ty: ignore` directives
that pytest 9's stricter type signatures made obsolete.

## Test plan

- [x] \`pnpm run typecheck\` passes
- [x] \`pnpm run lint\` passes
- [x] \`pnpm run format\` clean
- [x] CLI tests (80/80) and js-sdk/python-sdk unit tests pass;
integration tests not run locally (need \`E2B_API_KEY\`)

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

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 14:45:19 +00:00
Jakub Novák 4e4aa7ba71 chore: update rollup (#1236) 2026-03-27 03:23:22 -07:00
Ben Fornefeld 089b8b9805 Remove: SDK Reference artifacts and apps/web (#1199)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> **Medium Risk**
> Medium risk because it deletes a large subtree (`apps/web`) and
removes SDK-reference generation/commit steps from the package publish
workflow, which may affect downstream docs/release expectations.
> 
> **Overview**
> **Removes the docs web app and generated SDK reference content.** The
PR deletes `apps/web` configs/scripts (Next.js/MDX setup, Sentry config,
prebuild/sitemap generation) and removes the committed `sdk-reference`
MDX pages.
> 
> **Simplifies repo automation and ownership.** The package publish
workflow no longer generates/clones/commits SDK reference docs,
`CODEOWNERS` drops web/docs ownership entries, and the root ESLint
config removes `@stylistic/ts` in favor of the built-in `semi` rule.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
4158d777b5f3d3fa30b538e434d34ce0e697d473. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2026-03-17 10:08:28 -07:00
joe-lombrozo-s-bot[bot] 16c86d17d0 fix(python-sdk): use per-event-loop transport for async client (#1178) 2026-03-09 19:45:00 +00:00
Mish Ushakov c38a1819b6 Fix Python SDK type issues with ty type checker (#1122)
## Summary
- Resolved 43 type diagnostics reported by ty (Astral's Python type
checker)
- Fixed Self type issues on class singletons
- Added explicit type annotations for shadowed attributes
- Replaced None with UNSET for auto-generated API parameters
- Fixed method signature alignment for protocol matching
- Added targeted type: ignore suppressions for pattern-based limitations

All checks pass: ty check, ruff format, ruff check.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Mostly typing/CI changes, but some adjustments affect sandbox
connect/pause overload dispatch and API response/parameter handling
(`UNSET` vs `None`), which could alter edge-case runtime behavior.
> 
> **Overview**
> Fixes Python SDK static typing issues for Astral’s `ty` checker and
wires typechecking into CI.
> 
> Adds a new `Typecheck` GitHub Action plus workspace `typecheck`
scripts (TS packages via `tsc`, Python SDK via `make typecheck` running
`ty`), and publishes a patch changeset for `@e2b/python-sdk`.
> 
> Across the Python SDK, adjusts type annotations and overloads (e.g.,
`Self`/singleton typing, `connect` overloads, optional
`user`/token/domain handling), tightens API model parsing with
`cast`/`Optional` checks and `UNSET` usage, and adds a few targeted `ty`
ignore comments in tests/protocols to silence checker limitations.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f66402847c40cee7e44e1aaa7caa97e271ba9978. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-02-12 16:23:39 +00:00
Jakub Novák 118890a9b2 Update e2b (#1051)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Upgrade `e2b` to 2.8.4 in CLI, update `eslint-config-next` to 14.2.35
in web app, add pnpm override for `@next/eslint-plugin-next>glob`, and
refresh lockfile.
> 
> - **Dependencies**:
> - **CLI**: Bump `e2b` from `^2.7.0` to `^2.8.4` in
`packages/cli/package.json`.
> - **Web**: Update `eslint-config-next` from `14.2.21` to `14.2.35` in
`apps/web/package.json`.
> - **Tooling/Config**:
> - Add pnpm override to force `@next/eslint-plugin-next>glob@*` to
`10.5.0` in root `package.json`.
> - **Lockfile**:
> - Regenerate `pnpm-lock.yaml` reflecting the above upgrades and
transitive dependency adjustments (e.g.,
`@next/eslint-plugin-next@14.2.35`, `glob@10.5.0`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b143ae8745bb90ff83a0332364ee5052f76db3fb. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-12-16 16:53:48 +00:00
Jakub Novák 8162a34cb7 Update inquirer and use npx for changeset (#1008)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> Upgrades CLI prompting deps (inquirer v12, @inquirer/prompts v7.9) and
switches release scripts to use pnpm/pnpx changeset; lockfile updated
accordingly.
> 
> - **CLI**:
> - Upgrade `inquirer` to `^12.10.0` and `@inquirer/prompts` to `^7.9.0`
in `packages/cli/package.json`.
> - **Tooling/Release Scripts**:
> - Change root `package.json` scripts to use `pnpm changeset ...` and
add `changeset` script via `pnpx @changesets/cli`.
>   - Remove direct root dependency on `@changesets/cli`.
> - **Lockfile**:
> - Refresh `pnpm-lock.yaml` to reflect dependency upgrades and
removals.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0596c189ae264d795de4168a2d2497121ae0d72d. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
2025-11-04 12:23:24 -08:00
Jakub Novák b42ab2a86b Add pipeline for linting and formatting (#883)
Setup linting and formatting in all packages
2025-08-31 12:06:00 -07:00
Mish Ushakov b21f86c543 Added lint workflow for JS, Python SDKs (#759)
- Linted all existing files
- Added GitHub workflow to check everything is linted correctly
2025-06-05 14:52:48 +02:00
Ben Fornefeld 842f46cb8d improve: sitemap creation & category rewrite modifications 2025-02-19 15:53:01 +01:00
Jakub Dobry c108afb674 Update package manager to the latest 9.x version (9.15.5) 2025-02-10 14:01:41 -08:00
Jakub Novak 3bbc0b9547 Update packages 2025-02-05 10:22:20 -08:00
Jakub Novak 66141ef03e Update changeset to update cross-spawn 2025-02-04 22:36:40 -08:00
Ben Fornefeld e644a98a14 add billing api logic + improve billing alerts components 2025-01-24 11:37:50 -08:00
0div d599ddac32 rebrand to SDK reference 2024-11-26 10:34:04 -08:00
Jakub Novak 1ee0f01b09 [skip CI] Release new versions 2024-10-16 03:25:08 -07:00
Jakub Novak 707b518872 Setup release pipeline to generate api ref 2024-10-15 10:17:45 -07:00
Jakub Novak 1e36dd02dd Enforce pnpm version 2024-10-15 08:29:46 -07:00
Vasek Mlejnsky 024d30ed45 Fix docs build 2024-10-14 11:35:58 -07:00
Jakub Novak 260ab1dbed Fix wrong file reference to old docs folder 2024-07-18 10:30:07 +02:00
Jakub Novák 388309830b New infra (#212)
Co-authored-by: Tomas Valenta <valenta.and.thomas@gmail.com>
Co-authored-by: Vasek Mlejnsky <vasek.mlejnsky@gmail.com>
2023-11-06 15:07:09 +01:00
Vasek Mlejnsky 104bbf3960 New version of docs (#206) 2023-10-25 22:58:05 -07:00
Jakub Novak d1c6854e9b Split Release action into multiple jobs 2023-10-02 15:51:00 +02:00
Pavel 'Strajk' Dolecek b314054aaf bump 2023-09-27 11:04:11 +02:00
Jakub Novak 426ded3a7c Fix release pipeline
Test CLI / Build CLI (push) Has been cancelled
2023-09-25 13:46:05 +02:00
Pavel 'Strajk' Dolecek 631ee32166 chore: pnpm fixes 2023-09-21 18:05:39 +02:00
Pavel 'Strajk' Dolecek f55da2d86c chore: npm → pnpm (#154) 2023-09-21 17:45:35 +02:00
Vasek Mlejnsky 2345e4933a (docs) Add docs for reading and writing bytes 2023-09-21 15:45:29 +02:00
Vasek Mlejnsky bd7312fdbc Fix eslint errors 2023-09-21 13:57:45 +02:00
Pavel 'Strajk' Dolecek 91c5d6cf21 chore: Linting cleanup (#152) 2023-09-20 11:21:23 +02:00
Pavel 'Strajk' Dolecek 01e9507418 chore(js-sdk): rollup replace problematic json plugin (#129) 2023-09-14 12:51:07 +02:00
Jakub Novák e894b4958f [E2B-286] - Run release GHA only when really releasing (#114)
Co-authored-by: Tomas Valenta <valenta.and.thomas@gmail.com>
2023-09-06 11:41:48 +02:00
Tomas Valenta f104747510 Switch back to unconditional releasing 2023-08-30 20:23:09 +02:00
Tomas Valenta ae066344b5 Switch to new GHA syntax 2023-08-30 18:50:16 +02:00
Tomas Valenta 00b98442b4 Add gh version script 2023-08-30 18:33:38 +02:00
Jakub Novák 250ffc69c9 Periodic E2E tests of our infra via calling sdks (#92) 2023-08-28 18:29:48 +02:00
Jakub Novák d84073042f Monorepo releasing (#79) 2023-08-23 11:50:04 +02:00
Tomas Valenta 55560bd096 Reorganize repo 2023-08-14 14:32:42 +02:00
Tomas Valenta 2a5bc7de71 Cleanup 2023-07-01 17:08:01 -07:00