LAYER 02 · 掌握组合语法

Context:插件的协作面

服务发现、事件分发、依赖检查和 effect 所有权在同一个作用域相遇

15 min2 处源码锚点upstream@47f9438
ctx.service + ctx.on + ctx.effect
本章要解决的问题

Context 是一个更方便的全局变量,还是系统的边界对象?

先建立直觉

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 对副作用和异步生命期的所有权。

Learn DeepSeek Harness

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