oh-my-ticket:DSH 的五级任务体系与 run 批量执行插件

前言

在 DSH 里跑工程类任务,任务清单往哪放是个现实问题:拆出来的 Epic、Story、Ticket 散在对话里,换一轮对话就得重新对齐;放进仓库里的 Markdown 文档,模型每轮都要重新定位和更新,人也缺少一个集中的视图。

oh-my-ticket(OMT)的思路是把任务树做成插件的一等公民:层级存进项目目录,元数据进 SQLite、正文进 Markdown,模型通过工具创建和推进,人通过 UI 浏览和管理,批量执行交给 run 机制兜底。下面介绍它的结构、安装方式和典型用法。

这是什么

oh-my-ticket 是 rqwj 维护的 DSH ticket 管理插件,MIT 许可,当前版本 0.6.4,README 徽章标注平台为 DeepSeek Harness(测试版本 0.1.2-alpha.3)。命名上对应三处:README 标题 Oh-My-Ticket (OMT),npm 包名 dsh-oh-my-ticket,仓库 rqwj/oh-my-ticket,下文统一称 OMT。

一句话定位:Epic → Story → [SubStory] → Ticket → [SubTicket] 五级任务体系,SQLite 存元数据与层级关系,Markdown 存正文,ticket 随项目走,人机共用同一份树,并提供 run 批量执行。

核心功能

五级任务体系与归属

层级固定为五级,方括号表示可选:Epic → Story → [SubStory] → Ticket → [SubTicket]

存储上双写:SQLite 存元数据与层级关系,Markdown 存正文。正文在磁盘上可以直接编辑,手工改动后用 omt_reindex 重建索引即可;SQLite 索引本身已 gitignore,随时可重建。

归属规则:

1、工作区根目录存在 .omt/ 时,ticket 随项目走,可直接进 git;
2、否则回退全局 home,解析顺序为插件 config > OMT_HOME > ~/.omt
3、id 跨 home 全局唯一,创建 Epic 时弹窗选择归属。

运行时配置(home / runtime dir)的解析契约为参数 > 环境变量 > 默认值,多端一致,由跨层 parity 测试锁定。

三种 UI 外壳与树交互

同一份 ticket 树提供三种可切换外壳:

  • 左侧抽屉(shell.overlay 浮层);
  • 自由拖拽浮窗;
  • OMT Tab:与 Chat | Trajectory 并列,可弹出为浮窗。

三种外壳共享同一套树交互:类型徽章(E/S/SS/T/ST)、状态点、优先级信号条(P1–P3)、搜索、类型/状态/优先级多选过滤、优先级排序、编号显示开关。过滤器状态自动保存到工作区 .omt/ui-filters.json。归档是独立于生命周期状态的只读维度。

变更推送走自有 SSE 通道 /omt/events,模型改完 UI 立刻刷新。

文档详情与双向联动

选中节点即在详情面板打开完整文档,可执行标题/状态/优先级/归档操作、追加进度记录;「执行」按钮把 ticket 引用进输入框提交执行。

模型与 UI 双向联动:输入 @ 触发器引用 ticket,输入框上方出现引用条;每轮对话末尾自动展示相关 ticket 列表。

run 批量执行

run 把一批 Ticket/SubTicket 快照成有序批次,交给模型逐项认领、执行、如实报告。item 状态机为 pending → running → done / failed / blocked / skipped / interrupted,另有信任策略态 awaiting_confirmation——非 report 的裸 done 需要人在 run 详情里确认或打回。run 支持 pause / resume / retry。

两个设计细节:

1、执行上下文注入:claim 成功即读取祖先链正文作为只读背景返回,16 KiB 预算内最近父级优先,截断显式标记,单点读取失败降级不阻塞;
2、祖先激活:ticket 开工自动点亮仍为 open 的祖先链,done/blocked/skipped 祖先永不重开,归档祖先静默跳过。

UI 侧,树行「▸▸」一键加入 run;从 UI 触发「开始执行」会自动唤醒执行会话进入 claim 循环。

模型工具与内嵌 skill

插件注册 12 个 omt_* 模型工具:

  • ticket 操作:omt_create / omt_list / omt_show / omt_update / omt_move / omt_reindex
  • run 操作:omt_run_create / omt_run_list / omt_run_show / omt_run_control / omt_run_claim / omt_run_report

其中 omt_run_claim 原子认领下一项并绑定执行者,返回只读祖先上下文;omt_run_report 报告单项结果(done/failed/blocked/skipped),note 记入 ticket 进度。

内嵌两个 skill:omt 教 ticket 体系操作规范与状态流转约定,omt-runs 教 run 批次纪律。插件启用后,完整 OMT 操作规范默认写入系统提示,不必先 load skill;设置页可追加约定,并从已装 skill 中勾选拆票 skill。

安装与启用

从 npm 安装已发布版本:

pnpm dsh plugin --profile <profile> add dsh-oh-my-ticket@0.6.4

也可以在本仓库构建打包后从本地安装:

pnpm install && pnpm build && npm pack    # 产出 dsh-oh-my-ticket-0.6.4.tgz
pnpm dsh plugin --profile <profile> add /path/to/dsh-oh-my-ticket-0.6.4.tgz

启用要求目标 profile 的 dsh.profile.bundles 依次为:

1、@deepseek-ai/dsh-base
2、@deepseek-ai/dsh-web-app
3、dsh-oh-my-ticket

daemon 二进制随主包以 optionalDependency 自动带入(@oh-my-ticket/darwin-arm64),也可经 brew / install.sh / GitHub Release 独立获取。

安装或升级后需重启 dsh web 进程,新版本的工具与 UI 才会生效。

典型用法

先让项目拥有独立的 ticket 库。在项目根目录执行:

mkdir .omt

.omt/ 随项目进 git,ticket 库也就跟着项目走。

之后的日常流程大致是:

1、让模型用 omt_create 拆出 Epic / Story / Ticket 层级;
2、在树中选中任务行,「▸▸」加入 run,或由模型 omt_run_create 快照一批 Ticket/SubTicket;
3、从 UI 触发「开始执行」,执行会话进入 claim 循环;
4、模型逐项 omt_run_claim 认领(返回只读祖先上下文并激活 open 祖先),完成后 omt_run_report 汇报结果,note 记入 ticket 进度。

如果直接在磁盘上手工改了 Markdown 正文,跑一次 omt_reindex 重建 SQLite 索引。

适用场景与注意

适合的场景:在 DSH 里做多步骤工程任务,需要任务树持久化进项目、模型和人共用一份任务视图、批量执行有状态机与信任策略兜底的智能体开发者。

注意几点:

  • 插件以当前 dsh 进程的权限运行,安装前建议检查源码与许可证(本项目为 MIT);
  • daemon 平台包目前仅提供 @oh-my-ticket/darwin-arm64
  • profile 的 dsh.profile.bundles 顺序有要求,见上文安装一节;
  • 归档是只读维度;SQLite 索引已 gitignore,可用 omt_reindex 重建。

小结

OMT 把任务管理收进一个 DSH 插件:五级树、SQLite + Markdown 双写、随项目进 git,模型侧 12 个工具加两个 skill 约束行为,人侧三种外壳浏览管理,批量执行有状态机与信任策略兜底。源码与目录页在:

  • GitHub:https://github.com/rqwj/oh-my-ticket
  • 目录页:https://www.skillhub.cn/plugins/rqwj/oh-my-ticket

目录页为社区独立维护的插件目录,与 DeepSeek / 幻方无官方从属关系。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜