Aller au contenu principal

BlaxelSandbox

Exécute des commandes dans des Sandboxes cloud Blaxel isolés. Fournit des environnements sécurisés et isolés d'exécution de code qui prennent en charge le montage de stockages cloud (S3, GCS) au moyen de FUSE. Pour en savoir plus sur l'interface, consultez l'interface WorkspaceSandbox.

Installation
Lien direct vers Installation

npm install @mastra/blaxel

Utilisation
Lien direct vers Utilisation

Ajoutez un BlaxelSandbox à un Workspace et attribuez-le à un Agent :

import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { BlaxelSandbox } from '@mastra/blaxel'

const workspace = new Workspace({
sandbox: new BlaxelSandbox(),
})

const agent = new Agent({
id: 'code-agent',
name: 'Code Agent',
instructions: 'You are a coding assistant working in this workspace.',
model: 'anthropic/claude-sonnet-4-6',
workspace,
})

Image personnalisée avec des ressources
Lien direct vers Image personnalisée avec des ressources

Utilisez une image Docker personnalisée avec de la mémoire supplémentaire :

const workspace = new Workspace({
sandbox: new BlaxelSandbox({
image: 'node:20-slim',
memory: 8192,
region: 'auto',
timeout: '10m',
}),
})

Paramètres du constructeur
Lien direct vers Paramètres du constructeur

id?:

string
= Généré automatiquement
Identifiant unique de cette instance de Sandbox.

image?:

string
= 'blaxel/ts-app:latest'
Image Docker à utiliser pour le Sandbox. Les images basées sur Debian prennent en charge les montages S3 et GCS. Les images basées sur Alpine prennent uniquement en charge les montages S3.

memory?:

number
= 4096
Mémoire allouée en Mo.

timeout?:

string
Délai d'expiration de l'exécution sous la forme d'une chaîne de durée (par exemple, '5m' ou '1h'). Correspond à la durée de vie du Sandbox Blaxel.

region?:

string
= process.env.BL_REGION || 'auto'
Région Blaxel dans laquelle le Sandbox doit être créé. Utilisez 'auto' pour choisir automatiquement une région, ou définissez une région précise telle que 'us-pdx-1'.

env?:

Record<string, string>
Variables d'environnement à définir dans le Sandbox.

labels?:

Record<string, string>
Étiquettes personnalisées du Sandbox.

runtimes?:

SandboxRuntime[]
= ['node', 'python', 'bash']
Environnements d'exécution pris en charge. Valeurs valides : 'node', 'python', 'bash', 'ruby', 'go', 'rust', 'java', 'cpp', 'r'.

ports?:

Array<{ name?: string; target: number; protocol?: 'HTTP' | 'TCP' | 'UDP' }>
Ports à exposer depuis le Sandbox.

Propriétés
Lien direct vers Propriétés

id:

string
Identifiant de l'instance du Sandbox.

name:

string
'BlaxelSandbox'

provider:

string
'blaxel'

status:

ProviderStatus
'pending' | 'initializing' | 'running' | 'stopped' | 'error'

instance:

SandboxInstance
SandboxInstance Blaxel sous-jacente permettant d'accéder directement aux API Blaxel. Lève SandboxNotReadyError si le Sandbox n'a pas été démarré.

processes:

BlaxelProcessManager
Gestionnaire des processus en arrière-plan. Consultez la référence de SandboxProcessManager.

Processus en arrière-plan
Lien direct vers Processus en arrière-plan

BlaxelSandbox comprend un gestionnaire de processus intégré permettant de lancer et de gérer des processus en arrière-plan.

const sandbox = new BlaxelSandbox({ id: 'dev-sandbox' })
await sandbox.start()

// Spawn a background process
const handle = await sandbox.processes.spawn('node server.js', {
env: { PORT: '3000' },
onStdout: data => console.log(data),
})

// Interact with the process
console.log(handle.stdout)
await handle.kill()
remarque

Les Sandboxes Blaxel ne prennent pas en charge stdin. L'appel à handle.sendStdin() lève une erreur.

Consultez la référence de SandboxProcessManager pour découvrir l'API complète.

Montage d'un stockage cloud
Lien direct vers Montage d'un stockage cloud

Les Sandboxes Blaxel peuvent monter des systèmes de fichiers S3 ou GCS, ce qui rend le stockage cloud accessible sous la forme d'un répertoire local dans le Sandbox.

S3
Lien direct vers S3

import { Workspace } from '@mastra/core/workspace'
import { S3Filesystem } from '@mastra/s3'
import { BlaxelSandbox } from '@mastra/blaxel'

const workspace = new Workspace({
mounts: {
'/data': new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
}),
},
sandbox: new BlaxelSandbox(),
})

GCS
Lien direct vers GCS

import { Workspace } from '@mastra/core/workspace'
import { GCSFilesystem } from '@mastra/gcs'
import { BlaxelSandbox } from '@mastra/blaxel'

const workspace = new Workspace({
mounts: {
'/data': new GCSFilesystem({
bucket: 'my-bucket',
credentials: JSON.parse(process.env.GCS_SERVICE_ACCOUNT_KEY!),
}),
},
sandbox: new BlaxelSandbox(),
})