Skip to main content
Plugin 是带稳定身份的生命周期组合方式。它适合把一项条件在不同运行范围内需要的 setup 和 teardown 放在一起。 Plugin 不配置 Agent,不提供另一套 Sandbox 命令或资源系统。Agent 的 Skill、MCP server、原生 Plugin 和配置文件仍直接传给 Agent factory;Sandbox image 和命令仍写在 sandbox 声明中。

定义多个生命周期

所有 Plugin API 都从 niceeval/plugin 导入:
name 命名 Plugin family。instanceKey(options) 区分同一 family 的不同配置。实现语义改变时提高 behaviorRevision,让旧结果不再被精确沿用。 无参数 family 可以省略 instanceKey,其固定实例键是 "default"。每个 fragment 可以声明 identity,并且必须至少提供 setupteardown

在一个位置组合多个 Plugin

plugins 始终接收数组:
Setup 按数组顺序运行,teardown 按逆序运行。一个 Plugin 的 setup 失败时,NiceEval 仍会调用该 occurrence 的 teardown,并继续执行其它终结 callback。

选择生命周期范围

一个 family 可以声明四种 fragment: 调用方只在 defineExperimentdefineEvalGroupdefineEvalplugins 数组挂载 occurrence。若 occurrence 同时声明 sandbox fragment,NiceEval 会自动把它用于该 owner 对应的物理 Sandbox;SandboxLayer 没有额外的 Plugin 挂载语法。
完整沿用的 Attempt 不运行 Plugin lifecycle。部分沿用时,只有实际运行的范围会激活对应 lifecycle。

先检查计划

先确认 Plugin identity 和实际需要运行的 Attempt:
修改 setup 或 teardown 的行为时,同时提高 behaviorRevision。只改 callback 函数体但不改身份,NiceEval 无法知道旧结果对应的行为已经变化。

接着看