@paperclipai/plugin-e2b 2026.425.0-canary.6 → 2026.426.0-canary.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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +4 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +51 -0
- package/dist/manifest.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +300 -0
- package/dist/plugin.js.map +1 -0
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +5 -0
- package/dist/worker.js.map +1 -0
- package/package.json +2 -2
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAKzE,QAAA,MAAM,QAAQ,EAAE,yBAiDf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
const PLUGIN_ID = "paperclip.e2b-sandbox-provider";
|
|
2
|
+
const PLUGIN_VERSION = "0.1.0";
|
|
3
|
+
const manifest = {
|
|
4
|
+
id: PLUGIN_ID,
|
|
5
|
+
apiVersion: 1,
|
|
6
|
+
version: PLUGIN_VERSION,
|
|
7
|
+
displayName: "E2B Sandbox Provider",
|
|
8
|
+
description: "First-party sandbox provider plugin that provisions E2B cloud sandboxes as Paperclip execution environments.",
|
|
9
|
+
author: "Paperclip",
|
|
10
|
+
categories: ["automation"],
|
|
11
|
+
capabilities: ["environment.drivers.register"],
|
|
12
|
+
entrypoints: {
|
|
13
|
+
worker: "./dist/worker.js",
|
|
14
|
+
},
|
|
15
|
+
environmentDrivers: [
|
|
16
|
+
{
|
|
17
|
+
driverKey: "e2b",
|
|
18
|
+
kind: "sandbox_provider",
|
|
19
|
+
displayName: "E2B Cloud Sandbox",
|
|
20
|
+
description: "Provisions E2B cloud sandboxes with configurable templates, timeouts, and lease reuse.",
|
|
21
|
+
configSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
template: {
|
|
25
|
+
type: "string",
|
|
26
|
+
description: "E2B sandbox template name.",
|
|
27
|
+
default: "base",
|
|
28
|
+
},
|
|
29
|
+
apiKey: {
|
|
30
|
+
type: "string",
|
|
31
|
+
format: "secret-ref",
|
|
32
|
+
description: "Paperclip secret reference for the E2B API key. Falls back to E2B_API_KEY if omitted.",
|
|
33
|
+
},
|
|
34
|
+
timeoutMs: {
|
|
35
|
+
type: "number",
|
|
36
|
+
description: "Sandbox timeout in milliseconds.",
|
|
37
|
+
default: 300000,
|
|
38
|
+
},
|
|
39
|
+
reuseLease: {
|
|
40
|
+
type: "boolean",
|
|
41
|
+
description: "Whether to pause and reuse sandboxes across runs.",
|
|
42
|
+
default: false,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
required: ["template"],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
export default manifest;
|
|
51
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,gCAAgC,CAAC;AACnD,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,MAAM,QAAQ,GAA8B;IAC1C,EAAE,EAAE,SAAS;IACb,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,sBAAsB;IACnC,WAAW,EACT,8GAA8G;IAChH,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,CAAC,YAAY,CAAC;IAC1B,YAAY,EAAE,CAAC,8BAA8B,CAAC;IAC9C,WAAW,EAAE;QACX,MAAM,EAAE,kBAAkB;KAC3B;IACD,kBAAkB,EAAE;QAClB;YACE,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,mBAAmB;YAChC,WAAW,EACT,wFAAwF;YAC1F,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4BAA4B;wBACzC,OAAO,EAAE,MAAM;qBAChB;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,YAAY;wBACpB,WAAW,EACT,uFAAuF;qBAC1F;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,kCAAkC;wBAC/C,OAAO,EAAE,MAAM;qBAChB;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,SAAS;wBACf,WAAW,EAAE,mDAAmD;wBAChE,OAAO,EAAE,KAAK;qBACf;iBACF;gBACD,QAAQ,EAAE,CAAC,UAAU,CAAC;aACvB;SACF;KACF;CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AA6IA,QAAA,MAAM,MAAM,mDAmOV,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { CommandExitError, Sandbox, SandboxNotFoundError, TimeoutError } from "e2b";
|
|
3
|
+
import { definePlugin } from "@paperclipai/plugin-sdk";
|
|
4
|
+
function parseDriverConfig(raw) {
|
|
5
|
+
const template = typeof raw.template === "string" && raw.template.trim().length > 0
|
|
6
|
+
? raw.template.trim()
|
|
7
|
+
: "base";
|
|
8
|
+
const timeoutMs = Number(raw.timeoutMs ?? 300_000);
|
|
9
|
+
return {
|
|
10
|
+
template,
|
|
11
|
+
apiKey: typeof raw.apiKey === "string" && raw.apiKey.trim().length > 0 ? raw.apiKey.trim() : null,
|
|
12
|
+
timeoutMs: Number.isFinite(timeoutMs) ? Math.trunc(timeoutMs) : 300_000,
|
|
13
|
+
reuseLease: raw.reuseLease === true,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function resolveApiKey(config) {
|
|
17
|
+
if (config.apiKey) {
|
|
18
|
+
return config.apiKey;
|
|
19
|
+
}
|
|
20
|
+
const envApiKey = process.env.E2B_API_KEY?.trim() ?? "";
|
|
21
|
+
if (!envApiKey) {
|
|
22
|
+
throw new Error("E2B sandbox environments require an API key in config or E2B_API_KEY.");
|
|
23
|
+
}
|
|
24
|
+
return envApiKey;
|
|
25
|
+
}
|
|
26
|
+
async function createSandbox(config) {
|
|
27
|
+
const options = {
|
|
28
|
+
apiKey: resolveApiKey(config),
|
|
29
|
+
timeoutMs: config.timeoutMs,
|
|
30
|
+
metadata: {
|
|
31
|
+
paperclipProvider: "e2b",
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
return await Sandbox.create(config.template, options);
|
|
35
|
+
}
|
|
36
|
+
function formatErrorMessage(error) {
|
|
37
|
+
return error instanceof Error ? error.message : String(error);
|
|
38
|
+
}
|
|
39
|
+
async function ensureSandboxWorkspace(sandbox, remoteCwd) {
|
|
40
|
+
await sandbox.commands.run(`mkdir -p ${shellQuote(remoteCwd)}`);
|
|
41
|
+
}
|
|
42
|
+
async function resolveSandboxWorkingDirectory(sandbox) {
|
|
43
|
+
const result = await sandbox.commands.run("pwd");
|
|
44
|
+
const cwd = result.stdout.trim();
|
|
45
|
+
const remoteCwd = path.posix.join(cwd.length > 0 ? cwd : "/", "paperclip-workspace");
|
|
46
|
+
await ensureSandboxWorkspace(sandbox, remoteCwd);
|
|
47
|
+
return remoteCwd;
|
|
48
|
+
}
|
|
49
|
+
async function connectSandbox(config, providerLeaseId) {
|
|
50
|
+
return await Sandbox.connect(providerLeaseId, {
|
|
51
|
+
apiKey: resolveApiKey(config),
|
|
52
|
+
timeoutMs: config.timeoutMs,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async function connectForCleanup(config, providerLeaseId) {
|
|
56
|
+
try {
|
|
57
|
+
return await connectSandbox(config, providerLeaseId);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (error instanceof SandboxNotFoundError)
|
|
61
|
+
return null;
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function leaseMetadata(input) {
|
|
66
|
+
return {
|
|
67
|
+
provider: "e2b",
|
|
68
|
+
template: input.config.template,
|
|
69
|
+
timeoutMs: input.config.timeoutMs,
|
|
70
|
+
reuseLease: input.config.reuseLease,
|
|
71
|
+
sandboxId: input.sandbox.sandboxId,
|
|
72
|
+
sandboxDomain: input.sandbox.sandboxDomain,
|
|
73
|
+
remoteCwd: input.remoteCwd,
|
|
74
|
+
resumedLease: input.resumedLease,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function shellQuote(value) {
|
|
78
|
+
return `'${value.replace(/'/g, `'"'"'`)}'`;
|
|
79
|
+
}
|
|
80
|
+
function buildCommandLine(command, args = []) {
|
|
81
|
+
return `exec ${[command, ...args].map(shellQuote).join(" ")}`;
|
|
82
|
+
}
|
|
83
|
+
async function killSandboxBestEffort(sandbox, reason) {
|
|
84
|
+
await sandbox.kill().catch((error) => {
|
|
85
|
+
console.warn(`Failed to kill E2B sandbox during ${reason}: ${formatErrorMessage(error)}`);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
async function releaseSandboxBestEffort(sandbox, reuseLease) {
|
|
89
|
+
if (!reuseLease) {
|
|
90
|
+
await killSandboxBestEffort(sandbox, "lease release");
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
await sandbox.pause();
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.warn(`Failed to pause E2B sandbox during lease release: ${formatErrorMessage(error)}. Attempting kill instead.`);
|
|
98
|
+
await killSandboxBestEffort(sandbox, "lease release fallback cleanup");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const plugin = definePlugin({
|
|
102
|
+
async setup(ctx) {
|
|
103
|
+
ctx.logger.info("E2B sandbox provider plugin ready");
|
|
104
|
+
},
|
|
105
|
+
async onHealth() {
|
|
106
|
+
return { status: "ok", message: "E2B sandbox provider plugin healthy" };
|
|
107
|
+
},
|
|
108
|
+
async onEnvironmentValidateConfig(params) {
|
|
109
|
+
const config = parseDriverConfig(params.config);
|
|
110
|
+
const errors = [];
|
|
111
|
+
if (typeof params.config.template === "string" && params.config.template.trim().length === 0) {
|
|
112
|
+
errors.push("E2B sandbox environments require a template.");
|
|
113
|
+
}
|
|
114
|
+
if (config.timeoutMs < 1 || config.timeoutMs > 86_400_000) {
|
|
115
|
+
errors.push("timeoutMs must be between 1 and 86400000.");
|
|
116
|
+
}
|
|
117
|
+
if (errors.length > 0) {
|
|
118
|
+
return { ok: false, errors };
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
ok: true,
|
|
122
|
+
normalizedConfig: { ...config },
|
|
123
|
+
};
|
|
124
|
+
},
|
|
125
|
+
async onEnvironmentProbe(params) {
|
|
126
|
+
const config = parseDriverConfig(params.config);
|
|
127
|
+
try {
|
|
128
|
+
const sandbox = await createSandbox(config);
|
|
129
|
+
try {
|
|
130
|
+
await sandbox.setTimeout(config.timeoutMs);
|
|
131
|
+
const remoteCwd = await resolveSandboxWorkingDirectory(sandbox);
|
|
132
|
+
return {
|
|
133
|
+
ok: true,
|
|
134
|
+
summary: `Connected to E2B sandbox template ${config.template}.`,
|
|
135
|
+
metadata: {
|
|
136
|
+
provider: "e2b",
|
|
137
|
+
template: config.template,
|
|
138
|
+
timeoutMs: config.timeoutMs,
|
|
139
|
+
reuseLease: config.reuseLease,
|
|
140
|
+
sandboxId: sandbox.sandboxId,
|
|
141
|
+
sandboxDomain: sandbox.sandboxDomain,
|
|
142
|
+
remoteCwd,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
await sandbox.kill().catch(() => undefined);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
152
|
+
return {
|
|
153
|
+
ok: false,
|
|
154
|
+
summary: `E2B sandbox probe failed for template ${config.template}.`,
|
|
155
|
+
metadata: {
|
|
156
|
+
provider: "e2b",
|
|
157
|
+
template: config.template,
|
|
158
|
+
timeoutMs: config.timeoutMs,
|
|
159
|
+
reuseLease: config.reuseLease,
|
|
160
|
+
error: message,
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
async onEnvironmentAcquireLease(params) {
|
|
166
|
+
const config = parseDriverConfig(params.config);
|
|
167
|
+
const sandbox = await createSandbox(config);
|
|
168
|
+
try {
|
|
169
|
+
await sandbox.setTimeout(config.timeoutMs);
|
|
170
|
+
const remoteCwd = await resolveSandboxWorkingDirectory(sandbox);
|
|
171
|
+
return {
|
|
172
|
+
providerLeaseId: sandbox.sandboxId,
|
|
173
|
+
metadata: leaseMetadata({ config, sandbox, remoteCwd, resumedLease: false }),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
await sandbox.kill().catch(() => undefined);
|
|
178
|
+
throw error;
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
async onEnvironmentResumeLease(params) {
|
|
182
|
+
const config = parseDriverConfig(params.config);
|
|
183
|
+
try {
|
|
184
|
+
const sandbox = await connectSandbox(config, params.providerLeaseId);
|
|
185
|
+
try {
|
|
186
|
+
await sandbox.setTimeout(config.timeoutMs);
|
|
187
|
+
const remoteCwd = await resolveSandboxWorkingDirectory(sandbox);
|
|
188
|
+
return {
|
|
189
|
+
providerLeaseId: sandbox.sandboxId,
|
|
190
|
+
metadata: leaseMetadata({ config, sandbox, remoteCwd, resumedLease: true }),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
await sandbox.kill().catch(() => undefined);
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
if (error instanceof SandboxNotFoundError) {
|
|
200
|
+
return { providerLeaseId: null, metadata: { expired: true } };
|
|
201
|
+
}
|
|
202
|
+
throw error;
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
async onEnvironmentReleaseLease(params) {
|
|
206
|
+
if (!params.providerLeaseId)
|
|
207
|
+
return;
|
|
208
|
+
const config = parseDriverConfig(params.config);
|
|
209
|
+
const sandbox = await connectForCleanup(config, params.providerLeaseId);
|
|
210
|
+
if (!sandbox)
|
|
211
|
+
return;
|
|
212
|
+
await releaseSandboxBestEffort(sandbox, config.reuseLease);
|
|
213
|
+
},
|
|
214
|
+
async onEnvironmentDestroyLease(params) {
|
|
215
|
+
if (!params.providerLeaseId)
|
|
216
|
+
return;
|
|
217
|
+
const config = parseDriverConfig(params.config);
|
|
218
|
+
const sandbox = await connectForCleanup(config, params.providerLeaseId);
|
|
219
|
+
if (!sandbox)
|
|
220
|
+
return;
|
|
221
|
+
await killSandboxBestEffort(sandbox, "lease destroy");
|
|
222
|
+
},
|
|
223
|
+
async onEnvironmentRealizeWorkspace(params) {
|
|
224
|
+
const config = parseDriverConfig(params.config);
|
|
225
|
+
const remoteCwd = typeof params.lease.metadata?.remoteCwd === "string" &&
|
|
226
|
+
params.lease.metadata.remoteCwd.trim().length > 0
|
|
227
|
+
? params.lease.metadata.remoteCwd.trim()
|
|
228
|
+
: params.workspace.remotePath ?? params.workspace.localPath ?? "/paperclip-workspace";
|
|
229
|
+
if (params.lease.providerLeaseId) {
|
|
230
|
+
const sandbox = await connectSandbox(config, params.lease.providerLeaseId);
|
|
231
|
+
await ensureSandboxWorkspace(sandbox, remoteCwd);
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
cwd: remoteCwd,
|
|
235
|
+
metadata: {
|
|
236
|
+
provider: "e2b",
|
|
237
|
+
remoteCwd,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
},
|
|
241
|
+
async onEnvironmentExecute(params) {
|
|
242
|
+
if (!params.lease.providerLeaseId) {
|
|
243
|
+
return {
|
|
244
|
+
exitCode: 1,
|
|
245
|
+
timedOut: false,
|
|
246
|
+
stdout: "",
|
|
247
|
+
stderr: "No provider lease ID available for execution.",
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
const config = parseDriverConfig(params.config);
|
|
251
|
+
const sandbox = await connectSandbox(config, params.lease.providerLeaseId);
|
|
252
|
+
const started = await sandbox.commands.run(buildCommandLine(params.command, params.args), {
|
|
253
|
+
background: true,
|
|
254
|
+
stdin: params.stdin != null,
|
|
255
|
+
cwd: params.cwd,
|
|
256
|
+
envs: params.env,
|
|
257
|
+
timeoutMs: params.timeoutMs ?? config.timeoutMs,
|
|
258
|
+
});
|
|
259
|
+
try {
|
|
260
|
+
if (params.stdin != null) {
|
|
261
|
+
try {
|
|
262
|
+
await sandbox.commands.sendStdin(started.pid, params.stdin);
|
|
263
|
+
}
|
|
264
|
+
finally {
|
|
265
|
+
await sandbox.commands.closeStdin(started.pid);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const result = await started.wait();
|
|
269
|
+
return {
|
|
270
|
+
exitCode: result.exitCode,
|
|
271
|
+
timedOut: false,
|
|
272
|
+
stdout: result.stdout,
|
|
273
|
+
stderr: result.stderr,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
if (error instanceof CommandExitError) {
|
|
278
|
+
const commandError = error;
|
|
279
|
+
return {
|
|
280
|
+
exitCode: commandError.exitCode,
|
|
281
|
+
timedOut: false,
|
|
282
|
+
stdout: commandError.stdout,
|
|
283
|
+
stderr: commandError.stderr,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
if (error instanceof TimeoutError) {
|
|
287
|
+
const timeoutError = error;
|
|
288
|
+
return {
|
|
289
|
+
exitCode: null,
|
|
290
|
+
timedOut: true,
|
|
291
|
+
stdout: started.stdout,
|
|
292
|
+
stderr: started.stderr || `${timeoutError.message}\n`,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
throw error;
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
export default plugin;
|
|
300
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAwBvD,SAAS,iBAAiB,CAAC,GAA4B;IACrD,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACjF,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QACrB,CAAC,CAAC,MAAM,CAAC;IACX,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;IACnD,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QACjG,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO;QACvE,UAAU,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAuB;IAC5C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAuB;IAClD,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE;YACR,iBAAiB,EAAE,KAAK;SACzB;KACF,CAAC;IACF,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,OAAgB,EAAE,SAAiB;IACvE,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,8BAA8B,CAAC,OAAgB;IAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IACrF,MAAM,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,eAAuB;IAC5E,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE;QAC5C,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,MAAuB,EAAE,eAAuB;IAC/E,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,oBAAoB;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAKtB;IACC,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;QAC/B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;QACjC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;QACnC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;QAClC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa;QAC1C,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,OAAiB,EAAE;IAC5D,OAAO,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,OAAgB,EAAE,MAAc;IACnE,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACnC,OAAO,CAAC,IAAI,CAAC,qCAAqC,MAAM,KAAK,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAAgB,EAAE,UAAmB;IAC3E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,qBAAqB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,qDAAqD,kBAAkB,CAAC,KAAK,CAAC,4BAA4B,CAC3G,CAAC;QACF,MAAM,qBAAqB,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,GAAG;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,2BAA2B,CAC/B,MAA6C;QAE7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7F,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,GAAG,UAAU,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,gBAAgB,EAAE,EAAE,GAAG,MAAM,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAoC;QAEpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC3C,MAAM,SAAS,GAAG,MAAM,8BAA8B,CAAC,OAAO,CAAC,CAAC;gBAChE,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,qCAAqC,MAAM,CAAC,QAAQ,GAAG;oBAChE,QAAQ,EAAE;wBACR,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;wBACpC,SAAS;qBACV;iBACF,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,yCAAyC,MAAM,CAAC,QAAQ,GAAG;gBACpE,QAAQ,EAAE;oBACR,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,KAAK,EAAE,OAAO;iBACf;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAA2C;QAE3C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,8BAA8B,CAAC,OAAO,CAAC,CAAC;YAEhE,OAAO;gBACL,eAAe,EAAE,OAAO,CAAC,SAAS;gBAClC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,MAA0C;QAE1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;YACrE,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC3C,MAAM,SAAS,GAAG,MAAM,8BAA8B,CAAC,OAAO,CAAC,CAAC;gBAEhE,OAAO;oBACL,eAAe,EAAE,OAAO,CAAC,SAAS;oBAClC,QAAQ,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;iBAC5E,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;gBAC1C,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YAChE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAA2C;QAE3C,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO;QACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC7B,MAA2C;QAE3C,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO;QACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,qBAAqB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,6BAA6B,CACjC,MAA+C;QAE/C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,KAAK,QAAQ;YACpD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAC/C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;YACxC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,sBAAsB,CAAC;QAE1F,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC3E,MAAM,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;QAED,OAAO;YACL,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE;gBACR,QAAQ,EAAE,KAAK;gBACf,SAAS;aACV;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,MAAsC;QAEtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAClC,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,+CAA+C;aACxD,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;YACxF,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;YAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,GAAG;YAChB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;SAChD,CAKA,CAAC;QAEF,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9D,CAAC;wBAAS,CAAC;oBACT,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACtC,MAAM,YAAY,GAAG,KAAyB,CAAC;gBAC/C,OAAO;oBACL,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,MAAM,EAAE,YAAY,CAAC,MAAM;iBAC5B,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG,KAAqB,CAAC;gBAC3C,OAAO;oBACL,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,IAAI;iBACtD,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
package/dist/worker.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,eAAe,MAAM,CAAC"}
|
package/dist/worker.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,eAAe,MAAM,CAAC;AACtB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paperclipai/plugin-e2b",
|
|
3
|
-
"version": "2026.
|
|
3
|
+
"version": "2026.426.0-canary.0",
|
|
4
4
|
"description": "E2B sandbox provider plugin for Paperclip environments",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/paperclipai/paperclip",
|
|
@@ -39,6 +39,6 @@
|
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"e2b": "^2.19.0",
|
|
42
|
-
"@paperclipai/plugin-sdk": "2026.
|
|
42
|
+
"@paperclipai/plugin-sdk": "2026.426.0-canary.0"
|
|
43
43
|
}
|
|
44
44
|
}
|