ai-sandbox: encrypt snapshot blobs at rest with an encrypting blob store wrapper
Los mantenedores suelen responder en 1 día
@AlemTuzlak ya está trabajando en esto.
Desde el 5/11/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Add an encrypting wrapper for snapshot blob stores in @tanstack/ai-sandbox, so that snapshot files are encrypted at rest with one option:
const snapshots = createSandboxSnapshots({
persistence: withEncryptedBlobs(persistence, { key }),
checkpoints,
})
Why
A sandbox snapshot can hold secrets. In #1982, sandboxComputer({ snapshots }) saves a Chromium profile, and the profile holds the session cookies of every site that the agent signed in to. A person with the cookies can use those accounts.
Today the docs only say "keep the blob store secret, and encrypt it in production" (docs/computer-use/drivers.md). Each user must write their own encryption. That is easy to get wrong.
How it fits
- The snapshot code writes each file to
stores.blobsatsandbox-files/sha256/<hash of the plain bytes>. - On restore, it reads the blob and checks the hash of the bytes (
packages/ai-sandbox/src/snapshots.ts). - So a wrapper can encrypt in
putand decrypt inget. The keys and the hash check do not change.
Work
- Add
withEncryptedBlobs(persistence, { key }). It returns the same persistence with a wrappedstores.blobs. - Use AES-GCM from Web Crypto, with a new random IV for each blob. Store the IV with the ciphertext. Run in Node, Workers, and browsers.
- Accept a
CryptoKey, or a function that returns one, so the key can come from a KMS. Add a key id to the blob metadata, for key rotation. - Make
getwork for every body type and forrange. A range read must decrypt the whole blob, then slice it.sizeandetagdescribe the ciphertext. - Fail with a clear error when a blob cannot be decrypted (wrong key, changed data). Do not return the ciphertext.
- Update
docs/computer-use/drivers.mdand the snapshot docs. Use the wrapper inexamples/react/computer-use-login.
Open questions
- The blob key holds the SHA-256 of the plain file. A person who can list the store can check if a known file is in a snapshot. Is that acceptable, or does the snapshot code need keyed hashes (HMAC) when encryption is on?
- Other metadata stays plain: file paths, sizes, and the checkpoint records. List this in the docs.
Context
- #1982: computer use sign-in example with profile snapshots.
- #1108: portable file snapshots.
- Lenguaje dominante
- TypeScript
- Estrellas
- 3.3k
- Forks
- 378
- Merge medio
- 1 d 2 h
- PR fusionados (30 d)
- 254
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de TanStack/ai
-
openai-base: a Responses max_output_tokens cutoff ends as RUN_ERROR without usage instead of finishReason 'length'Posiblemente ocupada @tombeckenham la tomó hace 8 días. Abiertohas-pr waiting-on: maintainer
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
TanStack/ai#1916 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
AG-UI TOOL_CALL_RESULT metadata is dropped in the live stream reducerPosiblemente ocupada @c446984928 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
Los mantenedores suelen responder en 1 día
-
Sandbox takeover: the saved transcript loses everything the first host delivered before the restartPosiblemente ocupada @tombeckenham la tomó hace 1 día. Abiertowaiting-on: maintainer
TanStack/ai#2061 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
withSandbox: each run's save drops the harness tool calls of earlier runsPosiblemente ocupada @tombeckenham la tomó hace 1 día. Abiertohas-pr waiting-on: maintainer
TanStack/ai#2059 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
ai-compaction: checkpoint never reused when the store returns message keys in another orderPosiblemente ocupada @tombeckenham la tomó hace 1 día. Abiertohas-pr waiting-on: maintainer
TanStack/ai#2050 · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de TanStack/ai
Issues similares
-
The sample email preview's ResizeObserver is never disconnected and keeps raising errors after leaving SettingsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
area:ui bug effort:S priority:P2
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Typo in WSL project description on Projects pagePosiblemente ocupada @akhil9tiet la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
microsoft/opensource.microsoft.com#1066 · 1 comentario ·
-
ArcGIS Maps SDK for JavaScript c-carousel calcite-design-tokens enhancement impact - p3 - not time sensitive needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Esri/calcite-design-system#15565 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
linkwarden/linkwarden#1891 ·
Los mantenedores suelen responder en 1 día