instabox (npm)
npx instabox@latest # sign in, install the CLI and the agent skills (--no-skills: no skills)
npx instabox@latest sh # the same, then start a new box and SSH into it
npx instabox@latest skills install -y # only the agent skills: no sign-in, no network
npx instabox@latest 用设备代码登录instabox(只能第一次运行:打开它在任何设备上打印的页面并输入代码;它会在有浏览器的地方为你打开页面,而不是用浏览器。 --no-browser),安装 instabox CLI已经登录或更新了过期的CLI(跳过 --no-cli),安装或更新代理技能 ../skills 在 ~/.claude/skills, ~/.agents/skills 和 ~/.gemini/config/skills (跳过 --no-skills),并打印接下来的步骤。它不会碰你的盒子。
npx instabox@latest sh 完成所有这些,然后启动一个新框(box-<hex>),并通过SSH将您放入其中,没有问题。由代理(无终端)运行,它启动盒子并打印 instabox ssh <box> -- <command> 而不是打开一个壳。在盒子限制处,它什么都不开始,列出你的盒子,删除一个(instabox rm --yes <box>)或打开一个(instabox ssh <box>).
GitHub和谷歌登录是独立的instabox帐户,每个帐户都有自己的盒子。这个入口点和 instabox login 让登录页面同时提供这两种服务。 --google 直接请求谷歌 instabox login --provider google. 一个代理没有浏览器,也没有人在键盘上签名,而是用 instabox login --agent 一旦安装了CLI (docs/agent-auth)。Md):它为帐户所有者打印索赔页和代码,帐户所有者稍后从任何设备进行审批。
没有终端(代理,CI),没有人可以输入设备代码,因此登录来自 INSTABOX_API_KEY (一个 ibk_... 密钥(如CLI接受的):没有浏览器、没有设备代码、没有保存任何内容)、已经保存的登录或来自的代理密钥 instabox login --agent. 如果没有,它立即退出状态为3,并告诉如何继续,而不是等待一个代码,没有人会进入。 --device-code 无论如何都要请求设备代码,让代理将其转发给一个人。 -y (--yes)不要求任何东西:没有邀请码提示。
npx instabox@latest skills install [-y] [--claude|--codex|--cursor|--opencode|--antigravity|--all] 只安装特工技能,没有登录:克劳德代码 ~/.claude/skills, Codex's, Cursor's和OpenCode's ~/.agents/skills (三个人都读过,所以给他们一份),《反重力》开始了 ~/.gemini/config/skills. 由于没有命名代理,它为所有代理安装,首先在终端询问,除非 -y. 一个未知的标志是一个使用错误,状态2。
任何其他命令行都是instabox CLI的(cmd/instabox): npx instabox@latest ls 运行 instabox ls,这个包携带的构建。
这个包是CLI的唯一来源 npx instabox@latest (或 npm install -g instabox (在脚本和CI中)是如何安装它。两个旧的路径也从npm注册表中读取它: curl -fsSL https://api.instabox.sh/install.sh | sh,仍然为现有脚本提供服务,但不再发布(服务器提供脚本;脚本请求) $INSTABOX_NPM_REGISTRY/instabox/$INSTABOX_VERSION、默认 https://registry.npmjs.org 和 latest,因为 dist.tarball,对tarball进行验证 dist.integrity (sha512),并提取 package/cli/instabox-<os>-<arch>), instabox update (围棋也是如此)。控制平面不构建、存储和服务CLI: CLI变更在合并后几分钟就会在npm上发生,不需要发布,也不需要部署。
它是如何工作的
bin/instabox.mjs运行instabox的设备代码登录(RFC 8628),POST /v1/auth/device然后是民意调查/v1/auth/device/token),如instabox login,并将令牌保存在CLI自己保存的地方,~/.config/instabox/credentials.json,所以两人同时签到。有一个副本是故意的:服务器旋转刷新令牌,并在一个旋转的令牌返回时结束会话。sh总是启动一个新的盒子,没有超时,也没有空闲的自动挂起。命令行输入已存在的框:instabox ssh <box>。- 该包包含Go CLI:所有六个版本(darwin、linux和windows; amd64和arm64)
cli/,bin/instabox.mjs为这台机器挑选一个(lib/platforms.mjs). 一个包而不是每个平台一个包保持发布到单个包和单个可信发布者设置;代价是每次安装都要下载其他平台的构建(大约22 MB压缩,每个版本缓存npx)。它将二进制文件复制到PATH ($INSTABOX_INSTALL_DIR,否则/usr/local/bin当可写时,else~/.local/bin;窗口:%LOCALAPPDATA%\Programs\instabox),替换内容不同的已安装CLI,并留下开发构建(instabox dev,或-dirty)。命令行不需要网络连接npx instabox@latest <command>直接运行捆绑的二进制文件,不管PATH上是什么。 - 如果没有捆绑的二进制文件(没有构建的平台,或者从签出运行的目录),其中
cli/不存在直到scripts/bundle-cli.mjs填充它)没有安装任何东西,也没有下载任何东西:输出在一行中说明了原因(lib/cli.mjs,missingBundledCli),则已安装的CLI保持原样,并且npx instabox@latest <command>如果安装了命令行,则运行命令行。 - 技能只写在有标记的副本上
installed-by: instabox;输出说明哪些已安装、已更新、已更新或保留,因为它们是用户自己的。 - 在Windows上
instabox.exe去%LOCALAPPDATA%\Programs\instabox;输出给出PowerShell行,该行将该文件夹放在用户的PATH上,并且npx instabox@latest <command>发现它没有那个。 - 垃圾箱也叫
instabox,所以lib/cli.mjs找到真正的CLI的方式insta CLInode_modules如果没有此脚本的链接,则安装程序自己的目标。 prepack副本../skills装入包装;那里的所有技能都将在下次发布时发布。
开发
npm ci
npm test
npm run format:check
npm pack # copies ../skills, then builds instabox-<version>.tgz
npx --package=./instabox-0.4.3.tgz instabox --help
INSTABOX_API_URL 指向另一个instabox服务器。从签出没有捆绑的二进制文件(cli/ 不在版本控制中),所以包装器什么也不安装,并这样说;要尝试真正的东西,请填充 cli/ CI的方式:
../scripts/build-cli.sh --out ../out/cli --version 0.0.0-local
node scripts/bundle-cli.mjs --cli-dir ../out/cli # -> cli/, checked against SHA256SUMS
node bin/instabox.mjs --version # runs cli/<build> for this machine
npm pack # a tarball with the binaries, ~22 MB
释放
不需要手工操作。 npm-release.yml 每推一次就跑一次 main. 当包裹运送的任何东西自上次以来发生变化时 npm-v* 标记(cmd/instabox 该模块导入的包, npm/, skills/, go.mod, go.sum, scripts/build-cli.sh),它构建了六个CLI二进制文件 scripts/build-cli.sh把它们放进去 cli/ 与 scripts/bundle-cli.mjs 每一项核对 SHA256SUMS),出版 instabox 通过NPM可信发布(任何地方都没有NPM令牌),并标记提交 npm-v<version>. 任何能合并的人都能释放。
版本是 scripts/next-version.mjs的: package.json 命名一行(0.8.0),并合并船舶 0.8.0, 0.8.1, 0.8.2这就去。 package.json 更改仅用于开始新的行(新的小调或大调);低于最高发布的稳定版本的一行将被拒绝,因此是回退 package.json 无法移动 latest 回来。一个带有 - (0.9.0-rc.1)是按书面形式出版的,曾经在 next dist-tag。工作流设置版本 npm version 在发布时间;提交的 package.json 保持线的底部。 instabox --version 打印 <npm version>+<commit>。
提交只发布一次。NPM记录它发布的每个版本的提交(gitHead),版本步骤首先读取注册表的包:当从此提交构建的版本已经存在时(在发布成功后重新运行,但标记作业失败),则不会再发布任何内容,只会发布丢失的版本 npm-v<version> 标记已创建。因此,失败的运行只是从Actions选项卡重新运行(workflow_dispatch). 它的 force Input发布一个没有任何更改的新补丁。
可信发布是npmjs.com上的一个设置 instabox →设置→可信发布者:GitHub Actions, InsForge / instabox / npm-release.yml. 它是固定的。重命名工作流文件将中断发布,直到更新设置;NPM不遵循重命名。
用户从npm获得的CLI, install.sh 或 instabox update Alike是最新发布的,可以在网站运行之前发布。