LAYER 06 · 动手扩展并交付

实战:Web、CLI、ACP、SDK 与 Host

入口适配协议、Host 拥有运行时,客户端从 SessionEvent 投影;没有第二套 Agent 内核

21 min3 处源码锚点upstream@47f9438
surface input → ctx.agents → session/event → projection
本章要解决的问题

Web UI 的按钮如何安全地变成 Agent 行为,又不让浏览器直接拥有业务状态?

先建立直觉

客户端像不同语言的客服窗口,Host 是后台业务中心。窗口翻译请求并展示档案,业务规则和唯一记录都在后台。

MECHANISM

机制拆解

ctx.apiProxy 提供 transport-neutral Host gateway;每条 Host 流自行订阅事件。Web client module graph 通过 dsh.client 扫描组合,HMR 更新客户端插件。

ACP、CLI、Headless 和 SDK 都通过 ctx.agents 创建/恢复或驱动 Agent,从 session/event 渲染;命令可通过 ctx.commands 绕过模型轮次但仍遵循服务边界。

第 1 步 / 共 5 步

适配输入协议

Browser RPC、ACP request 或 CLI command 转成 Host 调用。

INVARIANTS

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

  • 客户端表面不保存第二份权威 Agent 状态
  • 持久 transcript 消费 session/event,不消费 agent/*
  • Host 流独立拥有订阅与处置
FAILURE MODES

最容易踩中的坑

  • ×浏览器本地 optimistic state 覆盖权威结果
  • ×把 agent/status 写入持久 transcript
  • ×共享一个全局广播器导致连接间事件泄漏
VERIFY IN SOURCE

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

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

KNOWLEDGE CHECK

先停十秒,再揭晓答案

为什么 SDK 要消费 session/event 而不是仅监听 assistant 文本?

为什么下一章紧接在这里

最后一章把工具、Provider 与表面装进 Profile/Bundle,并建立版本、测试和上游同步策略。

Learn DeepSeek Harness

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