谁负责结束这个 Agent?
比较同一个父 Agent P 与子实例 C。改变调用 Context 和 parentAgent,分别观察资源归属与 Registry 分类。
01 / 创建入口
调用方和登记关系都指向 P
C 的 lifecycle effect 登记在 P.ctx,Registry 的 parentAgent 也指向 P。两种关系一致,各自承担自己的职责。
Registry 记为子实例,资源仍由 root 持有
parentAgent 只进入 Registry 的 owner 字段;它不会把已经登记在 root 的 lifecycle effect 搬到 P 的 Scope。
Registry 列为根,资源仍随 P 的 Scope 退出
资源归属来自调用方 Context;省略 parentAgent 不会抹掉这条 effect 关系,但 Registry 仍把 C 列在 roots 中。
工厂提供者 → 同一次清理提供者卸载会收回它创建的实例。
P.ctx 的 Fiber → 同一次清理P 退出会触发这里;资源归属由调用入口决定。
清理 → C 的 Scope 与活 Session停止活动、释放 Scope、如有写 handle,先关闭。
工厂提供者 → 同一次清理提供者卸载会收回它创建的实例。
root 的 Fiber → 同一次清理P 退出不触发这里;资源归属由调用入口决定。
清理 → C 的 Scope 与活 Session停止活动、释放 Scope、如有写 handle,先关闭。
工厂提供者 → 同一次清理提供者卸载会收回它创建的实例。
P.ctx 的 Fiber → 同一次清理P 退出会触发这里;资源归属由调用入口决定。
清理 → C 的 Scope 与活 Session停止活动、释放 Scope、如有写 handle,先关闭。
P 退出后,C 已完成清理
这里比较父 Agent P 的退出;工厂提供者退出仍会触发对 C 的清理。
P 退出后,C 仍然存活
这里比较父 Agent P 的退出;工厂提供者退出仍会触发对 C 的清理。
P 退出后,C 已完成清理
这里比较父 Agent P 的退出;工厂提供者退出仍会触发对 C 的清理。
02 / 分开检查三种关系
const child = await P.ctx.agents.create({
sessionId: childId,
parentAgent: P,
})
await parentHandle.dispose()
// C 的 Scope、写 handle 与活登记已退出。const child = await root.agents.create({
sessionId: childId,
parentAgent: P,
})
await parentHandle.dispose()
// C 仍存活;应由 child.dispose() 等入口清理。const child = await P.ctx.agents.create({
sessionId: childId,
})
await parentHandle.dispose()
// C 随调用方清理,roots() 的分类不代替清理。| 查询 | 结果 |
|---|---|
entry.owner | P 的确切 Agent 对象 |
roots().includes(C) | 否 |
meta.parentSession | 另行提供的持久谱系,不参与 effect 迁移 |
| 查询 | 结果 |
|---|---|
entry.owner | P 的确切 Agent 对象 |
roots().includes(C) | 否 |
meta.parentSession | 另行提供的持久谱系,不参与 effect 迁移 |
| 查询 | 结果 |
|---|---|
entry.owner | undefined |
roots().includes(C) | 是 |
meta.parentSession | 另行提供的持久谱系,不参与 effect 迁移 |
P 退出后,C 已完成清理 parentAgent 不会自动迁移清理函数。 parentSession 不会自动建立进程内 owner。 工厂与返回 handle 仍可结束 C 的生命周期。
P 退出后,C 仍然存活 parentAgent 不会自动迁移清理函数。 parentSession 不会自动建立进程内 owner。 工厂与返回 handle 仍可结束 C 的生命周期。
P 退出后,C 已完成清理 parentAgent 不会自动迁移清理函数。 parentSession 不会自动建立进程内 owner。 工厂与返回 handle 仍可结束 C 的生命周期。
查看实验依据与边界
核心运行时实验 23–25,未挂载 Subagent 管理器等额外消费者。资源 owner、Registry owner 与持久谱系独立设置;这张图不表示权限校验或完整 Turn 状态机。
agent/src/index.ts:391–415, 459–479, 570–600 · agent-loop/src/index.ts:601–662