中间件
中间件让你在不改动内核的前提下为循环加横切行为:日志、重试、权限闸门、压缩。中间件是加在轮次循环上的层——内核把你的层折叠成经典洋葱,每层在进入时看到调用、在返回时看到结果。lite-agent 的权限和压缩本身就只是中间件,这自证了接缝:它们能做的,你自己的层也能做。
用法
通过 createAgent 的 use 传入中间件:
Middleware 接口
一个 Middleware 可以实现生命周期钩子和两个包装器:
AgentContext 是中间件拿到的唯一句柄:sessionId、可变的 messages、turn、signal、emit、共享的 state Map,以及用于持久化自定义事实的 recordSessionEvent。没有全局变量。
洋葱模型:折叠顺序
composeModelCall 和 composeToolCall 用 reduceRight 把中间件数组折叠在基础调用之外——数组顺序即 外 → 内。给定 use: [a, b],一次模型调用的流向是 a → b → provider → b → a。runLifecycle 只是按数组顺序依次运行钩子。
数组中第一个中间件是最外层——进入时它最先看到调用,返回时最后看到结果。
内置中间件
权限就是一个中间件。 门控没有任何硬编码进内核的部分;你可以像对待其他任何层一样重排、替换或移除这些层。