全部插件

DSH / BUNDLE / BUNDLES

@qiaoy01/mission

v0.2.0qiaoy01 / dsh-mission4bd62d0313

可安装组合包组合包与其他模块社区 · Topic 自动分析

概览

@qiaoy01/mission

Persistent long-horizon autonomous mission runtime for DeepSeek Harness: dependency DAG, independent verification, replan-on-failure, lease ownership.

README / ZH

插件文档

dsh-mission

DeepSeek Harness 的长程自主 mission 运行时 —— 让 agent 能多日推进一个长期目标: 跨会话、可独立验证、失败可重规划、崩溃可恢复的自主控制循环。 DAG(依赖任务图)是它的驱动/执行手段之一,不是运行时本身。

English | 中文

是什么

dsh-mission 是 DeepSeek Harness 的纯 TypeScript cordis 插件,提供 dsh 缺失的 长程自主 mission 运行时:一个持久、可验证、崩溃可恢复的自主控制循环,把"一个长期目标" 拆成带依赖的任务 DAG,由运行时自主推进,而不是靠单次对话一次性完成。

核心原则:agent 提议,环境裁决,运行时提交

  • agent 的计划、执行、声明永远非权威;
  • 每个工作项:task/report = 对环境的声明(非权威),task/verify = 独立地把声明与 环境反馈对齐(权威);
  • 执行者不能自证完成——只有通过确定性校验、以单个事件原子写入会话日志的状态变更才是权威。

为什么是 dsh 需要它

dsh 已有 dsh-mission 的独特增量
goal(单目标记账,可自证完成) 依赖 DAG + 派生就绪/阻塞,失败支线可重规划(保留 DONE 成果)
workflow(一次性扇出脚本) 持久、可恢复、跨会话的任务状态机
schedule(纯时间触发) 依赖触发(上游 DONE → 下游 READY)
subagent(执行单元) 独立验证——执行者不能自证,reportverify
lease 所有权 + 惰性回收 + 崩溃恢复

特性

  • 事件溯源持久化:mission/* 会话事件,单事件 = 原子提交,无独立数据库;
  • 版本守卫:revision CAS(照搬 dsh-goal 的 GoalRef 模式);
  • 自主驱动宿主(mission-driver):监听 mission/changed,自动执行 认领 → 子代理执行 → 声明 → 独立验证 → 提交 的循环;
  • 惰性 lease 回收:过期且无声明的任务可被回收重做;在飞任务守卫杜绝重复派发;
  • 失败重规划:mission 卡死时产出新 revision,已 DONE 且 spec 未变的任务跨 revision 保留;
  • 模型策略可选:llmDecider(选下一任务)/ llmReplanner(重规划)/ userApprovalGate(审批闸);
  • UI 数据面:mission session projection 单元;
  • 触发伴生(mission-trigger):软指引提示词 + /mission 斜杠命令,把触发短语 路由到 mission_create/mission_plan;
  • 容错伴生:mission-invariantinvariants 服务存在时自动注册审计,不存在时静默跳过 (生产 profile 无需额外配置即可加载)。

事件词汇(mission/*)

事件 语义
mission/created 创建 mission
mission/plan-committed 提交整次计划快照(revision +1,DONE 且 spec 不变的任务延续)
mission/task-claimed lease 认领
mission/task-reported agent 对环境的声明(不产生 DONE)
mission/task-verified 独立对齐环境反馈 → DONE/FAILED
mission/cancelled 显式终止

状态:mission CREATED / RUNNING / COMPLETED / FAILED / CANCELLED; 任务 PENDING / CLAIMED / DONE / FAILED + 派生 READY / BLOCKED

安装与使用

# 从 npm 安装(已发布;会把 6 行 bundle patch 插入组合)
dsh plugin --profile <name> add @qiaoy01/mission

从源码安装(给贡献者)

npm 包已预构建(lib/),普通使用者只需上面一条命令。想改代码或审查源码时才需要从源码构建:

git clone https://github.com/qiaoy01/dsh-mission.git
cd dsh-mission   # bundle 就在仓库根
npm install                                # 构建依赖,锁定到运行中 harness 的 peer 版本
npm run build                              # typecheck + emit 到 lib/
dsh plugin --profile <name> add file:.

file:. 指向仓库根(其 package.json 声明了 dsh.bundle.patchcordis.patch.yml),因为你刚 cd 进去的就是仓库根。改完源码后要重新 npm run build 并重新 add。

在会话中,agent 通过四个模型工具使用 mission:mission_create(创建)、 mission_plan(提交任务 DAG,revision 必须 = 当前 + 1)、mission_status(读取状态)、 mission_cancel(取消 mission)。

模型提交计划后,执行由运行时接管(mission-driver 自动认领任务、派发真实子代理、 独立验证)。模型不需要也不应该自己执行任务。

快速上手(30 秒)

# 1. 把插件装进一个 dsh profile
dsh plugin --profile web add @qiaoy01/mission

# 2. 在会话中对 agent 说:
#    "mission: 构建一个小型网页游戏。用 mission_create 创建,再用 mission_plan 提交计划,
#     然后停止——任务由运行时执行。"
#
# 模型创建并规划;mission-driver 自动认领任务、派发真实子代理、独立验证每个任务,
# 直到 mission COMPLETED。

默认策略保守(确定性选任务、不自动重规划,零模型开销);需要模型决策时在 profile 里配置:

- id: mission-driver
  config:
    decider: llm     # 模型选择下一任务
    replan: true     # 卡死时模型重规划

构建与测试

npm run build          # 自动发现本机 tsc;typecheck + emit 到 lib/
# 六套测试,全部隔离运行:
node --experimental-strip-types tests/domain.test.mjs    # 纯函数域模型
node tests/service.test.mjs                               # 运行时(真实 cordis/session/agent)
node tests/driver.test.mjs                                # driver 循环(mock 执行器)
node tests/driver-host.test.mjs                           # 驱动宿主(stub subagents)
node tests/trigger.test.mjs                               # trigger 伴生(软指引 + /mission)
node --experimental-strip-types tests/projection.test.mjs # 会话投影单元

验证状态

  • 阶段 A(域模型)✅ · 阶段 B(服务 + 工具 + 伴生)✅ · 阶段 C(driver 循环)✅ · 阶段 D(重规划 / lease 回收 / 模型决策 / 审批闸)✅ · 阶段 E(投影 ✅,浏览器 UI 待做);
  • 真实组合验证:7 任务 DAG 由真实子代理自主推进至 COMPLETED, 每个任务独立验证通过,全程零失败、零重复派发。

许可

MIT —— 详见 LICENSE