<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI架构 · AI Times</title><link>https://blog.havenice.day/tag/ai%E6%9E%B6%E6%9E%84/</link><description>AI 时代，中年人倔强的记录</description><language>zh-CN</language><lastBuildDate>Wed, 26 Aug 2026 18:25:59 +0800</lastBuildDate><atom:link href="https://blog.havenice.day/tag/ai%E6%9E%B6%E6%9E%84/index.xml" rel="self" type="application/rss+xml"/><item><title>DeepSeek Harness 精读：一个「一切皆插件」的 Agent 运行时</title><link>https://blog.havenice.day/2026/08/26/deepseekharness-jing-du-yi-ge-yi-qie-jie-cha-jian-de-agent/</link><pubDate>Wed, 26 Aug 2026 18:25:59 +0800</pubDate><guid>https://blog.havenice.day/2026/08/26/deepseekharness-jing-du-yi-ge-yi-qie-jie-cha-jian-de-agent/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;精读对象：github.com/deepseek-ai/deepseek-harness（dsh），2026-08-26 克隆自 master 分支&lt;br&gt;&#10;版本：0.1.x 开发者预览（rc 阶段）· MIT 许可&lt;br&gt;&#10;精读重点：&lt;strong&gt;轨迹日志（事件溯源）&lt;/strong&gt; 与 &lt;strong&gt;插件系统（Cordis / seam）&lt;/strong&gt; 两套核心设计&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="0-一句话速览"&gt;0. 一句话速览&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;dsh 不是又一个 AI 编程工具，而是一个”Agent 外壳”的插件平台。&lt;/strong&gt; 它的核心命题是：&lt;code&gt;Agent = 模型 + Harness&lt;/code&gt;——模型只负责推理，Harness 负责把模型接进文件、命令、工具、会话、权限与界面。而它赌的架构是：&lt;strong&gt;Harness 本身没有特权内核，一切能力都是可插拔的插件&lt;/strong&gt;，包括模型适配器、工具、沙箱、会话日志，甚至 Agent 循环本身。&lt;/p&gt;&#10;&lt;p&gt;两套最值得读的设计：&lt;/p&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;设计&lt;/th&gt;&#10;&lt;th&gt;一句话概括&lt;/th&gt;&#10;&lt;th&gt;杀手锏&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;轨迹日志&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;会话 = 一条仅追加的事件日志，是唯一真源&lt;/td&gt;&#10;&lt;td&gt;“模型可见即已记录”——模型看到的一切都能从日志重建&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;插件系统&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;Cordis 微内核只管装配，能力按 seam（缝）三件套组织&lt;/td&gt;&#10;&lt;td&gt;换掉一个提供方就能改变整个产品，不用改源码&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="1-轨迹日志事件溯源式会话精读重点-1"&gt;1. 轨迹日志：事件溯源式会话（精读重点 #1）&lt;/h2&gt;&#10;&lt;h3 id="11-设计哲学模型可见即已记录"&gt;1.1 设计哲学：模型可见即已记录&lt;/h3&gt;&#10;&lt;p&gt;这是 dsh 的第一条铁律，由&lt;strong&gt;运行时不变量&lt;/strong&gt;强制断言：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;抵达模型请求的一切都必须能从日志重建。&lt;/strong&gt; 新增任何一项模型可见输入，就必须新增一个会话事件类型。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;也就是说：日志不是”聊天记录的副本”，而是&lt;strong&gt;唯一真源&lt;/strong&gt;。LLM 的消息历史是从日志&lt;em&gt;派生&lt;/em&gt;出来的（&lt;code&gt;deriveMessages()&lt;/code&gt;），&lt;strong&gt;从不单独存储&lt;/strong&gt;。回放 = 用同一组事件重新派生一遍。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://blog.havenice.day/wp-content/uploads/2026/08/dsh-dataflow.png" alt="会话事件溯源数据流"&gt;&lt;/p&gt;&#10;&lt;p&gt;派生的好处：&lt;strong&gt;历史永远不会和日志不一致&lt;/strong&gt;——不存在”存了一份消息数组、又改了日志”的双写问题。所有下游消费方（UI 转录、遥测、会话标题、搜索索引）都从同一份事件流派生，各取所需。&lt;/p&gt;&#10;&lt;h3 id="12-事件词汇表日志里有什么"&gt;1.2 事件词汇表：日志里有什么&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;SessionEventMap&lt;/code&gt; 定义了事件类型，&lt;strong&gt;插件可以通过 TypeScript 声明合并扩展&lt;/strong&gt;（见 §2.4）。核心事件如下：&lt;/p&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;事件&lt;/th&gt;&#10;&lt;th&gt;作用&lt;/th&gt;&#10;&lt;th&gt;说明&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;turn/start&lt;/code&gt; / &lt;code&gt;turn/end&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;轮次边界&lt;/td&gt;&#10;&lt;td&gt;轮次 = 一次排空已接纳输入的过程；&lt;code&gt;turn/end&lt;/code&gt; 带结束原因&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;step/start&lt;/code&gt; / &lt;code&gt;step/end&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;步骤边界&lt;/td&gt;&#10;&lt;td&gt;步骤 = 一次模型请求 + 它触发的工具执行&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;user/message&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;用户输入&lt;/td&gt;&#10;&lt;td&gt;普通提示词、注入上下文（&lt;code&gt;agent.inject()&lt;/code&gt;）、目标续行共用一个类型，靠 &lt;code&gt;source&lt;/code&gt; 区分&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;assistant/chunk&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;strong&gt;原始流分片&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;token 级回放保真——UI 能逐字重现输出过程&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;assistant/message&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;组装后的模型回复&lt;/td&gt;&#10;&lt;td&gt;携带 &lt;code&gt;usage&lt;/code&gt;（token 记账随消息走）；中断的回复标记 &lt;code&gt;interrupted&lt;/code&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;tool/call&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;工具调用&lt;/td&gt;&#10;&lt;td&gt;&lt;strong&gt;保留模型产出的原始 JSON 参数&lt;/strong&gt;（未解析），&lt;code&gt;callId&lt;/code&gt; 与结果配对&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;tool/result&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;工具结果&lt;/td&gt;&#10;&lt;td&gt;可选携带 &lt;code&gt;error&lt;/code&gt; 和工具私有 &lt;code&gt;meta&lt;/code&gt;（如文件 diff 卡片）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;todo/write&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;待办全量快照&lt;/td&gt;&#10;&lt;td&gt;整表替换、last-write-wins，故意不做成带 id 的条目&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;request/header&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;strong&gt;请求完整信封&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;调用配置 + 系统提示词 + 工具 schema 全量快照，每次变化记一份&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;request/context&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;路由元数据&lt;/td&gt;&#10;&lt;td&gt;提供方/模型/上下文窗口，容量变化时记录&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;session/end-seed&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;种子边界&lt;/td&gt;&#10;&lt;td&gt;标记”哪些事件是恢复/fork 继承的、哪些是本进程新写的”&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;几个细节非常见功力：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;seq&lt;/code&gt; 必须连续&lt;/strong&gt;（&lt;code&gt;seq = log.length&lt;/code&gt;），因此不能从规范日志里过滤分片——连 &lt;code&gt;assistant/chunk&lt;/code&gt; 都必须无损保存。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;所有 &lt;code&gt;data&lt;/code&gt; 必须是可无损 JSON 序列化的&lt;/strong&gt;。&lt;code&gt;Session.append()&lt;/code&gt; 在写入前做一次递归校验（BigInt、函数、循环引用、Map/Set 一律拒绝），&lt;strong&gt;坏事件在源头就失败&lt;/strong&gt;，绝不让错误进入日志。这对”日志即真源”是底线保障。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;热路径不阻塞 I/O&lt;/strong&gt;：追加是同步进内存，持久化插件异步批量落盘。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="13-surface-机制如何从日志长出模型历史"&gt;1.3 Surface 机制：如何从日志”长”出模型历史&lt;/h3&gt;&#10;&lt;p&gt;不是所有事件都投影成消息。只有 3 种”产生消息”的事件（&lt;code&gt;user/message&lt;/code&gt;、&lt;code&gt;assistant/message&lt;/code&gt;、&lt;code&gt;tool/result&lt;/code&gt;）携带 &lt;code&gt;surfaceOp&lt;/code&gt;，声明自己如何加入有序的派生 surface：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;append&lt;/code&gt;：普通尾部追加。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;replace&lt;/code&gt;：&lt;strong&gt;遮蔽&lt;/strong&gt;从 start 到 end 的一段旧节点，在原位插入新事件。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;code&gt;replace&lt;/code&gt; 是&lt;strong&gt;压缩（compaction）&lt;/strong&gt; 的落点：上下文太长时，压缩插件把一段旧历史折叠成一条摘要，用 &lt;code&gt;replace&lt;/code&gt; 遮蔽旧节点——&lt;strong&gt;日志本身一个字不删&lt;/strong&gt;，只是”模型视野”里那一段被摘要替代了。这就是”日志永远可审计、只被遮蔽、不被删除”。&lt;/p&gt;&#10;&lt;p&gt;每个 surface 事件还携带 &lt;code&gt;sourceEventSeqs&lt;/code&gt;（引用了哪些早期事件），比如 &lt;code&gt;assistant/message&lt;/code&gt; 会引用构成它的 &lt;code&gt;assistant/chunk&lt;/code&gt; 序号。压缩时被遮蔽的节点也必须在 &lt;code&gt;sourceEventSeqs&lt;/code&gt; 里列全——&lt;strong&gt;血缘可追溯&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="14-持久化与崩溃恢复"&gt;1.4 持久化与崩溃恢复&lt;/h3&gt;&#10;&lt;p&gt;持久化本身是一个 &lt;strong&gt;seam&lt;/strong&gt;（见 §2.3）：&lt;code&gt;ctx.sessions&lt;/code&gt; 只做内存事件存储，持久化由插件订阅 &lt;code&gt;session/event&lt;/code&gt; 完成。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;flush 检查点&lt;/strong&gt;：&lt;code&gt;session/flush&lt;/code&gt; 是显式耐久屏障；日常写入走异步批量缓冲（固定时间窗，窗口内事件不重置截止时间）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;两个可互换后端&lt;/strong&gt;：JSONL（逐会话追加日志，默认 Zstandard 压缩 + checksum，原子写入）和 SQLite（schema 17，同一分片块内字段完全匹配的 delta 段做有界物理存储）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;崩溃恢复的优雅之处&lt;/strong&gt;：重新加载时发现一个”开了 &lt;code&gt;turn/start&lt;/code&gt; 却没有 &lt;code&gt;turn/end&lt;/code&gt;“的轮次，&lt;strong&gt;不截断日志&lt;/strong&gt;（长任务里一个轮次可能很大，删了就是丢数据），而是合成一个 &lt;code&gt;turn/end { kind: 'interrupted' }&lt;/code&gt; 把它配平——这是唯一一个不由循环发出的结束原因。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;格式拒绝&lt;/strong&gt;：遇到版本更新的日志、或未知的&lt;em&gt;必需&lt;/em&gt;事件类型（没有 &lt;code&gt;ignorable&lt;/code&gt; 标记），后端&lt;strong&gt;拒绝加载而不是静默跳过&lt;/strong&gt;——因为”跳过一条可能改变整体解读的事件”比”拒绝”危险得多。新格式明确提示”由更新的 harness 写入，请升级”。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;fork / resume&lt;/strong&gt;：可以从任意稳定轮次间位置 fork；恢复时元数据里存了 &lt;code&gt;agentPreset&lt;/code&gt;——因为 preset 决定工具和提示词，&lt;strong&gt;恢复成不同的组合等于让模型回放一段它无法再行动的历史&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="15-为什么说这是杀手锏"&gt;1.5 为什么说这是杀手锏&lt;/h3&gt;&#10;&lt;p&gt;对跑 Agent 的人来说，最贵的成本是”&lt;strong&gt;它到底为什么搞砸了&lt;/strong&gt;“。dsh 的答案：日志里什么都有，且保证能重建。调试一个跑了 50 步的 Agent 任务，可以回放、定位到出错的那一步、看当时模型看到的完整上下文、连原始流分片都在。这同时是审计、基准测试（同一任务换模型对比）、以及多 Agent 协作排障的基础设施。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="2-插件系统cordis-微内核--能力-seam精读重点-2"&gt;2. 插件系统：Cordis 微内核 + 能力 seam（精读重点 #2）&lt;/h2&gt;&#10;&lt;h3 id="21-五个核心概念cordis-入门"&gt;2.1 五个核心概念（Cordis 入门）&lt;/h3&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;概念&lt;/th&gt;&#10;&lt;th&gt;含义&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;插件&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;实现 Service 的对象（函数 + &lt;code&gt;apply(ctx)&lt;/code&gt; 或 Service 子类），生命周期由 Cordis 管理&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;上下文&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;服务的容器。服务占据稳定的 &lt;code&gt;ctx.&amp;lt;key&amp;gt;&lt;/code&gt;（如 &lt;code&gt;ctx.llm&lt;/code&gt;、&lt;code&gt;ctx.tools&lt;/code&gt;），其他插件&lt;strong&gt;按 key 查找服务，绝不 import 具体实现&lt;/strong&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;inject 声明依赖&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;插件声明所需服务后，会等待服务就绪才启动——加载顺序由依赖表达，而非手动编排&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;类型化事件&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;服务通过声明合并注册事件名，以 4 种模式分发（见下）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;注册是可逆副作用&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;所有注册（提示词片段、工具 schema、监听器）都是副作用，&lt;strong&gt;插件卸载时自动撤销&lt;/strong&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="22-事件分发模式一鱼四吃"&gt;2.2 事件分发模式：一鱼四吃&lt;/h3&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;模式&lt;/th&gt;&#10;&lt;th&gt;语义&lt;/th&gt;&#10;&lt;th&gt;典型用途&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;emit&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;监听器按注册顺序观察，不等待、无返回值&lt;/td&gt;&#10;&lt;td&gt;广播事实（如 &lt;code&gt;session/event&lt;/code&gt;）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;waterfall&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;strong&gt;环绕中间件&lt;/strong&gt;：监听器收到 &lt;code&gt;(...args, next)&lt;/code&gt;，可包装、改写，&lt;strong&gt;不调 next 直接返回 = 短路&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;拦截/决策（如 &lt;code&gt;agent/pre-step&lt;/code&gt;、&lt;code&gt;tools/pre-execute&lt;/code&gt;）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;parallel&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;所有监听器并行，await 全部&lt;/td&gt;&#10;&lt;td&gt;耐久检查点（如 &lt;code&gt;session/flush&lt;/code&gt;）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;serial&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;按序执行、有返回值&lt;/td&gt;&#10;&lt;td&gt;顺序决策（如 &lt;code&gt;agent/turn-stopping&lt;/code&gt;）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;code&gt;waterfall&lt;/code&gt; 是最聪明的：&lt;strong&gt;策略监听器拥有决策权时可以短路&lt;/strong&gt;（比如”这条工具调用禁止执行”），而只做观察的监听器必须调 &lt;code&gt;next()&lt;/code&gt; 委托下去。拦截、审批、限流、改写提示词全部可以用事件挂上去，不碰核心。&lt;/p&gt;&#10;&lt;h3 id="23-能力-seam可替换能力的三件套"&gt;2.3 能力 seam：可替换能力的”三件套”&lt;/h3&gt;&#10;&lt;p&gt;一个 &lt;strong&gt;seam&lt;/strong&gt; 包含三种角色：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Service Definition&lt;/strong&gt;：声明接口，拥有自己的 &lt;code&gt;ctx.&amp;lt;key&amp;gt;&lt;/code&gt;（如 &lt;code&gt;ShellExecutor&lt;/code&gt; 抽象类）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Service Provider&lt;/strong&gt;：实现该接口（可以有多个，可互换）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Consumer&lt;/strong&gt;：消费该服务的插件（通常是面向模型的工具）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;规范范例——shell 能力：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-text"&gt;ctx.shell（Service Definition）&#10;├── dsh-bash-local （Provider：本地 bash）&#10;├── dsh-bash-sandbox （Provider：沙箱 bash）&#10;├── dsh-pwsh-local （Provider：本地 PowerShell）&#10;└── dsh-tool-bash （Consumer：面向模型的 bash 工具）&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;&lt;strong&gt;替换一个提供方就能改变整个产品&lt;/strong&gt;：把 &lt;code&gt;bash-local&lt;/code&gt; 换成 &lt;code&gt;bash-sandbox&lt;/code&gt;，所有消费 &lt;code&gt;ctx.shell&lt;/code&gt; 的消费方（bash 工具、钩子桥接）自动获得沙箱保护，&lt;strong&gt;消费方零改动&lt;/strong&gt;。文件系统、子进程、沙箱、搜索、凭据、存储、技能……整个平台都是按这个模式组织的。&lt;/p&gt;&#10;&lt;p&gt;seam 生态（部分代表性服务）：&lt;/p&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;ctx 键&lt;/th&gt;&#10;&lt;th&gt;类型&lt;/th&gt;&#10;&lt;th&gt;可换提供方&lt;/th&gt;&#10;&lt;th&gt;说明&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.llm&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;deepseek / pi-ai / replay&lt;/td&gt;&#10;&lt;td&gt;模型适配器注册表，agent loop 提供方无关地调流式服务&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.sessionPersistence&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;jsonl / sqlite&lt;/td&gt;&#10;&lt;td&gt;会话持久化，应用组合时选后端&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.shell&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;bash-local / bash-sandbox / pwsh-local&lt;/td&gt;&#10;&lt;td&gt;Bash 执行器&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.fs&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;fs-local / fs-sandbox / fs-e2b&lt;/td&gt;&#10;&lt;td&gt;文件系统&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.subagents&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;6 个提供方&lt;/td&gt;&#10;&lt;td&gt;从进程内 fork，到委派给 Claude Code / Codex 进程&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.web&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;exa / perplexity / deepseek / http-fetch&lt;/td&gt;&#10;&lt;td&gt;搜索与抓取&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.skills&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;badge / filesystem&lt;/td&gt;&#10;&lt;td&gt;&lt;strong&gt;技能注册表&lt;/strong&gt;——&lt;code&gt;tool-skill&lt;/code&gt; 渲染会话前缀目录并加载 skill 正文&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.approval&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;acp&lt;/td&gt;&#10;&lt;td&gt;一次性权限决策&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.credentials&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;credentials-local&lt;/td&gt;&#10;&lt;td&gt;凭据&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.storage&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;seam&lt;/td&gt;&#10;&lt;td&gt;json / sqlite&lt;/td&gt;&#10;&lt;td&gt;非会话存储&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.sessions&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;core&lt;/td&gt;&#10;&lt;td&gt;—&lt;/td&gt;&#10;&lt;td&gt;仅追加事件日志（真源）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.tools&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;core&lt;/td&gt;&#10;&lt;td&gt;—&lt;/td&gt;&#10;&lt;td&gt;工具注册表 + 带把关的执行流水线&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.agents&lt;/code&gt; / &lt;code&gt;ctx.agentLoop&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;core&lt;/td&gt;&#10;&lt;td&gt;—&lt;/td&gt;&#10;&lt;td&gt;Agent 注册表 + 唯一具体循环驱动&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.invariants&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;core&lt;/td&gt;&#10;&lt;td&gt;—&lt;/td&gt;&#10;&lt;td&gt;配套不变量注册表（运行时自检）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="24-无特权内核的两个关键机制"&gt;2.4 无特权内核的两个关键机制&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;① Map → derived-union 扩展模式。&lt;/strong&gt; 几乎所有可扩展的联合类型都遵循同一模式：接口以判别标签为 key（&lt;code&gt;ThingMap&lt;/code&gt;），联合类型由 &lt;code&gt;keyof&lt;/code&gt; 派生。插件通过 &lt;strong&gt;TypeScript 声明合并&lt;/strong&gt;添加变体——&lt;strong&gt;不需要修改拥有该类型的包&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-ts"&gt;declare module '@deepseek-ai/dsh-llm' {&#10; interface ContentBlockMap {&#10; 'c': { kind: 'c'; /* … */ }&#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;六个规范 map（含 &lt;code&gt;SessionEventMap&lt;/code&gt;、&lt;code&gt;TurnEndReasonMap&lt;/code&gt;）都这么干。代价是约定：对这类联合类型做 &lt;code&gt;switch&lt;/code&gt; 时禁止 &lt;code&gt;assertNever&lt;/code&gt;——插件添加的变体是合法的未知值，&lt;code&gt;default&lt;/code&gt; 分支必须放行。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;② 注册即副作用，卸载即撤销。&lt;/strong&gt; 扩展 dsh 的方式就是”把插件挂载到其他插件旁边”，不存在需要打补丁的特权内核。每个注册要么从 &lt;code&gt;ctx.effect()&lt;/code&gt; 返回一个 disposer，要么用 Cordis 辅助方法自动处理——&lt;strong&gt;reload 和 teardown 时按预期撤销&lt;/strong&gt;。连 Agent 循环本身都是可换的。&lt;/p&gt;&#10;&lt;h3 id="25-装配profile-与组合包"&gt;2.5 装配：profile 与组合包&lt;/h3&gt;&#10;&lt;p&gt;运行中的 dsh 是一棵&lt;strong&gt;插件树&lt;/strong&gt;，由启动时按序叠加的各层组成：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;profile&lt;/strong&gt;（web / headless）：具名组装，列出叠放的组合包，保存用户的 &lt;code&gt;cordis.patch.yml&lt;/code&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;组合包&lt;/strong&gt;（bundle）：配置项 + 挂载代码的分发格式；&lt;code&gt;dsh-base&lt;/code&gt; 是第一层（模型/工具/持久化/沙箱/审批/设置/凭据/遥测），&lt;code&gt;dsh-web-app&lt;/code&gt; 加浏览器应用。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;patch 覆盖&lt;/strong&gt;：任何条目都可以被上层 patch 替换——&lt;code&gt;dsh --profile web --dump-config&lt;/code&gt; 打印真实配置树，&lt;strong&gt;打印出的任何条目都能被你的 patch 替换&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;这就是”配置层可换任意能力”的落点：换模型端点、换执行工作流、换 UI，都不碰源码，只改 YAML。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="3-agent-循环轮次--步骤--scope--inbox"&gt;3. Agent 循环：轮次 / 步骤 / scope / inbox&lt;/h2&gt;&#10;&lt;p&gt;一个轮次按同一条循环流经 6 个核心包：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-text"&gt;认领输入 → 开轮次(turn/start) → 组装提示词+工具schema → 从日志派生历史&#10;→ 模型流式请求(llm/stream) → 工具执行(tools/*) → 每个模型可见事实追加回日志 → 关轮次&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;值得抄的设计点：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;scope（作用域）&lt;/strong&gt;：按 agent 划分注册单位，只有”全局”和”恰好属于一个 agent”两层。&lt;strong&gt;shadowing 机制&lt;/strong&gt;——带作用域的工具/提示词片段在该 scope 内替换同名全局项，这是”按 agent 定制 persona 和工具集”的机制。过滤掉的工具既不出现在提示词里、也拒绝执行，&lt;strong&gt;与不存在的工具无法区分&lt;/strong&gt;（安全特性）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;inbox（收件箱）&lt;/strong&gt;：agent 拥有两条有序待处理列表——&lt;code&gt;next-turn&lt;/code&gt;（普通续问）和 &lt;code&gt;next-step&lt;/code&gt;（steering 中途引导）；&lt;code&gt;inject()&lt;/code&gt; 注入上下文&lt;strong&gt;不唤醒&lt;/strong&gt;驱动，留到下一个步骤边界。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;拦截决策&lt;/strong&gt;：&lt;code&gt;agent/pre-step&lt;/code&gt; 是请求派生前唯一的串行监听器链，可改写甚至&lt;strong&gt;拒绝&lt;/strong&gt;进入步骤的消息（拒绝仍会记录一个空轮次——日志记录这次尝试本身）；&lt;code&gt;agent/request-error&lt;/code&gt; 监听器可以返回 &lt;code&gt;{ kind: 'retry' }&lt;/code&gt; 拥有失败恢复。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;取消&lt;/strong&gt;：&lt;code&gt;cancel(cause)&lt;/code&gt; 带类型化原因（user / parent / hook / disposed），持久日志保留粗粒度 &lt;code&gt;aborted&lt;/code&gt;，&lt;strong&gt;谁请求的取消不塞进终态结果&lt;/strong&gt;（那是另一类持久事件的职责）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="4-与-workbuddy-对照同行不同路"&gt;4. 与 WorkBuddy 对照：同行不同路&lt;/h2&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;能力&lt;/th&gt;&#10;&lt;th&gt;dsh 的答案&lt;/th&gt;&#10;&lt;th&gt;WorkBuddy 的答案&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;扩展机制&lt;/td&gt;&#10;&lt;td&gt;Cordis 插件树，&lt;strong&gt;配置层可换任意能力&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;Skill 技能 + Expert 专家 + Connector 连接器（MCP）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;会话记忆&lt;/td&gt;&#10;&lt;td&gt;&lt;strong&gt;事件溯源日志&lt;/strong&gt;，模型可见即已记录，可回放&lt;/td&gt;&#10;&lt;td&gt;三层记忆（云端画像 / 用户级 / 工作区日志）+ 会话历史检索&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;子 Agent&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.subagents&lt;/code&gt; 6 个提供方（进程内 / Claude Code / Codex）&lt;/td&gt;&#10;&lt;td&gt;子 Agent + Team 多智能体协作&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;技能系统&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.skills&lt;/code&gt; + tool-skill 从文件系统加载技能目录&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;~/.workbuddy/skills/&lt;/code&gt; 技能目录（同构！）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;权限&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.approval&lt;/code&gt; + permission-presets 预设表&lt;/td&gt;&#10;&lt;td&gt;权限系统 + 沙箱&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;斜杠命令&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.commands&lt;/code&gt;（不经过模型轮次）&lt;/td&gt;&#10;&lt;td&gt;/ 命令体系&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;后台任务&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.jobs&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;后台任务 / 自动化&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;计划模式&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.planMode&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Plan 模式&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;沙箱&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;ctx.sandbox&lt;/code&gt; / &lt;code&gt;ctx.fs&lt;/code&gt; / &lt;code&gt;ctx.shell&lt;/code&gt; 三 seam&lt;/td&gt;&#10;&lt;td&gt;Bash 沙箱&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;形态&lt;/td&gt;&#10;&lt;td&gt;开源 MIT，&lt;code&gt;npx @deepseek-ai/dsh web&lt;/code&gt; 一行起&lt;/td&gt;&#10;&lt;td&gt;商业产品，桌面 IDE 开箱即用&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;最有趣的发现：&lt;strong&gt;dsh 的 &lt;code&gt;ctx.skills&lt;/code&gt; 与 WorkBuddy 的 skill 目录是同一种东西&lt;/strong&gt;——都是”技能提供方注册表 + 从文件系统加载技能正文 + 渲染进会话前缀”。你在 WorkBuddy 里积累 skill 的路线，被 dsh 印证为行业共识。&lt;/p&gt;&#10;&lt;p&gt;而 WorkBuddy 目前&lt;strong&gt;没有&lt;/strong&gt;的是 dsh 的”事件溯源级完整轨迹”：WorkBuddy 有记忆沉淀，但不是”每次工具调用、每个原始 chunk 都可回放”的完整日志。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="5-可借鉴清单结合你的项目"&gt;5. 可借鉴清单（结合你的项目）&lt;/h2&gt;&#10;&lt;h3 id="51-认知层直接吸收"&gt;5.1 认知层：直接吸收&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;轨迹复盘习惯&lt;/strong&gt;：给 teammate 的每个投资决策、每篇博客内容生产，养成”过程可留痕”的习惯——关键节点（判断、工具结果、中途修改）记成结构化条目，事后可回放、可归因。WorkBuddy 的会话记忆 + 工作区日志已经是雏形，把它用得更狠。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;“模型可见即已记录”是调试的底线&lt;/strong&gt;：多 agent 协作（teammate 6 个 agent）出问题，最贵的是”不知道哪一步错了”。任何 AI 交互系统，&lt;strong&gt;先保证输入输出有完整留痕，再谈别的&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;场景化运行模式&lt;/strong&gt;：dsh 有 Standard / Code / Minimal / Creator 四模式，WorkBuddy 有 Craft / Plan / Ask——”按任务类型切换运行形态”已是行业共识，你现在的用法是对的。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="52-架构层可落到自己的代码"&gt;5.2 架构层：可落到自己的代码&lt;/h3&gt;&#10;&lt;ol start="4"&gt;&#10;&lt;li&gt;&lt;strong&gt;事件溯源代替”直接存消息数组”&lt;/strong&gt;：如果你给《族谱》小程序或投资系统做 AI 会话持久化，参考 dsh 的模式——只追加事件日志（&lt;code&gt;user&lt;/code&gt; / &lt;code&gt;assistant_chunk&lt;/code&gt; / &lt;code&gt;assistant&lt;/code&gt; / &lt;code&gt;tool_call&lt;/code&gt; / &lt;code&gt;tool_result&lt;/code&gt; / &lt;code&gt;header&lt;/code&gt;），历史由投影派生。收益：永不双写、可回放、可 fork、压缩只遮蔽不删除。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;seam 三件套组织扩展&lt;/strong&gt;：定义接口 / 提供方实现 / 消费方分离，&lt;strong&gt;消费方只依赖接口&lt;/strong&gt;。teammate 的 6 个 agent 如果共享接口定义，换模型、换数据源都不动其他 agent。这是 dsh 全文最值得抄的组织模式。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;崩溃恢复”不截断、合成结束标记”&lt;/strong&gt;：长任务中断后恢复，别删尾部，合成一个 &lt;code&gt;interrupted&lt;/code&gt; 结束标记配平——数据永远不丢。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;坏数据在源头拒绝&lt;/strong&gt;：写日志前做序列化校验（拒绝不可 JSON 序列化的 payload），宁可在写入时报错，也不让坏事件进入真源。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;waterfall 事件做策略&lt;/strong&gt;：需要做”拦截/审批/改写”的地方，用”可短路的环绕中间件”而不是硬编码 if-else——策略与主流程解耦，还能按需叠加。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="53-生态层可抄的现成组件"&gt;5.3 生态层：可抄的现成组件&lt;/h3&gt;&#10;&lt;ol start="9"&gt;&#10;&lt;li&gt;dsh 的技能、子 agent 多后端、session-query（会话全文搜索）、compaction（上下文压缩）都是独立包，&lt;strong&gt;概念可以直接移植&lt;/strong&gt;到你自己的架构里，不用抄代码。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="6-风险与观望点"&gt;6. 风险与观望点&lt;/h2&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;风险&lt;/th&gt;&#10;&lt;th&gt;说明&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;0.1.x 开发者预览&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;8/13 发布，API 与磁盘格式都在快速演进，&lt;code&gt;SESSION_FORMAT_VERSION&lt;/code&gt; 明确&lt;strong&gt;不做迁移&lt;/strong&gt;——旧日志可能打不开&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;Star 数有水分&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;一周 17 万 star 明显含大量”先收藏再说”，真实工程采纳率未验证&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;生态起步期&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code&gt;dsh-plugin&lt;/code&gt; npm 话题刚形成，成熟插件少；Cordis 是 vendor 进来的第三方内核，上游风险要看 cordiverse/cordis 的维护&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;定位窄&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;它只是 harness（外壳），不提供模型、不做训练、不做 RAG 中间件——别指望开箱即用的”完整 Agent 应用”&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;strong&gt;对普通用户不友好&lt;/strong&gt;&lt;/td&gt;&#10;&lt;td&gt;是给开发者/平台构建者的积木，日常用户仍应待在 WorkBuddy 这类成品里&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;结论：&lt;/strong&gt; 值得读源码和文档（尤其是 &lt;code&gt;docs/subsystems/&lt;/code&gt; 和 &lt;code&gt;docs/cookbook/&lt;/code&gt;），作为”下一代 Agent 平台”的免费教材；但&lt;strong&gt;别急着上生产&lt;/strong&gt;，等它到 1.0 或生态稳定再考虑作为自建底座。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="7-延伸阅读"&gt;7. 延伸阅读&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;架构总览：&lt;code&gt;docs/architecture.zh.md&lt;/code&gt;（含轮次流程图）&lt;/li&gt;&#10;&lt;li&gt;轨迹日志：&lt;code&gt;docs/subsystems/session.zh.md&lt;/code&gt; → &lt;code&gt;docs/subsystems/persistence.zh.md&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;插件系统：&lt;code&gt;docs/cordis-primer.zh.md&lt;/code&gt; → &lt;code&gt;docs/capability-seams.zh.md&lt;/code&gt; → &lt;code&gt;docs/event-producer-consumer.zh.md&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Agent 循环：&lt;code&gt;docs/subsystems/core.zh.md&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;术语表：&lt;code&gt;docs/glossary.zh.md&lt;/code&gt;（seam / scope / turn / step 的规范定义）&lt;/li&gt;&#10;&lt;li&gt;扩展实操：&lt;code&gt;docs/cookbook/extension-cookbook.zh.md&lt;/code&gt;（加工具 / 加 LLM 适配器 / 加 Chat 节点分步指南）&lt;/li&gt;&#10;&lt;li&gt;本地源码：本仓库已克隆至 &lt;code&gt;dsh-src/&lt;/code&gt;（&lt;code&gt;packages/core/session&lt;/code&gt; 是轨迹日志实现，&lt;code&gt;packages/shell&lt;/code&gt; 是 seam 规范范例）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>