Первый шаблон
Шаблон задаёт образ, файлы, пакеты и процессы песочницы. Соберите его один раз, а затем запускайте одинаково подготовленные песочницы по имени или тегу.
В этом примере шаблон копирует HTML-файл, задаёт рабочий каталог и запускает HTTP-сервер. AgentBox дождётся ответа сервера, соберёт версию v1 и запустит из неё песочницу.
import { Sandbox, Template, waitForURL } from "@abox-dev/sdk";
const templateName = process.env.TEMPLATE_NAME ?? "web-template";
const template = Template({ fileContextPath: "." })
.fromBaseImage()
.setWorkdir("/home/user/app")
.copy("index.html", "/home/user/app/index.html")
.setStartCmd(
"python3 -m http.server 8080",
waitForURL("http://localhost:8080"),
);
const build = await Template.build(template, templateName, {
tags: ["v1"],
});
console.log(`Built ${build.name}:v1`);
const sandbox = await Sandbox.create(`${templateName}:v1`);
try {
const result = await sandbox.commands.run(
"whoami && pwd && curl --silent http://localhost:8080",
);
console.log(result.stdout);
} finally {
await sandbox.kill();
}Файл index.html с текстом Hello from an AgentBox template лежит рядом с исходным файлом шаблона.
Что происходит в примере
Template() создаёт определение шаблона. Последовательные методы выбирают базовый образ, добавляют содержимое и задают процесс, который должен работать в готовой песочнице.
Template.build отправляет определение на сборку. Имя объединяет все сборки шаблона, а тег указывает на конкретную версию.
Sandbox.create принимает имя с тегом. Рабочий каталог, файл и HTTP-процесс уже входят в запущенную песочницу.
Для сборки нужен API-ключ. Полный список методов доступен в справочнике SDK.