@computesdk/miosa (英语)
MIOSA 供应商 计算SDK 在MIOSA云上装有鞭炮微VM沙盒.
MIOSA sandbox可以毕业为持久桌面,在自定义域上服务公共预览URL,并通过白-标签控制平面使用外置备份.
安装
pnpm add @computesdk/miosa computesdk
使用量
import { createCompute } from 'computesdk';
import { miosa } from '@computesdk/miosa';
const compute = createCompute({
defaultProvider: miosa({ apiKey: process.env.MIOSA_API_KEY }),
});
const sandbox = await compute.instances.create();
const result = await sandbox.runCommand('python3 -c "print(40 + 2)"');
console.log(result.stdout); // "42"
await sandbox.filesystem.writeFile('/workspace/app.js', 'console.log("hi")');
const url = await sandbox.getUrl({ port: 3000 }); // white-label-aware preview URL
await sandbox.destroy();
配置
miosa({
apiKey: 'msk_…', // or MIOSA_API_KEY env var
baseUrl: 'https://api.miosa.ai/api/v1', // default; point at your white-label control plane
timeout: 300_000, // default sandbox lifetime (ms)
runnerMode: true, // default; false (or MIOSA_RUNNER_MODE=0) keeps create/exec/destroy on the account API
lazyCreate: false, // default; true (or MIOSA_LAZY_CREATE=1) defers create() to first use
});
Auth 是一个 MIOSA API 密钥 (msk_*页:1 Authorization: Bearer <key>。 。 。 .
区域终点
创建、执行和销毁到MIOSA的区域沙盒端点(run-<region>.miosa.ai)而不是账户 API,它从每个呼叫中去掉一个 hop. 其他一切(列表, getById, getUrl,文件系统,快照)都留在账户API上.
- 有习惯
baseUrl(或MIOSA_BASE_URL)区域端点默认关闭,因此一个白色标签或自托管的控制平面的密钥从未被发送到MIOSA的公共区域主机. 设定runnerMode: true, (中文(简体) ),MIOSA_RUNNER_MODE=1或一个runnerBaseDomain选择加入. - 创建区域端点不会起到作用,例如模板,快照或超过标准大小的形状会进入账户API,而沙盒会一直停留在那里.
- 只有当区域端点在提供任何东西前拒绝创建时,创建才会被移动到账户API:无法到达,没有能力,或者还不知道密钥. 超时或重置连接被浮出水面是一种错误,而不是被发送到账户 API,因为请求可能已经发送,第二个创建可以提供第二个沙盒.
懒惰创建
与 lazyCreate 继续, create() 没有网络电话。 第一个 runCommand() 发送一个创建沙盒并运行命令的请求。 任何其他首通电话getInfo, (中文(简体) ), getUrl一个文件系统呼叫, getById,快照)首先创建了沙盒. 在第一次通话时,从创建表面出错。 第一个命令被跑者拒绝(空出,太大,超时出错)被报告为失败的命令,退出代码为127,没有产生出任何东西,使手柄未被使用. 第一个运行但无结果的命令(死线,产卵失败)被报告的方式相同,不再运行. 摧毁一个从未使用过的手柄 什么都不会.
sandboxId 在沙盒存在之前和之后,是整个手柄寿命的客户端占位符,因为框架在 create() 返回。 它只在创建它的过程内命名出沙盒,并且只被授予创建它的API密钥. 要存储或传递沙盒,读取真实的ID从 getInfo().id。该选项仅在使用区域终点时适用.
方法-终点绘图
| 计算SDK 方法 | MIOSA 结束点 | 页:1 |
|---|---|---|
sandbox.create() | POST /sandboxes | 等待服务器端,直到沙盒准备好命令并返回一个紧凑的响应; templateId → template_id, (中文(简体) ), snapshotId → snapshot_id, (中文(简体) ), envs → env, (中文(简体) ), timeout(ms) → timeout_sec |
sandbox.getById() | GET /sandboxes/:id | 404 → null |
sandbox.list() | GET /sandboxes | |
sandbox.destroy() | DELETE /sandboxes/:id | 404 被视为已销毁 |
runCommand() | POST /sandboxes/:id/exec | {command, cwd, env, timeout(sec)}· ; background 包装 nohup … & |
getInfo() | (从沙盒记录) | state → status, (中文(简体) ), timeout_sec → timeout(ms) |
getUrl({port}) | POST /sandboxes/:id/expose | 服务器解决租户预览域名, 从未构建客户端 |
filesystem.readFile() | GET /sandboxes/:id/fs/read?path= | 本地语言 |
filesystem.writeFile() | POST /sandboxes/:id/fs/write | 本地语言 |
filesystem.mkdir() | POST /sandboxes/:id/fs/mkdir | 土生土长, recursive: true |
filesystem.readdir() | GET /sandboxes/:id/fs?path= | 本地语言 |
filesystem.exists() | POST /sandboxes/:id/exec (单位:千美元)test -e(中文(简体) ) | 编 成 因为没有布尔存在终点 |
filesystem.remove() | DELETE /sandboxes/:id/fs?path= | 本地语言 |
snapshot.create() | POST /sandboxes/:id/snapshots | 当地的鞭炮检查站; name → comment; 等待快照准备恢复 |
snapshot.list({instanceId}) | GET /sandboxes/:id/snapshots | MIOSA快照是沙盒镜 |
instance.pause() 编号 : .resume() | POST /sandboxes/:id/pause 编号 : resume | 同框暂停 : 内存、 进程和文件幸存; 仅限鞭炮运行时间( 也在 getInstance()(中文(简体) ) |
设定 runtime: "firecracker" 每个创建( e)sandbox.create({ runtime: "firecracker" })),提供方,或与 MIOSA_RUNTIME=firecracker 在MIOSA的"鞭炮跑道"上创建沙盒(runtime_profile: "standard"),它具有暂停/重现和快照,并且使背景进程在命令之间保持活性。 未设置, MIOSA 选择运行时间( 目前 SOMA, 没有这些 ) . provider.sandbox.pause 财务报告和审定财务报表 provider.snapshot.capabilities 声明如下: createOptions: { runtime: "firecracker" }。快照可以捕捉记忆和整个根部(/tmp, (中文(简体) ), /root, (中文(简体) ), /var 包含),所以背景过程在沙盒中持续运行,从中恢复;源持续运行. 快照需要几分钟才能准备好,然后 snapshot.create() 等着.
在计算SDK表面之外,同一API密钥解锁了完整的MIOSA API:沙盒叉/分机,暂停/再起,桌面毕业,部署,以及非主机输出.
测试
pnpm test # unit tests (mocked fetch, no network)
pnpm typecheck # tsc --noEmit
许可证
麻省理工学院