LAYER 02 · 掌握组合语法

Service 与 Event:能力和协作要分开

Service 回答“谁能做”,Event 回答“何时让别人参与”

17 min3 处源码锚点upstream@47f9438
service = capability · event = extension point
本章要解决的问题

什么时候应该调用 ctx.fs,什么时候应该监听 fs/write-intent?

先建立直觉

医院的影像科是一项 Service:有明确接口和唯一当前提供者。术前会诊是 Event:多个科室按协议参与、观察或改变决策。

MECHANISM

机制拆解

Service 适合有身份、方法和替换实现的能力;事件适合横切策略、观察和 waterfall 改写。

DeepSeek Harness 把事件分成持久 SessionEvent、实时 agent/* 与能力事件;选择错误会导致回放污染或控制丢失。

第 1 步 / 共 4 步

声明契约

Service 定义方法;Event 定义 payload 与分发模式。

INVARIANTS

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

  • Waterfall 监听器必须显式调用 next() 才会委托下游
  • 最终事实只有一个权威版本
  • 持久事件的 payload 必须是无损 JSON
FAILURE MODES

最容易踩中的坑

  • ×用广播事件实现需要返回值的能力
  • ×在观察事件中偷偷改写状态
  • ×把回调异常传播到权威分发器
VERIFY IN SOURCE

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

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

KNOWLEDGE CHECK

先停十秒,再揭晓答案

审批为什么是一个 waterfall,而不是普通广播?

为什么下一章紧接在这里

下一章加入 scope:同一个服务与事件协议,如何在不同 Agent 世界里拥有不同实现。

Learn DeepSeek Harness

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