the universal sandbox runtime for agents and humans. pocketenv.io
sandbox openclaw agent claude-code vercel-sandbox deno-sandbox cloudflare-sandbox atproto sprites daytona
7
fork

Configure Feed

Select the types of activity you want to include in your feed.

Use sandboxId property for sandboxes

Map sandboxId to the sandbox_id DB column in the schema and update
code to use sandboxId instead of sandbox_id across services

+12 -12
+1 -1
apps/api/src/tty/index.tsx
··· 76 76 ]); 77 77 78 78 const client = new SpritesClient(env.SPRITE_TOKEN); 79 - const sprite = client.sprite(sandbox.sandbox_id!); 79 + const sprite = client.sprite(sandbox.sandboxId!); 80 80 const cmd = sprite.spawn("bash", [], { 81 81 tty: true, 82 82 rows: 24,
+1 -1
apps/api/src/xrpc/io/pocketenv/sandbox/claimSandbox.ts
··· 28 28 and( 29 29 or( 30 30 eq(schema.sandboxes.id, params.id), 31 - eq(schema.sandboxes.sandbox_id, params.id), 31 + eq(schema.sandboxes.sandboxId, params.id), 32 32 ), 33 33 isNull(schema.sandboxes.userId), 34 34 ),
+9 -9
apps/sandbox/src/index.ts
··· 154 154 .update(sandboxes) 155 155 .set({ 156 156 status: "RUNNING", 157 - sandbox_id: sandboxId, 157 + sandboxId: sandboxId, 158 158 startedAt: new Date(), 159 159 vcpus: params.vcpus, 160 160 memory: params.memory, ··· 206 206 207 207 sandbox = await getSandboxById( 208 208 record.provider as Provider, 209 - record.sandbox_id!, 209 + record.sandboxId!, 210 210 ); 211 211 212 212 if (!sandbox) { ··· 219 219 .set({ 220 220 status: "RUNNING", 221 221 startedAt: new Date(), 222 - sandbox_id: 223 - record.provider === "deno" ? await sandbox.id() : record.sandbox_id, 222 + sandboxId: 223 + record.provider === "deno" ? await sandbox.id() : record.sandboxId, 224 224 }) 225 225 .where(eq(sandboxes.id, c.req.param("sandboxId"))) 226 226 .execute(); ··· 242 242 243 243 sandbox = await getSandboxById( 244 244 record.provider as Provider, 245 - record.sandbox_id!, 245 + record.sandboxId!, 246 246 ); 247 247 248 248 if (!sandbox) { ··· 273 273 274 274 sandbox = await getSandboxById( 275 275 record.provider as Provider, 276 - record.sandbox_id!, 276 + record.sandboxId!, 277 277 ); 278 278 279 279 if (!sandbox) { ··· 300 300 301 301 sandbox = await getSandboxById( 302 302 record.provider as Provider, 303 - record.sandbox_id!, 303 + record.sandboxId!, 304 304 ); 305 305 306 306 if (!sandbox) { ··· 332 332 333 333 sandbox = await getSandboxById( 334 334 record.provider as Provider, 335 - record.sandbox_id!, 335 + record.sandboxId!, 336 336 ); 337 337 338 338 if (!sandbox) { ··· 346 346 const [record] = await db 347 347 .select() 348 348 .from(sandboxes) 349 - .where(or(eq(sandboxes.id, sandboxId), eq(sandboxes.sandbox_id, sandboxId))) 349 + .where(or(eq(sandboxes.id, sandboxId), eq(sandboxes.sandboxId, sandboxId))) 350 350 .execute(); 351 351 352 352 return record;
+1 -1
apps/sandbox/src/schema/sandboxes.ts
··· 31 31 status: text("status").notNull(), 32 32 keepAlive: boolean("keep_alive").default(false).notNull(), 33 33 sleepAfter: text("sleep_after"), 34 - sandbox_id: text("sandbox_id"), 34 + sandboxId: text("sandbox_id"), 35 35 installs: integer("installs").default(0).notNull(), 36 36 startedAt: timestamp("started_at"), 37 37 createdAt: timestamp("created_at").defaultNow().notNull(),