🐳 第三章 一切皆插件意味着什么
📄 一句话概括

会话级能力挂在 Agent Plane 的作用域上下文上——会话开始挂上、结束销毁;配置树里那句 ctx.get('profileContext') 就是它的真实入口。

📝 本节和前面几节的关系

1.2 给过一句口诀:会话内的进预设,跨会话的留宿主。这一节把口诀背后的机制讲清楚:那个【会话内】到底是个什么东西。

一、两个平面:一份的和每人一份的

打个比方:宿主平面是整栋楼的水电与门禁,会话平面是你租的那间房——退房时,房间里的东西跟着清走,楼还在。

二、Scope Context:会话的【房间】

会话的作用域上下文(Scope Context)就是那间房的【房间登记表】:会话开始时开卡,会话结束时销卡。

它不是抽象概念,配置树里有真实入口——插件可以这样声明条件加载:

disabled: !!js '!ctx.get('profileContext')'

这行的意思是:去当前作用域(ctx)里取会话上下文,取不到就不加载。只有真开了一个会话,这类插件才会挂上来。

三、能力怎么挂上来,又怎么消失

注意区分两样东西:Trajectory(会话记录)留下,能力不留——记录归持久化管(宿主平面),能力挂在会话平面。

四、为什么能力要跟着会话走

五、动手 Demo:两个平面,各管什么

把两个平面的分工与生命周期放到一张表里:

planes = [
    ("Host Plane", "整个进程一份",
     "注册表、沙箱、模型路由、持久化", "进程退出"),
    ("Agent Plane", "每个会话一份",
     "工具、人格、提示段", "会话结束"),
]
for a, b, c, d in planes:
    print("  %-12s %s" % (a, b))
    print("    挂什么: %s" % c)
    print("    何时消失: %s" % d)
print()
print("会话结束时:会话平面销毁 19 件,宿主平面 0 变化")

实跑输出:

--------------------------------------------------------------------
两个平面,各管什么
--------------------------------------------------------------------
  Host Plane 与 Agent Plane,一张表分开:

  平面            几份             挂什么                             什么时候消失
  ---------------------------------------------------------------------------------
  Host Plane      整个进程一份     注册表、沙箱、模型路由、持久化     进程退出
  Agent Plane     每个会话一份     工具、人格、提示段                 会话结束
  ---------------------------------------------------------------------------------

  配置树里有一行真实的条件加载写法:

    disabled: !!js '!ctx.get(''profileContext'')'

  里面的 ctx,就是会话的作用域上下文(Scope Context)。
  插件能不能挂上来,先要问它:当前作用域里有没有我要的东西。

  算一笔账:一个会话按 Standard 起手,结束时发生什么?

    会话平面销毁的插件      19 件(随会话一起没了)
    宿主平面变化            0 件(注册表、沙箱都还在)
    会话记录(Trajectory)  留下(记录归持久化管,不随作用域销毁)

  一句话:能力跟着会话生、跟着会话死;记录留下,能力不留。

配置树里那句 ctx.get('profileContext') 值得记住——【会话级】不是注释里的形容词,是代码里的一个取值判断。 会话结束时销毁的是能力,不是记录:Trajectory 是 append-only 的日志,永远留着。 这个设计像租房:退房清房间,楼不塌。

30 秒实验

  1. 在配置树里搜 profileContext,找到那行条件加载,读一遍它的意思。
  2. 开两个会话,在 A 里用一个特殊工具,到 B 里看——B 里应该没有。
  3. 复述一遍:会话结束后,什么留下了、什么消失了?

常见误区

  1. 错误:插件是全局的,装了大家都能用。——纠正:会话级插件挂在自己的作用域上,别的会话看不见。
  2. 错误:会话结束了,能力也留下来了。——纠正:留下的是 Trajectory 记录;能力随作用域销毁。
  3. 错误:Host Plane 与 Agent Plane 是两台服务器。——纠正:是同一个进程里的两个作用域,一台机器上就有。
自测三问(点开对答案) 1. 两个平面各管什么? —— 宿主平面管进程级(注册表、沙箱、路由、持久化);会话平面管会话级(工具、人格、提示段)。 2. `ctx.get('profileContext')` 在配置里起什么作用? —— **作为条件加载的判断**:取不到会话上下文就不加载,保证插件只在会话内挂上。 3. 会话结束后,能力和记录各自的命运? —— 能力随作用域销毁;**Trajectory 记录由持久化保存**,可以回放。

相关笔记