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.

Conditionally save prefs and accept masked key

Only update apiKey/redactedApiKey and organizationId when present in
preferences. Relax organizationId validation to a string and allow a
masked apiKey (contains "**") for the daytona provider.

+10 -4
+6 -2
apps/api/src/xrpc/io/pocketenv/sandbox/putPreferences.ts
··· 138 138 .onConflictDoUpdate({ 139 139 target: [daytonaAuth.sandboxId, daytonaAuth.userId], 140 140 set: { 141 - apiKey: pref.apiKey!, 142 - redactedApiKey: pref.redactedApiKey!, 141 + ...(pref.apiKey 142 + ? { apiKey: pref.apiKey, redactedApiKey: pref.redactedApiKey! } 143 + : {}), 144 + ...(pref.organizationId 145 + ? { organizationId: pref.organizationId } 146 + : {}), 143 147 }, 144 148 }) 145 149 .execute();
+4 -2
apps/web/src/pages/settings/provider/Provider.tsx
··· 29 29 .object({ 30 30 provider: z.enum(["cloudflare", "daytona", "vercel", "deno", "sprites"]), 31 31 apiKey: z.string().optional(), 32 - organizationId: z.uuid().optional(), 32 + organizationId: z.string().optional(), 33 33 }) 34 34 .superRefine((data, ctx) => { 35 35 if (data.provider !== "cloudflare" && !data.apiKey?.trim()) { ··· 104 104 } 105 105 106 106 if (values.apiKey?.includes("**") && values.provider !== "cloudflare") { 107 - return; 107 + if (values.provider !== "daytona") { 108 + return; 109 + } 108 110 } 109 111 110 112 if (values.apiKey && !values.apiKey.includes("**")) {