# DeepSeek Harness：可逆插件运行时速查

- 原文：[[腾讯程序员-DeepSeek-Harness-可逆插件运行时]]
- 定位：腾讯程序员对 DeepSeek Harness 的二手源码与架构解读。

## 五个核心观点

1. **一切皆插件**：模型、工具、会话、循环和 Web UI 被放在同一插件运行时，而不是围绕不可替换核心循环挂钩子。
2. **可逆副作用**：`ctx.effect()` 将副作用与 disposer 相邻登记，卸载按 LIFO 顺序回滚，并沿父子 Fiber 级联清理。
3. **结构性与语义性分离**：运行时保证“会执行撤销”，不保证作者写的撤销真的正确恢复外部状态。
4. **两层 Scope**：预设实例真实挂载一次，会话只建立逻辑绑定，以复用插件树并降低切换成本。
5. **运行时而非模型决定可塑性**：Code Mode、工具遮蔽和热替换把扩展、隔离、可见性变成可替换的运行时能力。

## 七个分析角度与开头钩子

### 插件运行时
- “Agent 的模型、工具、界面和循环，能不能都不是核心代码？”
- “真正的一切皆插件，不是多几个 hook。”
- “可替换的 loop 才把 Agent 从框架变成运行时。”

### 可逆副作用
- “插件卸载为什么常常比加载更难？”
- “副作用旁边写逆操作，卸载才不会靠记忆。”
- “热更新能成立，先要回答坏插件如何退出。”

### Fiber 生命周期
- “依赖未就绪的插件不必失败，可以停在 PENDING。”
- “每个插件都要有状态机，才能解释重载和失败。”
- “子插件的清理被登记为父插件的 effect，树才会整棵退干净。”

### 系统边界
- “框架能回滚什么，不能回滚什么，必须先讲清。”
- “运行时不是魔法：公共文件、全局变量和已发送数据不会自动恢复。”
- “保证调用 disposer，不等于证明 disposer 写对。”

### Scope 继承
- “同一预设被一百个会话使用，为什么不该重挂一百次？”
- “真实 scope 与逻辑绑定分层，才有复用和继承。”
- “工具可见性应随会话上下文变化，而不是只有全局开关。”

### Code Mode
- “模型写代码调工具，隔离层选 V8 isolate 还是 worker thread？”
- “代码编排不是绕开工具管线，而是换一个入口进入同一管线。”
- “能强制终止的执行环境，才是 Code Mode 的底线。”

### 工具遮蔽
- “预设如何覆盖工具而不改工具本身？”
- “作用域层层遮蔽，当前 scope 的直接注册优先级最高。”
- “注册工具也是副作用，因此卸载插件应自动摘掉工具。”

## 证据边界

- 本文是公众号对源码与 Cordis 论文的解读，未独立复核 DSH 源码、论文推导或 Codex 的实现对比。
- 插件数量、Star 数、生态发展和“Agent 界 VSCode”属于发布时快照或作者判断。
- `worker_threads`、作用域遮蔽等机制应在对应版本源码中复核后再据此实施。

标签： #主题/AI-Agent #主题/Harness #主题/插件运行时 #节点/可逆副作用 #节点/Fiber生命周期 #节点/Code-Mode
