Superagent 解构一份可探索的源码指南
deepseek-ai / dsh-superagent-prototype

把团队消息,
变成可追踪的开发任务。

一个面向单个 GitHub 仓库的主动式编码 Agent:先判断工作是否获准,再交给独立会话执行,最后把结果带回原对话。

作为 DeepSeek Harness 的 bundle 运行。

系统全貌点击节点,查看职责与源码
核心 / 确定性代码

状态由 Engine 统一改变

模型给出判断,Engine 在事务中更新事件、对话、决策、任务和执行分配。外部操作通过端口排队,在提交后执行。

core/engine.ts
抓住这条分工:主会话负责路由,执行器负责具体工作;Engine 保存可检查的业务状态。图中连线为职责关系,执行报告也通过 Engine 处理。
Fig. 1事件、模型判断和执行结果,都汇入同一套任务状态。
02 / 任务流程

一条消息,如何走到一个 PR?

选一个情境,逐步观察系统把什么交给了谁。

交互演示 · 使用示例数据

查看对应源码
Fig. 2
03 / 策略实验

“主动”有多主动,由策略决定。

切换模式,看看同一条消息会不会创建新任务。

policy.ts
推断候选的接单模式

Fig. 3默认 observe 记录“本来会接下的工作”;明确请求另走路由,已有任务的跟进另走订阅。
04 / 关键概念

理解它,要分清这四组关系。

领域模型

消息是事件,对话才是上下文。

Source 把外部消息标准化;同一 Thread 的 Eval 串行运行,期间新来的事件进入下一批。
展开:Source 和 Channel 又是什么?

Source 负责读入事件、保存读取位置和识别机器人自身。Channel 是写回地址:同一段对话可能有多种回复通道。重复 Trigger 在接收时会被去重。

收到上下文,不等于拿到授权。

订阅负责把后续消息送进任务;Mandate 保存被接受时的授权范围与依据。扩大范围需要新任务。
展开:来自相关 Issue 的消息能授权吗?

执行器可以订阅相关 Thread 作为上下文。这类订阅不带来新的权限,也不会仅凭其中一条真人消息唤醒已结束任务。跨来源的身份也不会自动映射。

任务可以延续,执行分配可以更换。

Ticket 保存任务生命周期;Assignment 连接一次具体执行。重试和恢复可以在同一任务下换一次分配。
展开:为什么不直接用 Agent 会话当任务?

任务有自己的订阅、输入和结束原因;会话有工具、目录和运行状态。把两者分开,才能在执行中断后保留工作历史,并在授权仍有效时恢复任务。

报告 ready,可能仍在等人审查。

绑定了尚未结束的 PR 时,任务会等待其合并或关闭。没有需要跟随的 Thread 时,ready 可结束任务。
展开:结束以后还能继续吗?

通常可以。自有 Thread 上的真人消息能在当前策略重新校验 Mandate 后恢复任务。人工 stop 会撤回授权,不能依靠新消息恢复;机器人与 CI 也不会唤醒已结束任务。

05 / 源码地图

带着问题读代码,比从入口读到底更快。

这是 TypeScript 编排应用。DeepSeek Harness 提供 Agent 运行底座,React 提供管理面板。

建议第一条阅读路线:Engine→Intake→Policy→DshExecutor
06 / 运行与边界

代码管状态,提示词管工作方式。

这条分界,决定了该改代码、改配置,还是改团队提示词。

由宿主代码执行

接入与任务约束:来源名单、接收规则、Mandate 校验、工具参数和回复用途限制。

可靠性机制:事务保存状态,Effects 在提交后处理外部操作;失败退避重试,Outbox 保存发送回执。

执行调度:每个任务独立会话与目录,限制 worker 并发,并给人的后续消息保留额外槽位。目录本身不保证是 Git worktree。

查看确定性入口

由模型按提示词判断

具体做什么:判断语义与范围,阅读代码、实现、验证,决定何时报告结果或提出问题。

怎样与团队协作:Communication、Ticket scope、Delivery requirements 和团队 skills 定义行为。

是否自动合并:由交付提示词约束,宿主没有专门的合并判断逻辑;默认仍需配置另一合并账号的 CLI。

查看交付提示词

任务目录隔离,
不等于操作系统沙箱。

worker 以操作者的系统用户运行。命令包装器和 blocked commands 只是默认约束,不能构成安全边界。实际部署建议使用独立 OS 账号、专用 Harness profile 和 Agent 凭据。

TypeScriptDeepSeek Harness bundleSQLiteReact 18ZodVitest / tsdown

运行入口:先阅读 SETUP.md,由编码 Agent 协助配置。开发校验命令为 pnpm check(类型检查、测试、构建)。本页仅分析项目,未部署或运行这个 Agent。

07 / 继续阅读

每一个关键结论,都能回到原始资料。

链接固定到本次分析的提交,避免后续代码更新造成口径变化。

基于提交 6337fc823ce20251c8de8085948165c81aaa701e · 2026 年 11 月 2 日分析。仓库声明:这是供研究参考的原型,并非 DeepSeek 官方产品;公开实现与团队内部版本、文章中的设计并不完全一致。本页为独立中文讲解,未执行该项目的测试,流程中的消息、任务和 PR 均为教学示例。