niceeval show @<attempt-locator> 或 niceeval view 查看判定、断言、文件改动、命令和对话就能定位,完整路线见排查手册。
但有些问题只能进活的环境里看:
- 环境起不来:setup 阶段装依赖失败、agent CLI 启动不了。这时 agent 还没开始跑,对话记录是空的,最快的办法是进 Sandbox 手动重跑一遍安装命令。
- 改动落在
git diff之外:全局装了什么包、$HOME下写了什么配置、PATH实际是什么,保存下来的文件改动不包含这些内容。 - 重跑太慢:冷启动加安装要几分钟。想逐条验证猜测时,留着现场比每次重跑快得多。
跑的时候保留现场
在niceeval exp 上加 --keep-sandbox:
--keep-sandbox 有两档:
failed(默认值)保留判定为failed或errored的 Attempt,包括超时被打断的。all连通过的也保留。调 setup Hook、核对通过时环境的真实状态时用它,不用故意让一条评估用例失败。
--keep-sandbox 的运行总会真实执行,不会沿用上次的结果。
运行结束后,摘要里会列出保留了哪些 Sandbox、怎么进去:
niceeval show @<attempt-locator> 或 niceeval view --run <run-id> 查看。
保留下来的 Sandbox 不会一直跑着消耗资源:Docker 容器停在磁盘上,E2B 微 VM 暂停计费,Vercel 保存文件系统。
进入现场
niceeval sandbox enter 会先唤醒再进入,在工作目录打开 shell。进去之后就是这次 Attempt 跑完时的环境,可以手动执行命令、翻文件、复现失败。
退出 shell 后,现场自动回到休眠。想让它保持运行,加 --leave-running。
查看和清理
保留下来的 Sandbox 由项目记录在案,用niceeval sandbox 管理:
niceeval.config.ts。即使配置文件暂时无法执行,你仍可以查看或销毁现场。命令会读取 .env 来准备 Provider 凭据;.env 不可读时,先修复它再重试。
sandbox 命令没有 --json 输出。niceeval sandbox list --json 会直接提示 Unknown option '--json',不会继续打印人读文本。
stop 可以重复执行。Sandbox 已经不在了(手动删过、云端过期)不算错误,命令只会把记录移掉并说明。如果 Provider 销毁失败,命令会保留记录并返回错误,方便稍后重试,不会把仍活着的资源从列表里藏掉。
忘了清理也有提醒:下次运行开始时,如果还有上次保留的 Sandbox,终端会打一行提示。
各 Provider 的差别
- Docker:容器停在磁盘上,不占内存,重启 Docker 也还在,进入时自动启动。容器不会自己消失,是唯一需要主动清理的 Provider。除了
niceeval sandbox stop,也可以用docker ps -a -f label=niceeval.keep-candidate=true直接核对。 - E2B:暂停微 VM,文件和内存整体保存。暂停期间停止计费、无限期保留,进入时自动恢复。
- Vercel Sandbox:停止微 VM,文件系统保存、之后可恢复,但内存状态不保留,唤醒后进程要重新启动。超过 Provider 的保留期限后,
niceeval sandbox list会标成expired。 - 自定义 Provider:
defineSandbox产出的 Provider 不支持保留现场。事后的sandbox stop不加载用户配置,无法在新进程里安全找回你写的销毁函数。
边界
保留的 Sandbox 只用来排查,不能接着跑,也不能重新评分。判定、断言和文件改动以已经保存的结果为准。在现场里改了什么都不会写回结果。查看结果的方法见查看运行结果。 运行被强杀后留下、没有登记的 Sandbox 不在sandbox list 里,回收方法见运行被强杀后恢复。