LAYER 03 · 追踪 Agent 主干

Agent 的创建、所有权与取消

Agent 不是一个 while 循环,而是带身份、Session、Inbox、Context 和停稳协议的活对象

19 min3 处源码锚点upstream@47f9438
create/resume → setup transaction → publish → dispose
本章要解决的问题

谁有权销毁一个 Agent?创建失败一半时又如何回滚?

先建立直觉

AgentHandle 像租赁车辆的钥匙与合同:注册表可以查询车辆,但只有持有合同的所有者能结束租赁并触发完整验收。

MECHANISM

机制拆解

ctx.agents.create/resume 返回 AgentHandle;setup 在 Agent 与 Session 尚未发布时构建 agent.ctx,可返回同步 commit。任何失败都会回滚两个身份。

cancel 只请求当前活动收敛;whenIdle 跟随替代工作直到真正静止;dispose 停止循环、注销、移除内存 Session,再拆除局部 Context。

第 1 步 / 共 5 步

分配共享身份

AgentId 与 SessionId 使用同一品牌身份。

INVARIANTS

无论怎么扩展,都不能破坏

  • Agent 与 Session 身份要么同时发布,要么都不发布
  • 取消原因 first-wins 且不武装未来工作
  • dispose holder 是一种 capability
FAILURE MODES

最容易踩中的坑

  • ×拿 ctx.agents.get() 的裸 Agent 假装拥有销毁权
  • ×把 whenIdle 当成某条消息的回执
  • ×取消后立即删除 provider service
VERIFY IN SOURCE

不要相信结论,去源码里复核

以下链接固定到官方 deepseek-harness@47f9438;查看当前上游时请留意后续 breaking changes。

KNOWLEDGE CHECK

先停十秒,再揭晓答案

Agent.cancel() 与 AgentHandle.dispose() 有什么不同?

为什么下一章紧接在这里

Agent 的耐久身份依赖 Session。下一章把 SessionEvent 日志作为整个系统的事实真源来拆解。

Learn DeepSeek Harness

独立教学项目。解释力来自源码,判断边界以官方仓库为准。