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") 返回 null
  • agent.plugins.runAction({ plugin: "skill", ... }) 会返回 unknown plugin
  • 这个 plugin 的 system、hooks、resolves 都不会再参与后续运行

lifecycle.start / lifecycle.stop

Plugin 仍然可以声明 lifecycle:

  • lifecycle.start
  • lifecycle.stop
  • lifecycle.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");

状态只保留:

  • ready
  • error

未注册的 plugin 不需要状态,因为它已经不在 registry 里。

ActionSchedule

ActionSchedule 不是 plugin。

它是 Agent 级 action 调度 loop,跟随 Agent 后台能力启动。到期任务会重新调用已注册 plugin 的 action。

相关文档