LAYER 06 · 动手扩展并交付
实战:Web、CLI、ACP、SDK 与 Host
入口适配协议、Host 拥有运行时,客户端从 SessionEvent 投影;没有第二套 Agent 内核
surface input → ctx.agents → session/event → projectionWeb 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,并建立版本、测试和上游同步策略。