@mastra/e2b 0.10.0-alpha.4 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/dist/index.cjs +39 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +39 -22
- package/dist/index.js.map +1 -1
- package/dist/sandbox/index.d.ts +28 -9
- package/dist/sandbox/index.d.ts.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,58 @@
|
|
|
1
1
|
# @mastra/e2b
|
|
2
2
|
|
|
3
|
+
## 0.10.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added deterministic reattach to E2B sandboxes by provider sandbox ID. Pass the persisted E2B sandbox ID via the new `sandboxId` option (or `clone({ sandboxId })`) and `start()` connects to that exact sandbox — resuming it if paused — instead of discovering by logical id metadata. Only a typed "sandbox gone" error falls back to the usual lookup-or-create path; auth, quota, rate-limit, timeout, and network errors now propagate instead of silently creating a duplicate sandbox. The resolved provider ID is exposed via the new `sandbox.sandboxId` property so it can be persisted across restarts. ([#22316](https://github.com/mastra-ai/mastra/pull/22316))
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
const sandbox = new E2BSandbox({ id: 'my-workspace', sandboxId: persistedId });
|
|
11
|
+
await sandbox.start();
|
|
12
|
+
await save(sandbox.sandboxId); // persist for the next process
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Fixes https://github.com/mastra-ai/mastra/issues/22300
|
|
16
|
+
|
|
17
|
+
- Added a `lifecycle` option to `E2BSandbox` so you can choose what happens when a sandbox times out. Sandboxes still pause by default and resume on next use; pass `{ onTimeout: 'kill' }` to destroy idle sandboxes instead, which suits workspaces whose data is stored outside the sandbox. ([#22120](https://github.com/mastra-ai/mastra/pull/22120))
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Fixed E2B sandbox recovery so configured mounts that previously errored are retried after the physical sandbox is replaced. ([#22169](https://github.com/mastra-ai/mastra/pull/22169))
|
|
22
|
+
|
|
23
|
+
- Starting a sandbox now reports whether it created a fresh sandbox or reconnected to an existing one, so an `onStart` handler can run first-time setup only when it's actually needed: ([#21984](https://github.com/mastra-ai/mastra/pull/21984))
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
new E2BSandbox({
|
|
27
|
+
id: 'session-1',
|
|
28
|
+
onStart: async ({ outcome }) => {
|
|
29
|
+
if (outcome === 'created') await cloneRepo();
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- Fixed automatic sandbox recovery when E2B reports an ID-specific missing sandbox. ([#22215](https://github.com/mastra-ai/mastra/pull/22215))
|
|
35
|
+
|
|
36
|
+
- Improved `E2BSandbox` extensibility by adding protected SDK creation, connection, and template resolution hooks. Providers built on E2B can now select a specialized SDK sandbox without changing existing E2B behavior. ([#21707](https://github.com/mastra-ai/mastra/pull/21707))
|
|
37
|
+
|
|
38
|
+
- Honor the sandbox runtime environment (`setEnv()`/`getEnv()` from `@mastra/core`) in every workspace sandbox provider. Environment variables set after construction now reach subsequent commands on all providers: ([#22250](https://github.com/mastra-ai/mastra/pull/22250))
|
|
39
|
+
|
|
40
|
+
- Process-manager-routed providers (E2B, Blaxel, Cloudflare, Daytona, Docker, Modal, Vercel microVM spawns) inherit the merge from the core spawn wrapper; their duplicated per-manager env plumbing is removed.
|
|
41
|
+
- Providers with their own exec transports (AgentCore, Apple Container, Railway, Vercel microVM and serverless `executeCommand`, Platform's private-network, WebSocket lease, and E2B lease paths) now merge `getEnv()` under per-call env.
|
|
42
|
+
|
|
43
|
+
Constructor `env` continues to behave as before: it seeds the sandbox runtime environment, and providers that bake env into the VM or container at creation time (Docker, Modal, Railway, Apple Container, Vercel, Platform) still do so. Per-call `env` on `executeCommand` still takes precedence for that command only.
|
|
44
|
+
|
|
45
|
+
Removed exported types (minor bump for these two packages): `BlaxelProcessManagerOptions` from `@mastra/blaxel` and `RailwayProcessManagerOptions` from `@mastra/railway`. Both existed only to pass `env` into a process manager constructed by hand; the core spawn wrapper now owns that merge, so the option and its type are gone.
|
|
46
|
+
|
|
47
|
+
- Updated dependencies [[`79f04a7`](https://github.com/mastra-ai/mastra/commit/79f04a7f6c6829da541139f638f2f1d267916e08), [`65edab1`](https://github.com/mastra-ai/mastra/commit/65edab1c233d17b8f163bad12fca410d0e6f16b1), [`1e47b75`](https://github.com/mastra-ai/mastra/commit/1e47b7520cab4cfaa8daed52f17e2e6d14ff7539), [`ab20a38`](https://github.com/mastra-ai/mastra/commit/ab20a38d0275f8d85e0f3833bd87ef487bcc609f), [`fd4d5fe`](https://github.com/mastra-ai/mastra/commit/fd4d5fe4f943699b85db5e74404f190d5a6b8c2a), [`ae8790c`](https://github.com/mastra-ai/mastra/commit/ae8790c4bfaa088d2ab279d1dcc06f326b9fd109), [`2c85f42`](https://github.com/mastra-ai/mastra/commit/2c85f428e04ccd63ea31a7ec80b5b327afdad555), [`11bbeb9`](https://github.com/mastra-ai/mastra/commit/11bbeb9b108ef2264e05acefc6dafb9cbb342921), [`48ef1f1`](https://github.com/mastra-ai/mastra/commit/48ef1f1d24eedafbb07f64e659a81b52b67b8bf6), [`aa3a85d`](https://github.com/mastra-ai/mastra/commit/aa3a85daf094c683bb97efdf4b6a696d2e474af5), [`d29d06f`](https://github.com/mastra-ai/mastra/commit/d29d06fe00bbd35b4571150ea04c59d2ed783c71), [`e6516df`](https://github.com/mastra-ai/mastra/commit/e6516dfcdae4f4ac0e7971d84359a81385ee602f), [`1a485f3`](https://github.com/mastra-ai/mastra/commit/1a485f3538f5ec64d58bd8b5e1e99de0c695c87b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`8661d7d`](https://github.com/mastra-ai/mastra/commit/8661d7d7179f0a024456aabdd8679bcecd09ac28), [`dbbfeb8`](https://github.com/mastra-ai/mastra/commit/dbbfeb85ec949dc9ebc0755e1ad262e4f5eba8db), [`575e343`](https://github.com/mastra-ai/mastra/commit/575e343900451021d96110916497d334af7bc252), [`0b2a3d1`](https://github.com/mastra-ai/mastra/commit/0b2a3d1783875c5b97b7b36ab3d03d7360e0dde7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`3cc9d00`](https://github.com/mastra-ai/mastra/commit/3cc9d00b2b4333e0377a5e9df5eff92c17ce7630), [`cacb839`](https://github.com/mastra-ai/mastra/commit/cacb8392d9e74189b56d857290b0615f98a2683d), [`57de7d6`](https://github.com/mastra-ai/mastra/commit/57de7d644ba7146edb4e9e6111ec4fa98c3a59e9), [`c8e4cea`](https://github.com/mastra-ai/mastra/commit/c8e4ceac9a390d78c8327dff3cdb2861dd71957f), [`ed01e9a`](https://github.com/mastra-ai/mastra/commit/ed01e9a807514a904374bf687a7b8f18750f6f78), [`b47b26e`](https://github.com/mastra-ai/mastra/commit/b47b26e6fe95cb8a3482be2c5e52de157fe59d0b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`733a537`](https://github.com/mastra-ai/mastra/commit/733a537489a858b5880b2e98809334fba895a221), [`e8e299c`](https://github.com/mastra-ai/mastra/commit/e8e299cc6abdfc39947e2fec25803493015d3882), [`edfc548`](https://github.com/mastra-ai/mastra/commit/edfc548886bc7bae17b681f8b6b41a47eb32bcd2), [`b05f486`](https://github.com/mastra-ai/mastra/commit/b05f48612984d5fe2447ea2d6cdd5c604d285b97), [`a8a4871`](https://github.com/mastra-ai/mastra/commit/a8a4871215f51da95c47129602157ce5372f634a), [`eb9ecaa`](https://github.com/mastra-ai/mastra/commit/eb9ecaa89c36e889749e3b825cfc507ce7f7980b), [`4ff3ee2`](https://github.com/mastra-ai/mastra/commit/4ff3ee2bff7ed07528b4817f8f49639031c72a4d), [`9207dfa`](https://github.com/mastra-ai/mastra/commit/9207dfab8062e5fc68b751684797ff86fe0b4e70), [`5165cdc`](https://github.com/mastra-ai/mastra/commit/5165cdcdcf50e144bb8113278535196cc9b07065), [`e737014`](https://github.com/mastra-ai/mastra/commit/e737014e0fc7035759762bb5b48baef1d6c0f6a7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`f591643`](https://github.com/mastra-ai/mastra/commit/f591643becdf0be9bddce6ba1748e64bc30d77f1), [`63796ba`](https://github.com/mastra-ai/mastra/commit/63796ba0fda60253be17535e68f6bbbf1e6ffa09), [`b1ad324`](https://github.com/mastra-ai/mastra/commit/b1ad324d657f3544b0701332aef7eb10e9a36258), [`61c566d`](https://github.com/mastra-ai/mastra/commit/61c566dd2f2cde2b23ed8f139924e530d4202214), [`c24754c`](https://github.com/mastra-ai/mastra/commit/c24754c1fb6fe144e5051e536e98c8a18b0214ac), [`12c61d2`](https://github.com/mastra-ai/mastra/commit/12c61d280c8cb208bc3c8dbcbe5dcc60cf9d1cd0), [`c46eb09`](https://github.com/mastra-ai/mastra/commit/c46eb09ce4987509af57a0ac582c61241a6dd2f1), [`9ee8120`](https://github.com/mastra-ai/mastra/commit/9ee8120ce17f76b9f617489e05a283353742690a), [`d975e92`](https://github.com/mastra-ai/mastra/commit/d975e924d4936f46c386bd3dee39c671720289f6), [`45dd6ee`](https://github.com/mastra-ai/mastra/commit/45dd6ee089bd7df0d0c98a10098e483fd388e04a), [`4e9a228`](https://github.com/mastra-ai/mastra/commit/4e9a2283d5fd6ed1b70a2751eb3dc2cbf82ada20), [`d6ce34a`](https://github.com/mastra-ai/mastra/commit/d6ce34aeceb06ddf3d595a1eed5cc74f481a46a1), [`f95f468`](https://github.com/mastra-ai/mastra/commit/f95f468cf1e7c2b924a13826494f98b8f2ccd581), [`30ed33e`](https://github.com/mastra-ai/mastra/commit/30ed33ee14084a26019aba15fceadda6d6ddefaf), [`04a815f`](https://github.com/mastra-ai/mastra/commit/04a815fc8971d29e97fcdcc5008a1eb472fc00ff), [`1cfa878`](https://github.com/mastra-ai/mastra/commit/1cfa8784d8da0dfaa0317e5048bc48b6084a5ea5), [`9a12ef3`](https://github.com/mastra-ai/mastra/commit/9a12ef3fccf3f4186db0f294f4ee1f02cf4d8db2), [`32d3583`](https://github.com/mastra-ai/mastra/commit/32d358332cb8ac2306b83b73cf3536e74dbd435e), [`7960688`](https://github.com/mastra-ai/mastra/commit/7960688828e04eaf3106e34f7758fa580257eef6), [`91ad69d`](https://github.com/mastra-ai/mastra/commit/91ad69d64994c89199b0c55399e64ed91c61df2f), [`8dc408d`](https://github.com/mastra-ai/mastra/commit/8dc408d34438f9e13297f792c11a5cfd6cf952e1), [`c92def1`](https://github.com/mastra-ai/mastra/commit/c92def10a13c822972c96f0a4ca6ffc1f4258aed), [`63041eb`](https://github.com/mastra-ai/mastra/commit/63041eb4c50b520a0a80e03d4cd6ea99f67715a0), [`c118318`](https://github.com/mastra-ai/mastra/commit/c1183181c9804303db4b511c2e2648f8b714712b), [`c5eaec5`](https://github.com/mastra-ai/mastra/commit/c5eaec5a860d80d0e3805e67db0414b87ac8cbed), [`fc07c64`](https://github.com/mastra-ai/mastra/commit/fc07c6465043e08e99193a6751a01c56ffc2e7a1), [`cced745`](https://github.com/mastra-ai/mastra/commit/cced745a056ec2225c5bc702e32d848847aa8b65), [`542dee2`](https://github.com/mastra-ai/mastra/commit/542dee254167f974ff8cbbbfc0ce10f9a2616a7b), [`3c19dce`](https://github.com/mastra-ai/mastra/commit/3c19dcef8e73062a80627a4927eae3ec11145afd), [`aca2869`](https://github.com/mastra-ai/mastra/commit/aca2869b2031982f3c4a2f52525c9be7cf123ef8), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`e6f8450`](https://github.com/mastra-ai/mastra/commit/e6f845074d478527026b18d85031b23353e1d0a4), [`895e9df`](https://github.com/mastra-ai/mastra/commit/895e9dfc17d6f34299eca64e317ded9e5f5e5ef8), [`e66b2ba`](https://github.com/mastra-ai/mastra/commit/e66b2ba100db63eaeab6e21e1ea34b113f2ec781), [`3e8727e`](https://github.com/mastra-ai/mastra/commit/3e8727e11ec1a5d733acedb5c872896394be18c1)]:
|
|
48
|
+
- @mastra/core@1.62.0
|
|
49
|
+
|
|
50
|
+
## 0.10.0-alpha.5
|
|
51
|
+
|
|
52
|
+
### Patch Changes
|
|
53
|
+
|
|
54
|
+
- Improved `E2BSandbox` extensibility by adding protected SDK creation, connection, and template resolution hooks. Providers built on E2B can now select a specialized SDK sandbox without changing existing E2B behavior. ([#21707](https://github.com/mastra-ai/mastra/pull/21707))
|
|
55
|
+
|
|
3
56
|
## 0.10.0-alpha.4
|
|
4
57
|
|
|
5
58
|
### Minor Changes
|
package/dist/index.cjs
CHANGED
|
@@ -777,17 +777,19 @@ var E2BSandbox = class E2BSandbox extends _mastra_core_workspace.MastraSandbox {
|
|
|
777
777
|
resolvedTemplateId = await this.resolveTemplate();
|
|
778
778
|
}
|
|
779
779
|
this.logger.debug(`${LOG_PREFIX} Creating new sandbox for: ${this.id} with template: ${resolvedTemplateId}`);
|
|
780
|
+
const createOpts = {
|
|
781
|
+
...this.connectionOpts,
|
|
782
|
+
lifecycle: this.lifecycle,
|
|
783
|
+
metadata: {
|
|
784
|
+
...this.metadata,
|
|
785
|
+
"mastra-sandbox-id": this.id
|
|
786
|
+
},
|
|
787
|
+
...this.network && { network: this.network },
|
|
788
|
+
timeoutMs: this.timeout
|
|
789
|
+
};
|
|
790
|
+
let sdkSandbox;
|
|
780
791
|
try {
|
|
781
|
-
|
|
782
|
-
...this.connectionOpts,
|
|
783
|
-
lifecycle: this.lifecycle,
|
|
784
|
-
metadata: {
|
|
785
|
-
...this.metadata,
|
|
786
|
-
"mastra-sandbox-id": this.id
|
|
787
|
-
},
|
|
788
|
-
...this.network && { network: this.network },
|
|
789
|
-
timeoutMs: this.timeout
|
|
790
|
-
});
|
|
792
|
+
sdkSandbox = await this.createSdkSandbox(resolvedTemplateId, createOpts);
|
|
791
793
|
} catch (createError) {
|
|
792
794
|
const errorStr = String(createError);
|
|
793
795
|
if (errorStr.includes("404") && errorStr.includes("not found") && !this.templateSpec) {
|
|
@@ -795,19 +797,11 @@ var E2BSandbox = class E2BSandbox extends _mastra_core_workspace.MastraSandbox {
|
|
|
795
797
|
this._resolvedTemplateId = void 0;
|
|
796
798
|
const rebuiltTemplateId = await this.buildDefaultTemplate();
|
|
797
799
|
this.logger.debug(`${LOG_PREFIX} Retrying sandbox creation with rebuilt template: ${rebuiltTemplateId}`);
|
|
798
|
-
|
|
799
|
-
...this.connectionOpts,
|
|
800
|
-
lifecycle: this.lifecycle,
|
|
801
|
-
metadata: {
|
|
802
|
-
...this.metadata,
|
|
803
|
-
"mastra-sandbox-id": this.id
|
|
804
|
-
},
|
|
805
|
-
...this.network && { network: this.network },
|
|
806
|
-
timeoutMs: this.timeout
|
|
807
|
-
});
|
|
800
|
+
sdkSandbox = await this.createSdkSandbox(rebuiltTemplateId, createOpts);
|
|
808
801
|
} else throw createError;
|
|
809
802
|
}
|
|
810
|
-
this.
|
|
803
|
+
this._sandbox = sdkSandbox;
|
|
804
|
+
this.logger.debug(`${LOG_PREFIX} Created sandbox ${sdkSandbox.sandboxId} for logical ID: ${this.id}`);
|
|
811
805
|
this._createdAt = /* @__PURE__ */ new Date();
|
|
812
806
|
}
|
|
813
807
|
/**
|
|
@@ -1207,19 +1201,39 @@ var E2BSandbox = class E2BSandbox extends _mastra_core_workspace.MastraSandbox {
|
|
|
1207
1201
|
const info = await this.lookupExistingSandboxInfo();
|
|
1208
1202
|
if (!info) return null;
|
|
1209
1203
|
try {
|
|
1210
|
-
return await
|
|
1204
|
+
return await this.connectSdkSandbox(info.sandboxId, this.connectionOpts);
|
|
1211
1205
|
} catch (e) {
|
|
1212
1206
|
this.logger.debug(`${LOG_PREFIX} Error connecting to existing sandbox:`, e);
|
|
1213
1207
|
return null;
|
|
1214
1208
|
}
|
|
1215
1209
|
}
|
|
1216
1210
|
/**
|
|
1211
|
+
* Create a new SDK sandbox from a resolved template ID.
|
|
1212
|
+
*
|
|
1213
|
+
* Override point for providers layered on the E2B SDK whose `Sandbox`
|
|
1214
|
+
* class extends `e2b`'s (e.g. `@e2b/desktop`): override to call their
|
|
1215
|
+
* `Sandbox.create`. Connection options are already spread into `opts`.
|
|
1216
|
+
*/
|
|
1217
|
+
async createSdkSandbox(templateId, opts) {
|
|
1218
|
+
return e2b.Sandbox.create(templateId, opts);
|
|
1219
|
+
}
|
|
1220
|
+
/**
|
|
1221
|
+
* Connect to (and resume) an existing SDK sandbox by its E2B sandbox ID.
|
|
1222
|
+
* Override point — see {@link createSdkSandbox}.
|
|
1223
|
+
*/
|
|
1224
|
+
async connectSdkSandbox(sandboxId, opts) {
|
|
1225
|
+
return e2b.Sandbox.connect(sandboxId, opts);
|
|
1226
|
+
}
|
|
1227
|
+
/**
|
|
1217
1228
|
* Resolve the template specification to a template ID.
|
|
1218
1229
|
*
|
|
1219
1230
|
* - String: Use as-is (template ID)
|
|
1220
1231
|
* - TemplateBuilder: Build and return the template ID
|
|
1221
1232
|
* - Function: Apply to base mountable template, then build
|
|
1222
1233
|
* - undefined: Use default mountable template (cached)
|
|
1234
|
+
*
|
|
1235
|
+
* Override point: subclasses with a different default template (e.g.
|
|
1236
|
+
* desktop sandboxes) override this and {@link buildDefaultTemplate}.
|
|
1223
1237
|
*/
|
|
1224
1238
|
async resolveTemplate() {
|
|
1225
1239
|
if (this._resolvedTemplateId) return this._resolvedTemplateId;
|
|
@@ -1258,6 +1272,9 @@ var E2BSandbox = class E2BSandbox extends _mastra_core_workspace.MastraSandbox {
|
|
|
1258
1272
|
}
|
|
1259
1273
|
/**
|
|
1260
1274
|
* Build the default mountable template (bypasses exists check).
|
|
1275
|
+
*
|
|
1276
|
+
* Override point: called from the template-not-found retry path in
|
|
1277
|
+
* `start()` when no explicit template was configured.
|
|
1261
1278
|
*/
|
|
1262
1279
|
async buildDefaultTemplate() {
|
|
1263
1280
|
const { template, id } = createDefaultMountableTemplate();
|