@chamvi/ sandbox- 当地
临时目录中的工作空间,用于开发和测试.
命令作为您的用户在主机上被产出:没有容器,没有隔离.
使用 @chamvi/sandbox-docker 或者说 @chamvi/sandbox-k8s 对于任何模型可以引导.
目录
安装
npm install @chamvi/sandbox-local @chamvi/sandbox @chamvi/core ai --save
仅限无害环境管理,节点.js >=26.0.0,POSIX主机(Linux 或 macOS),带有 git 编辑 PATH。 。 。 . @chamvi/core 财务报告和审定财务报表 @chamvi/sandbox 是同行依赖;没有其他运行时间依赖.
使用量
import { createWorkspaceManager } from '@chamvi/sandbox';
import type { IWorkspaceManager } from '@chamvi/sandbox';
import { createLocalSandbox } from '@chamvi/sandbox-local';
// no isolation: commands run as your user, for development and tests only
export function createDevWorkspaces(root?: string): IWorkspaceManager {
return createWorkspaceManager({ provider: createLocalSandbox({ root }) });
}
每个工作空间都是文件夹 <root>/<id>/ (单位:千美元)root 默认为 <os tmpdir>/chamvi-workspaces与 repo/ (模式的) /workspace, (中文(简体) ), home/, (中文(简体) ), tmp/ (单位:千美元) workspace.json 记录(运行编号、部署、储存、参考、, env、创建和期满) find 重建工作空间, 并读取垃圾收集, 因此重新启动的过程再次到达运行的工作空间 。 创造者 env 在磁盘上写入记录,所以文件夹是 0700 和记录 0600 (仅拥有者). dispose() 删除文件夹.
它做了什么,没有做什么
没有隔离. 一个命令作为主机用户运行,与主机的文件系统,网络和进程联系. /workspace 工具输入中的路径仅限于文件夹,包含符号链接(其真实路径离开文件夹的路径,例如通过寄存器带来的链接,是一个 ValidationError; 在每次通话前检查, 因此同时运行的命令仍然可以互换链接, 但是 bash 能够 cd / 并读取您的SSH密钥。 把它用在你的机器上 还有你信任的模型和寄存器 还有测试.
它所执行的:
- 环境: 只有主机
PATH, (中文(简体) ),HOME财务报告和审定财务报表TMPDIR在工作空间文件夹内,GIT_TERMINAL_PROMPT=0, (中文(简体) ),GIT_CONFIG_NOSYSTEM=1(一个系统 gitconfig 可以命名一个证书助手, 如 macOS)osxkeychain, (中文(简体) ),NPM_CONFIG_UPDATE_NOTIFIER=false, (中文(简体) ),CI=true,软件包缓存变量(XDG_CACHE_HOME, (中文(简体) ),npm_config_cache, (中文(简体) ),PIP_CACHE_DIR, (中文(简体) ),GOMODCACHE, (中文(简体) ),GOCACHE, (中文(简体) ),COMPOSER_CACHE_DIR下<root>/.cache,由根的每个工作空间共享(cache: false未设置),并配置env。没有其他主机变量(指针、云证书)达到命令. - 暂停和中止:每个命令启动自己的进程组(
detached); 超时、中止或处置会用SIGKILL包括背景孙辈。 杀死计时器在孩子离开时被清除,因此它从不表示再利用的pid. 当它开始的背景工作时退出的命令仍然保留其输出(node server.js & echo started返回 2 s (KILL_GRACE_MS)在出口后使用自己的出口代码timedOut: false;该任务一直运行到工作空间被处理为止,就像多克和库伯涅茨一样,其输出也重新定向(nohup node server.js > log 2>&1 &) (中文(简体) ). 工作区会记得这样的命令的流程组,一旦组结束就会忘记它(每秒检查一次,LINGER_CHECK_MS;一个组的ID只在每个成员消失后再被再使用),所以处置会杀死这些任务,而不是一个后来接管了ID的组. 剩下的一个窗口是一个结束的组,而另一个进程组则在第二组内进行。 只有产生工作的过程才知道其群体,因此,工作也随着这一过程而死(在工作过程中)exit,该chamviCLI 到达 SIGTERM 和 SIGINT 上 : 与 Docker 或 Kubernetes 工作空间不同, 重启后再次发现的本地程序保存其文件但没有背景工作, 和 SIGKILL 所杀的进程( 或一个在不带设备的情况下退出的程序)exit事件,例如,在未处理的SIGTERM上)离开工作运行,在任何后处理之外. - 输出盖:每条溪流64个KiB,排出过水口.
- 无图像: 本地工作空间不运行容器图像, 因此
create_workspace从未提供image此提供者( 请求的是一个ValidationError) (中文(简体) ). - 终身数字 :
limits.maxLifetimeMs(违约7天)是期满;collectGarbage({ deployment, isSettled })删除部署中已过期的工作空间文件夹root(以及坠毁过程)和isSettled,那些定居的跑道, 先处理开放的跑道。 没有工作空间的文件夹被留下。 无法删除的文件夹不会停止通行: 其他的去, 一个去SandboxError与计数和第一个失败 投出在结尾.
cpu, (中文(简体) ), memory, (中文(简体) ), storage 财务报告和审定财务报表 pids 没有执行,所以 limits 带 maxLifetimeMs 只有这个.
选项
createLocalSandbox(options?)数字 :
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
root | string | <os tmpdir>/chamvi-workspaces | 每个工作空间有一个文件夹的目录 |
env | Record<string, string> | 无 | 添加到每个工作空间的环境( 胜过默认) |
limits | { maxLifetimeMs? } | 604_800_000 | 工作空间的硬命盖 |
cache | boolean | true | 将软件包缓存指向 <root>/.cache |
clock | IClock | systemClock | 过期和超时 |
API 密码
| 导出 | 仁爱 | 目的 |
|---|---|---|
createLocalSandbox | 函数 | 这个 ISandboxProvider (单位:千美元)name: 'local'(中文(简体) ) |
类型 : LocalSandboxOptions。 。 。 .
许可证
原载 Apache 许可证 2.0。 。 。 .