Ajouter un fournisseur de sandbox
Connectez un environnement capable d’exécuter des commandes, de transférer des fichiers et de libérer ses ressources.
Écrire un fournisseur minimal
Section intitulée « Écrire un fournisseur minimal »Implémentez un SandboxProvider pour ouvrir un environnement d’exécution. Il renvoie un SandboxLease qu’Outpost utilise pour lancer les commandes et transférer les fichiers. L’exemple ci-dessous présente une intégration de machines virtuelles ; vms représente le SDK de la plateforme.
Adaptez ces contrats du SDK et ces fonctions d’exécution à votre plateforme de VM.
Ajoutez les transferts et une libération idempotente, puis assemblez le fournisseur dans vm-provider.ts.
Passez vmSandboxProvider comme sandboxProvider à dispatch() ou createSandbox(). Outpost appelle acquire() une fois par sandbox, fait passer l’agent et vos commandes par invoke(), puis appelle release().
Implémenter les opérations
Section intitulée « Implémenter les opérations »Référence API : SandboxLease, SandboxContext et FileTransfers.
invoke() reçoit aussi retain (octets de fin de sortie à conserver), interactive et les flux terminal pour attach(), ainsi que input quand le bail déclare liveInput.
Choisir le mode d’accès au dépôt
Section intitulée « Choisir le mode d’accès au dépôt »Les deux fonctions utilitaires prennent name, des variables facultatives et acquire, vérifient le nom et figent le résultat. Ils diffèrent par le placement qu’ils fixent, qui décide qui déplace le dépôt.
createMountedSandboxProvider() | createRemoteSandboxProvider() | |
|---|---|---|
Votre acquire() | Monte context.directory sur root et context.gitDirectories pour que git fonctionne | Démarre un environnement vide |
| Dépôt | L’agent modifie directement le worktree de l’hôte | Outpost lance git init dans root, envoie l’historique, puis télécharge et applique les nouveaux commits |
| CLI de l’agent | Fournie par votre image | Installée dans home si elle manque, sauf avec bootstrap: false |
| Branche | Tout mode de branche | named ou integrate, integrate par défaut |
| Exemples intégrés | Docker et Podman (Docker et Podman) | Vercel, Daytona, Firecracker (Sandboxes cloud) |
Respecter les obligations
Section intitulée « Respecter les obligations »La supervision, les reprises et la récupération d’Outpost reposent sur ces comportements. Un utilisateur voit chacun d’eux quand il est cassé.
- Statut de sortie
invoke()se résout quand le processus se termine, avec son vrai statut, même si stdout et stderr se sont fermés avant. - Annulation
signaletdeadlineMsarrêtent le groupe de processus et ses descendants ; la sandbox reste utilisable. - Limites de transfert
upload()etdownload()respectent eux aussisignaletdeadlineMs. - Octets exactsLes transferts copient les données binaires sans décodage texte et conservent les modes pris en charge et les liens symboliques.
- Staging sûrRejeter les destinations qui sortent de leur cible ; supprimer le staging temporaire en cas de succès, d’échec et d’annulation.
- Libération idempotenteUn second
release()se résout sans erreur.
Déclarer les capacités facultatives
Section intitulée « Déclarer les capacités facultatives »Outpost n’utilise une capacité que si le fournisseur ou le bail la déclare ; il ne la déduit jamais du nom du fournisseur.
Référence API : SandboxLease.
Sans liveInput, réorienter un agent CLI qui sait reprendre sa conversation arrête son processus dès que la conversation est connue, puis la reprend dans la même sandbox.
Préparer la récupération après un arrêt brutal
Section intitulée « Préparer la récupération après un arrêt brutal »Une course durable enregistre chaque sandbox avant sa création, pour qu’un coordinateur relancé puisse la supprimer. Dans acquire(), attendez context.registerRecovery(resourceId) une seule fois, avant d’allouer. recover(resourceId, { signal, deadlineMs }) supprime ensuite cette ressource.
registerRecovery n’existe que pendant une course durable. S’il rejette, n’allouez rien. recover() doit réussir s’il est rappelé et ne supprimer que la sandbox, jamais les données du dépôt sur l’hôte.
Tester sur l’environnement réel
Section intitulée « Tester sur l’environnement réel »diagnoseSandbox() sonde un bail : Node.js, Git, des flux de sortie séparés, un statut de sortie non nul, le répertoire personnel et, avec transfers, un envoi binaire vérifié par un processus dans la sandbox.
Le diagnostic vous laisse le bail : libérez-le vous-même. Lancez ensuite un vrai dispatch() sur une branche nommée ; Diagnostic explique le rapport.
- Pas de
recoverdans les fonctions utilitaires:createMountedSandboxProvider()etcreateRemoteSandboxProvider()acceptentname,variablesetacquire; ajoutezrecoveren étalant le résultat, comme ci-dessus. - Le distant exige Git: Une sandbox distante a besoin de
gitdans sonPATHet d’unrootaccessible en écriture. - Sonde de transfert partielle:
transfers: truevérifie un seul fichier binaire. Liens symboliques, modes, dossiers et transferts par lots restent non vérifiés.
API : SandboxProvider · SandboxLease · SandboxContext · FileTransfers · createMountedSandboxProvider · createRemoteSandboxProvider · diagnoseSandbox.