← 返回列表
未验证
让中断的 AI 会话变成会自己续上的工作
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/10 · 已提供中文文档
Task lifecycle plugin suite for DeepSeek Harness (dsh): agents claim work across sessions, wake up on schedule, quota-aware; idle/imported chats auto-mined into board candidates; full web kanban. | dsh 任务全生命周期插件族:跨会话认领、定时唤醒、额度感知、闲置会话自动抽取候选,配 Web 看板。
综合分
30
GitHub 分
30
用户评分
—
★ Stars
1
周下载量
—
兼容 / 相关生态插件(非 dsh 原生,请按其对应运行时安装)
git clone https://github.com/Mason-1011/dsh-task-center.git数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-task-center
CI
npm
npm downloads
License: MIT
TypeScript
Node
DeepSeek Harness
dsh-plugin
让中断的 AI 会话变成会自己续上的工作
dsh-task-center 是 dsh(DeepSeek Harness)
的本地优先任务指挥中心。它从旧会话里找回真正没做完的工作,把上下文保存在单次聊天之外,
再让新 agent 从明确的下一步继续。
观看 60 秒演示
·
查看完整看板
·
安装
- 跨会话恢复上下文——新 agent 自动拿到历史会话、进展、验收标准和下一步,不用人重新复述。
- 让任务持续活着——定时唤醒、额度恢复和崩溃回收都不会抹掉任务历史。
- 把最终裁决留给人——agent 可以推进和提交;通过、打回和放弃只由人决定。
一条命令安装完整插件族:
dsh plugin --profile web add dsh-task-center
然后运行 dsh web,从侧边栏打开任务看板。如果它帮你避免丢掉一次 agent 工作,
欢迎给仓库点一个 Star。
工作闭环
1. 闲置或导入的旧聊天留下了真正未完成的工作。
2. 抽取器把它变成候选;人只晋升值得继续的任务。
3. 新会话认领任务,自动收到上下文包。
4. 任务可以定时醒来、跨额度重置继续,并在持有会话死亡后自动恢复。
5. 完成结果进入待验收,等待人的最终裁决。
简介
dsh(以及 Claude Code / Codex 这类 agent 工具)的工作单位是会话——会话结束,主动性就死。本仓库解决四类断点:
- 跨时间:任务一搁置便没了下文,隔段时间想续做,连当时的进展都难以找回;
- 跨项目:一个功能动三个仓库,三个会话互不知晓;
- 跨窗口/设备:能带走日志文件,带不走"进行中的工作";
- 跨执行者:人与子 agent 分头做,谁也不知道整体进度。
dsh-task-center 把任务做成宿主外的一族插件,同一份任务账本服务两类用户:人(看板看全景、验收裁决)与模型(认领任务、恢复上下文、推进汇报)。一句话:面板负责"看见",工具负责"推进",闹钟负责"活着"。
独立于 harness 主仓实现,只依赖其公开发布的 npm 包(@deepseek-ai/cordis、@deepseek-ai/dsh-),不侵入主仓。完整设计档案见 docs/design/。
功能特性
- 任务全生命周期——五态状态机(待办/进行中/阻塞/待验收/已完成),append-only 事件账本,所有变更 CAS 过版本号,重启即恢复;
- 跨会话交接——新会话认领任务时自动注入上下文包与 PRIOR SESSIONS 前序会话清单,不需要人复述背景;看板上每个会话 id 都可点击直达对话;
- 子任务委派——一个任务挂多个子任务,不同会话并行持有、各自推进,父任务聚合子进度;
- 并行舰队——持有任务的计划里有互不踩踏的单元时,task_fanout 一次切成多支并行:每单元一个出生仓库的专属 git worktree、一个只干这一摊的会话。看板与 /task fleet 展示各分支领先/落后与冲突预检;单元合并(/task merge 或看板按钮)是人类的裁决——冲突只列文件,永不自动解;
- 项目与工作区分组——人类管理的项目 + 任务出生时自动盖戳的工作区目录,看板四类筛选(全部/项目/工作区/无分组);
- 定时干活——任务挂唤醒规则(一次/定点/周期),到点自动起新会话认领续干;每日巡检会话刷新全部未完结任务现状;看板详情与卡片直接展示已挂的唤醒规则与下次到点时间;
- 定时发送——会话页与看板详情均可定一条消息(内容默认 cont)与发送时间(附快捷片),到点自动作为用户输入送进目标会话,挂在半路的任务到点自己续上;
- 额度感知——API 额度用尽自动挂起并释放持有,额度重置点自动续做;看板头部的「自动续做」弹窗可随时开关并指定续做会话(默认新会话 / 撞墙的会话 / 任选一个会话,后两者走定时发送通道);每个会话页顶部的 ⏰「定时」弹窗里也可以一键把额度恢复后的续做发进本会话,选择跨重启保留,配置里的 resumeOnReset 只是默认值;阻塞卡片标注阻塞原因类别(额度/人工等);
- 崩溃恢复——持有任务的会话死亡(崩溃/被杀),自动释放持有,任务回到可认领;
- 自动抽取——闲置会话里的 goal/已批计划/todo 自动出生为候选,人确认晋升;做完却无人回应的 goal 直接进待验收;验收打回自动把理由推回原对话重做;
- 双界面——Web 全屏看板(五列、筛选、阻塞置顶、详情、新建)与 /task 命令面板读同一份账本。看板界面语言跟随 dsh 系统设置(设置 → 通用 → Language,中/英)。
杀手级流程:从旧聊天记录里挖任务
配合 dsh-chat-import:把 Claude Code / Codex 的历史会话导入为可继续的 dsh 会话,task-center 的抽取层会自动总结每条闲置对话,判断有没有留下未完成的工作(可命名的结果 / 可判定的验收 / 真实的续做意图),合格的直接出生为看板上的待确认候选——不用人工翻聊天记录。
架构总览
任务数据采用双账本:权威事件流(~/.dsh/storages/task.json,append-only)+ 会话日志回执(task/change、task/context-injected 事件)——账本保证重启恢复与跨会话一致性,回执保证模型输入可从日志重建。
| 包 | 角色 | 说明 |
|---|---|---|
| task | 核心(Service) | ctx.tasks:状态机、项目、子任务、contextPack、事件;workspacePath 出生盖戳 |
| task-local | 存储 Provider | 经 storage-domain 开域,后端路由 json/sqlite |
| tool-task | 模型面(Consumer) | 七个模型工具 + 提示词段 |
| command-task | 人类面(Consumer) | /task 命令:面板、项目、候选看管 |
| task-web | 人类面(Consumer) | Web 看板:Typert 服务 + 浏览器 bundle |
| task-wake | 时间面(Provider) | 到点起新会话干活 + 每日巡检 |
| task-sched | 时间面(Provider) | 定时发送:到点向既有会话投用户消息(默认 cont) |
| task-fleet | 执行面(Provider) | task_fanout:把持有任务切成并行单元,各自隔离的 git worktree;同插件发布 ctx.fleet 服务:分支实时判定 + 人触发的合并,冲突如实上报不自动解 |
| task-quota | 额度(Provider) | QUOTA 失败挂起释放,重置点续做 |
| task-reaper | 存活(Provider) | 释放死持有,崩溃恢复 |
| task-source | 抽取(Provider) | 扫描闲置会话产候选;回合末差分回流;验收出生与打回回流 |
| shell | 独立 REPL 壳 | 一条命令组装全部插件的交互启动器 |
docs/design/ 设计档案(产品定义、数据模型、接缝规格、计划、抽取层)
packages/ dsh-task-center- 插件包(pnpm workspace)
安装
要求 dsh ≥ 0.1.2-rc.1。前置:已全局安装 dsh CLI(npm i -g @deepseek-ai/dsh),且 dsh plugin 能找到 pnpm(corepack 用户:corepack enable;若 node 目录无写权限,corepack enable --install-directory 后把该目录挂上 PATH)。
若日后的 dsh 升级破坏了本包的构建产物,受影响的插件会自行停用并留一条告警,而不是把 dsh web 一起拖死 —— 启动照常继续,告警里写明该升级哪一边(dsh-task-center 或 dsh)。
从 npm 装一个包即可 —— 全部插件打进同一个包,自带默认配置行,不用克隆、不用构建:
dsh plugin --profile web add dsh-task-center
web profile(首次 dsh web 自动创建)自带本套件需要的 storage 三行,共用 ~/.dsh/storages 账本根;本包不重插这三行,不存在 storage 重复装两份的问题。新建的非 web profile 需先自行补上 storage 三行(片段);缺了它们启动会大声报错,不会静默出错。每个插件行都带部署默认值;在 profile 自己的 cordis.patch.yml 里按 id 覆盖任意行(后层整段替换 config)。
0.1.0 的多包家族(dsh-task-center-task 等)已弃用,由 dsh-task-center 一个包全部取代。
然后设好 DEEPSEEK_API_KEY(或在 web 的 Models 页保存)即可:
dsh web # 浏览器 UI;侧栏底部出现任务看板入口
dsh --profile web "某任务" # 一次性:建 agent、干活、打印结果、退出
从源码安装(开发用)
克隆、构建、直接装入 bundle 包(与 npm 包出厂的是同一个产物):
git clone https://github.com/Mason-1011/dsh-task-center && cd dsh-task-center
corepack pnpm install && corepack pnpm run build # 产出 packages/*/dist + packages/bundle/dist
dsh plugin --profile web add "file:$(pwd)/packages/bundle"
不启动只检查组合树:
dsh --profile --dump-config
使用
export DEEPSEEK_API_KEY=... # 或在 web 的 Models 页保存
dsh --profile web "某任务" # 一次性:建 agent、干活、打印结果、退出
dsh web # 浏览器 UI:任务工具进模型,/task 命令面进人类
模型工具(tool-task)
| 工具 | 作用 |
|---|---|
| task_create | 建任务(objective;acceptance 可空——评审时人裁才是闸),可挂父任务或归入项目;出生工作区由会话目录自动盖戳 |
| task_claim | 认领并取回完整上下文包;注入前序会话清单 |
| task_update | 记一条进展(note / next),自动解除阻塞 |
| task_report | 上报:blocked(附理由)或 review(附对照验收标准的自检) |
| task_patrol | 记巡检观察:不认领、不改状态、不刷新闲置时钟 |
| task_query | 按 status / workspace_path / project_id 过滤;按父任务列存活子任务 |
| task_projects | 列人类管理的项目(创建序,含归档标记) |
| task_fanout(task-fleet) | 把持有任务扇出成并行单元:每单元一个出生仓库的独立 git worktree、一个只干这一摊的新会话;单一效果——任一失败全部回滚。分支合并是人类的裁决时刻 |
人类动作
验收裁决(approve / reject)、释放、弃置、阻塞、项目建改归档、候选晋升——全部仅人类可操作,模型工具面不注册这些动词。Web 看板与 /task 命令面走同一个人动作面,冲突即刷新不覆盖。验收打回时,理由自动作为用户消息推回原对话并代为认领重做。单元分支的合并也是两面同款的人裁动词:/task merge 与看板舰队区在 git 判定(分支在、主线干净、merge-tree 冲突预检)通过后执行 --no-ff 合并;冲突以文件清单返回、零改动,模型 actor 一概被拒。放弃不删:任务进看板底部可折叠的「垃圾桶」区,/task trash 列清单、/task restore 或卡上「还原」按钮放回(在办/阻塞归一回待办)。
Web 看板(task-web)
侧栏底栏「任务看板」点开全屏五列看板(待办/进行中/阻塞/待验收/已完成),附「待确认」候选收件箱与底部「垃圾桶」区(被放弃的任务,可展开逐卡还原)。头部操作行带「自动续做」弹窗(开关 + 续做会话选择,task-quota 的运行时旋钮;指定会话的下拉列出运行中与历史会话);会话页 ⏰「定时」弹窗内另有「额度感知续作」开关,把续做目标直接指到该会话。筛选栏:全部 / 项目 / 工作区(任务出生目录)/ 无分组;详情弹窗含验收标准、历史对话(可点击直达会话页)、子任务、上下文包尾部、定时唤醒规则、定时发送栏,以及并行单元的舰队区(每单元分支判定:领先/落后、冲突预检、已合并/已不在,带人类「合并」按钮)。单元卡带 ⑂ 分支 chip;父卡聚合舰队进度(完成/总数与待验收数)。阻塞卡片与详情标注阻塞原因类别(额度/人工等)。⚠ 横幅提示 staleDays 天内最久未动的开放任务(闲置按子树取新鲜值,委派进行中不算搁置)。
配置
| 字段 | 所属插件 | 默认 | 说明 |
|---|---|---|---|
| contextPackByteLimit | task | — | 上下文包字节上限 |
| listDefaultLimit | task | — | list/query 默认返回上限 |
| pollSeconds | task-source / task-wake / task-sched | 30 | 扫描/唤醒/发送轮询间隔 |
| idleHours | task-source | 3 | 会话闲置判定窗口 |
| summariesPerTick | task-source | 2 | 每轮总结会话上限(装机风暴防护) |
| transcriptEvents | task-source | 40 | 总结提示词携带的近端消息条数 |
| staleDays | command-task / task-web | 3 | 搁置告警阈值(天) |
| patrol.at | task-wake | — | 每日巡检时刻(如 '09:30';错过即跳过) |
| agent | task-source / task-wake / task-sched / task-fleet | — | 唤醒/总结/定时发送/舰队单元会话的路由(provider + model) |
| maxUnits | task-fleet | 3 | task_fanout 单次调用的单元数上限 |
| resumeOnReset | task-quota | true | 自动续做的默认值;看板头部弹窗在运行时切换开关并选择续做会话(持久化在 task-quota 自己的存储域) |
开发
pnpm install
pnpm run build # 全量构建(含 web client bundle)
pnpm run test # 构建 + vitest;真模型 e2e 无 DEEPSEEK_API_KEY 时自跳过
pnpm run typecheck
独立 REPL 壳(不经 dsh profile,默认账本 ~/.dsh-task-center):
corepack pnpm start # 也可 --root 指定工作根
常见问题与坑
- 改了插件源码:corepack pnpm run build 后,对 profile 先 remove 再 add file:./packages/bundle——pnpm 缓存 file: 拷贝,--force 刷不掉;
- 改了 web 客户端代码:client bundle 的判定与版本按进程缓存,必须 build 后重启 dsh web;dist/client.js 必须先于组合行存在(声明的 client 包缺 bundle 会让整个 web 启动失败),所以永远先 build 再 add;
- patch 插入的行必须带显式 config(空也给 {}):patch 路径不把缺失 config 归一化,apply 直读 config 且无默认值的插件会当场崩;
- 账本位置:dsh profile 共用 ~/.dsh/storages;独立 REPL 壳默认 ~/.dsh-task-center,两者互不相通。
- 同一时刻只装进一个 profile:定时发送的轮询按启动进程进行;两个 profile 同时装本包会共用 storage 根,对同一行各投一次。独立 REPL 壳永不安装。
路线图
实现进度与分期见 docs/design/04-plan.md:P0/P1、抽取层(6a–6f,含验收出生与打回回流)、进度回流三层、看板历史对话与工作区融合均已落地。当前里程碑:真实使用一周,按实际痛点迭代。
许可
MIT扫码进群