Plugins
Plugin Lifecycle
理解 lifecycle-owned plugin、plugin runtime 状态,以及 start/stop/command 和 enablement/availability 的区别
Plugin Lifecycle
Plugin lifecycle 讨论的是“长期运行状态由谁持有”。
它和这些概念都不是一回事:
- 静态 enablement
- runtime availability
- 一次性 actions
lifecycle 使用面
一个具备 lifecycle 的 plugin 可以声明:
lifecycle.startlifecycle.stoplifecycle.command
这些接口是给 plugin-owned runtime 用的,不是普通一次性能力调用。
什么场景适合 lifecycle
当 plugin 必须持有这些能力时,就更适合 lifecycle:
- workers
- poll loops
- 长连接
- 内存 runtime state
- 可恢复的 runtime engines
典型例子:
chattaskmemoryshell
ActionSchedule 不是 plugin;它是跟随 agent.start() 启动的 Agent 级 action 调度 loop。
runtime state 不等于 enablement
下面这些是不同事实:
enabled:city 级 lifecycle 策略是否允许插件开启available:运行时检查是否认为插件当前可用running:lifecycle runtime 当前是否真的已经启动
runtime state 快照
当前 runtime state 快照常见状态包括:
runningstoppedstartingstoppingerror
什么会启动 lifecycle plugins
在本地 SDK 里,plugin lifecycle 一般通过下面这类入口启动:
await agent.start({
plugins: true,
});更高级的 runtime 代码也可以直接使用这些导出 helper:
startAllPlugins(context)stopAllPlugins(context)
lifecycle command 和 action 的区别
当 plugin 需要一个 runtime-control 命令时,例如:
- reload
- reschedule
- restart
更适合用 lifecycle.command。
当 plugin 暴露的是普通能力工作时,更适合用 actions。
task 就是同时具备两者的一个典型例子。
managed 和 local plugin 的心智模型
有一个很有用的区分是:
- local plugin:不依赖运行中的 lifecycle
- managed plugin:持有 lifecycle 行为