Plugins
Plugin Lifecycle
理解 Agent plugin 的注册、卸载,以及 lifecycle.start / lifecycle.stop 什么时候执行
Plugin Lifecycle
Plugin 只属于 Agent。
它的生命周期可以简化成两件事:
- 注册:plugin 成功进入
agent.plugins - 卸载:plugin 成功从
agent.plugins移除
宿主直接调用 agent.plugins 时会立即看到新的 configured registry。已有 Session 的执行视图则在下一个 Session step 检查点切换;当前 provider 请求继续使用本 step 已捕获的 action、metadata 与 system 视图,execution lease 也会保证旧 plugin lifecycle 持续到本 step 及其工具调用结束。如果当前 Session turn 没有后续 step,则在下一个 Session turn 开始时切换。
不再需要单独理解 start、stop、restart 或项目级 enabled 开关。
注册就是启用
Agent 构造时传入的 plugin 会自动注册:
const agent = new Agent({
id: "agent",
path: process.cwd(),
plugins: [new WebPlugin()],
});
await agent.ready();Agent 实例化之后,也可以继续注册 plugin:
await agent.plugins.register(new SkillPlugin());同名 plugin 再次注册表示替换。Runtime 会先卸载旧实例,再注册新实例。
卸载就是停用
await agent.plugins.unregister("skill");卸载后:
agent.plugins.get("skill")返回nullagent.plugins.runAction({ plugin: "skill", ... })会返回 unknown plugin- 这个 plugin 的 system、hooks、resolves 都不会再参与后续运行
lifecycle.start / lifecycle.stop
Plugin 仍然可以声明 lifecycle:
lifecycle.startlifecycle.stoplifecycle.command
但它们不再是公开状态机。
规则很简单:
register(plugin)时自动调用plugin.lifecycle?.start(context)unregister(name)会立即从 configured registry 移除 plugin;活跃 Session step 的 lease 释放后再调用plugin.lifecycle?.stop(context)agent.dispose()时会卸载全部 plugin
适合 lifecycle 的场景包括:
- workers
- poll loops
- 长连接
- 内存 runtime state
- 可恢复的 runtime engines
查看注册状态
agent.plugins.snapshots();
agent.plugins.status("skill");
agent.plugins.has("skill");状态只保留:
readyerror
未注册的 plugin 不需要状态,因为它已经不在 registry 里。
ActionSchedule
ActionSchedule 不是 plugin。
它是 Agent 级 action 调度 loop,跟随 Agent 后台能力启动。到期任务会重新调用已注册 plugin 的 action。