@computesdk/novita

中文文档
0.0.17发布于 2026/11/06MITTypeScriptESM + CJS近 30 天下载 7079

Novita Sandbox 计算SDK- 有本地流线、 文件系统访问和快照的云沙盒提供商

中文使用文档
文档目录8 节
  1. 设置
  2. 配置
  3. 命令和文件
  4. 寿命周期和URL
  5. 暂停并恢复
  6. 抓图
  7. 模板
  8. 工作室和测试

@ computesdk/ novita

计算SDK的 Novita Sandbox 提供者, 使用官方 novita-sandbox SDK(英语:SDK). 需要20号或更新的节点.

设置

npm install computesdk @computesdk/novita
export NOVITA_API_KEY=your_api_key

NOVITA_API_KEY 是该提供者配置的唯一环境变量. Novita SDK提供默认的连接设置.

import { novita } from '@computesdk/novita';

const sdk = novita({}); // Reads NOVITA_API_KEY
const sandbox = await sdk.sandbox.create({ timeout: 300_000 });

try {
  await sandbox.filesystem.writeFile('/tmp/hello.py', 'print("Hello from Novita")');
  const result = await sandbox.runCommand('python /tmp/hello.py');
  console.log(result.stdout);
} finally {
  await sandbox.destroy();
}

提供商也与共享的ComputeSDK API合作:

import { compute } from 'computesdk';
import { novita } from '@computesdk/novita';

compute.setConfig({ provider: novita({}) });
const sandbox = await compute.instances.create();
await sandbox.destroy();

配置

选项含义
apiKey可选的显密钥;另作 NOVITA_API_KEY。 。 。 .
timeout以毫秒计的默认沙盒寿命;默认为 300000。 。 。 .

sandbox.create({ timeout }) 超过提供者超时 。 使用 templateId 选择模板或 snapshotId 以还原快照; 省略两者 base这两种身份是相互排斥的。 创建也接受 envs, (中文(简体) ), metadata,以及当地人 secure, (中文(简体) ), allowInternetAccess, (中文(简体) ), network,以及 lifecycle 选项。 框架选项,例如: signal 未转发给 诺维塔SDK.

命令和文件

runCommand 支持 cwd, (中文(简体) ), env, (中文(简体) ), timeout,以及本地流回调:

const result = await sandbox.runCommand('python -u /tmp/hello.py', {
  cwd: '/tmp',
  env: { MODE: 'test' },
  timeout: 60_000,
  onStdout: chunk => process.stdout.write(chunk),
  onStderr: chunk => process.stderr.write(chunk),
});

命令超时与沙盒寿命分开. 非零命令退出 返回其输出和退出代码。 认证、网络和超时出错 拒绝电话.

background: true 启动本地背景进程并返回确认 带有退出代码 0 和空输出。 这不报告过程的最终结果 退出状态。 对于进程控件,PID跟踪,或等待背景输出, 使用情况 sandbox.getInstance().commands.run(command, { background: true })。 。 。 . 背景模式不能通过ComputeSDK与流回调合并.

文件系统支持 readFile, (中文(简体) ), writeFile, (中文(简体) ), mkdir, (中文(简体) ), readdir, (中文(简体) ), exists, (中文(简体) ), 财务报告和审定财务报表 remove。普通读取/写入接口处理文本;二进制操作 可通过 sandbox.getInstance().files。 。 。 .

寿命周期和URL

  • sdk.sandbox.getById(id) 连接到沙盒; 只有未找到的响应 变成 null。连接到暂停的沙盒可以恢复它.
  • sdk.sandbox.list() 获取所有运行中的沙盒并连接到 每一个这样返回的对象都可以执行命令。 连接可能扩展沙盒 根据诺维塔的连结行为,终生 暂停的沙盒不包括在内.
  • sandbox.getInfo() 读取当前 SDK 信息 。 暂停映射到 stopped· ; 在元数据中保留原生状态. timeout 之间的间隔 aPI的广告 startedAt 财务报告和审定财务报表 endAt 时间戳.
  • sandbox.destroy() 如果沙盒已经不见了,用ID杀死它并成功.
  • sandbox.getUrl({ port: 3000 }) 返回 HTTPS 服务 URL。 绑定您的服务器 改为 0.0.0.0. Novita 服务访问可能需要交通信号; URL本身 不公开服务。 原始符号信息可通过 sandbox.getInstance()。 。 。 .

暂停并恢复

await sandbox.pause();
await sandbox.resume();

暂停保存内存, 因此文件系统的任何位置和运行 工艺存活(sdk.sandbox.pause 实值 { memory: true }) (中文(简体) ). 续会 与砂盒创建的一生重接.

超时扩展、 PTY 和其他 SDK 特性仍可通过 sandbox.getInstance() 或单独的 Novita 客户端.

抓图

const snapshot = await sdk.snapshot!.create(sandbox.instanceId);
const restored = await sdk.sandbox.create({ snapshotId: snapshot.id });
try {
  console.log(await restored.runCommand('ls /tmp'));
} finally {
  await restored.destroy();
}
await sdk.snapshot!.delete(snapshot.id);

抓图捕捉整个根文件系统(包括 /tmp,这不是 tmpfs)和内存,因此源代码中运行的流程在源代码中运行 还原了沙盒。 源头在拍摄快照时短暂地暂停 继续运行; sdk.snapshot.capabilities 实值 { scope: 'rootfs', memory: true, destroysSource: false }。 。 。 . snapshot.list({ instanceId, limit }) 支持通过源码过滤和总结果限制,获取额外页面 视需要而定。 抓图返回 id, (中文(简体) ), snapshotId,以及 provider; SDK 没有 提供创建时间戳。 不支持快照名称和元数据 .

模板

template.create, (中文(简体) ), template.list,以及 template.delete 覆盖 Novita 模板 构建 API. 创建等待构建完成并返回 id, (中文(简体) ), templateId, (中文(简体) ), buildId, (中文(简体) ), provider,而土生土长的名称/tags。 使用返回的内容 id 作为 页:1 templateId 当创建沙盒时.

const template = await sdk.template.create({
  name: 'my-python-template',
  image: 'python:3.12',
  build: {
    cpuCount: 2,
    memoryMB: 1024,
    tags: ['dev'],
    onBuildLogs: entry => console.log(entry),
  },
});

const sandbox = await sdk.sandbox.create({ templateId: template.id });
try {
  console.log(await sandbox.runCommand('python --version'));
} finally {
  await sandbox.destroy();
}

const templates = await sdk.template.list({ limit: 50 });
console.log(templates.map(item => item.id));
await sdk.template.delete(template.id);

仅限 { name },创建使用诺维塔的基础图像. 对于软件包, 文件 副本、私人登记证书、启动命令或准备状态检查, 通过本地建筑师为 template 改为 image数字 :

import { Novita } from 'novita-sandbox';

const definition = new Novita().template.new()
  .fromPythonImage('3.12')
  .pipInstall('numpy');

const template = await sdk.template.create({
  name: 'python-with-numpy',
  template: definition,
  build: { skipCache: true },
});

image 财务报告和审定财务报表 template 两者相互排斥. build 支持 cpuCount, (中文(简体) ), memoryMB, (中文(简体) ), tags, (中文(简体) ), skipCache,以及 onBuildLogs。本地建筑 API 不 接受常见 description 或者说 metadata 字段,所以适配器拒绝 他们。 必要时在土建商上设置起动/准备状态.

列出返回构建模板(不是快照),默认获取所有页面, 治疗 limit 以总结果为限。 它保存了本地模板 字段,包括时间戳和资源大小。 限额 0 返回空白 阵列。 如果模板已经缺失, 删除成功; 其他 API 错误 宣传。 模板删除是永久的 .

工作室和测试

与 NOVITA_API_KEY 设置, 选择 novita 在Workbench。 工作区.

pnpm --filter @computesdk/novita test
pnpm --filter @computesdk/novita typecheck

测试内容包括E2B使用的同一共享供应商合同套件,即共享的 CRUD套件和22个适配器专用单元测试:

套间默认( 即使有 API 密钥)与 NOVITA_RUN_INTEGRATION=1 财务报告和审定财务报表 NOVITA_API_KEY
共享供应商合同(16项测试)运行常见的模拟沙盒运行与真正的诺维塔沙盒
共享 CRUD (5个测试)跳过删除后创建、连接、列表、销毁并检查沙盒
适应器单元测试(22个测试)嘲笑诺维塔 SDK还是嘲笑诺维塔SDK

共享合同涵盖 shell 和背景命令,无效命令, 沙盒信息,端口3000/8080上的URL(包括自定义协议),全部6个 文件系统操作加上缺少文件错误,以及 shell 参数引用. 适配器专用套件还包括本土流线、参数和 错误映射、页码、快照和模板建立/列出/删除.

共享测试加载寄存器根 .env。真正的云调需要两者 NOVITA_RUN_INTEGRATION=1 财务报告和审定财务报表 NOVITA_API_KEY。单是钥匙就可以保存 test (包括 词根 pnpm test)在模拟模式并跳过直播CRUD. 选入的旗帜只是 测试开关,不是提供者配置选项。 设置在下面的命令上 进行现场测试时 共享套房在测试后清理出他们的沙盒. 模拟倒计时不能验证 诺维塔连接. 现场测试覆盖沙盒;模板和快照操作 目前只有模拟报道.

仅运行22个适配器单元测试而不使用云资源:

pnpm --filter @computesdk/novita test:unit

运行共享提供者和 CRUD 套房对 Novita, 设置 NOVITA_API_KEY 在环境或根 .env,然后运行 :

pnpm --filter @computesdk/test-utils build
NOVITA_RUN_INTEGRATION=1 pnpm --filter @computesdk/novita test:integration

重建 @computesdk/test-utils 更新此检出后, 诺维塔 CRUD 登记备有。 没有键或选入的旗帜,整合 套房以模拟模式运行共享合同并跳过直播 CRUD.

版本与发布记录

@computesdk/novita 共发布 17 个版本,首次发布于 2026/09/22;过去 12 个月发布了 17 个版本。

版本发布日期距今
0.0.17latest2026/11/064 天前
0.0.162026/11/046 天前
0.0.152026/10/3011 天前
0.0.142026/10/2813 天前
0.0.132026/10/2318 天前
0.0.122026/10/2318 天前

关于 @computesdk/novita 的常见问题

@computesdk/novita 是什么?

Novita Sandbox 计算SDK- 有本地流线、 文件系统访问和快照的云沙盒提供商

如何安装 @computesdk/novita?

在项目目录运行 npm install @computesdk/novita,或使用 pnpm add / yarn add / bun add。

@computesdk/novita 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@computesdk/novita 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@computesdk/novita 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@computesdk/novita 可以商用吗?

@computesdk/novita 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@computesdk/novita 的下载量有多少?

根据 npm 官方下载统计,@computesdk/novita 在 2026/10/11 – 2026/11/09 这 30 天内被下载 7,079 次,日均约 236 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@computesdk/novita 还在维护吗?

最新版本 0.0.17 发布于 2026/11/06(4 天前);至今共发布 17 个版本,其中过去 12 个月发布了 17 个;首次发布于 2026/09/22。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。