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 / 幻方無官方從屬關係。

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

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

小夜