LAYER 02 · 掌握组合语法
Context:插件的协作面
服务发现、事件分发、依赖检查和 effect 所有权在同一个作用域相遇
ctx.service + ctx.on + ctx.effectContext 是一个更方便的全局变量,还是系统的边界对象?
先建立直觉
Context 像一张有权限边界的园区通行证:它告诉你能看到哪些设施、能订阅哪些广播、能在哪个区域安装设备,并记录设备离场时要拆掉什么。
MECHANISM
机制拆解
插件不直接 import 具体实现,而是从 ctx 发现声明过的服务;依赖缺失会在组合阶段暴露。
子 Context 继承父级可见能力,同时拥有独立 effect 与事件作用域,为 Agent 局部能力提供基础。
第 1 步 / 共 4 步
创建 Context
父级、隔离域与配置确定初始可见性。
INVARIANTS
无论怎么扩展,都不能破坏
- Context 引用本身携带作用域语义
- 服务重复注册按契约失败,而不是静默覆盖
- dispose 后的 Context 不应接受新的注册
FAILURE MODES
最容易踩中的坑
- ×把 ctx 当依赖注入容器的同义词而忽略事件与生命周期
- ×在模块顶层缓存跨 Agent 的 service
- ×绕过 ctx 直接实例化 provider
VERIFY IN SOURCE
不要相信结论,去源码里复核
以下链接固定到官方 deepseek-harness@47f9438;查看当前上游时请留意后续 breaking changes。
KNOWLEDGE CHECK
先停十秒,再揭晓答案
为什么 Agent 局部工具注册应挂在 agent.ctx,而不是根 ctx?
为什么下一章紧接在这里
Context 之所以能安全重组,关键在 effect 与 fiber 对副作用和异步生命期的所有权。