dsh-closeout:關會話與退 DSH 前的收口體檢

前言

在 DeepSeek Harness(DSH)裏用智能體改代碼,常見結局是:對話可以歸檔或刪掉,但倉庫裏還有未提交改動、沒 push 的提交、臨時目錄裏本會話剛寫的文件,以及長會話是否該寫交接件——這些問題不會隨關窗口自動消失。手工逐倉 git status、翻會話長度,既慢也容易漏。

dsh-closeout 是維護者 xinming-chenniang 發佈的零依賴命令行工具,並附帶一套 skill。v0.5.0 起刻意分成兩個口徑:關本會話前先給「能否歸檔/刪除、該不該交接」的結論和清單;關整個 DSH 應用前再給「能否退出、下次能否正常啓動」的自檢。兩個口徑不合並,避免關會話時冒出進程、內存類噪聲。

本包自 2026-10-21 起不包含輸入框按鈕或收口面板 UI,相關交互拆到獨立插件 dsh-button;未安裝本包時 dsh-button 會降級提示。下面按資料說明定位、檢查項、安裝與典型用法。

這是什麼

dsh-closeout 在 npm 上包名爲 dsh-closeout,當前版本 0.7.0,許可證 MIT,要求 Node.js >= 18。它讀取 DSH 會話庫中的事件類型與時間戳(不讀對話正文),結合 git 狀態、臨時路徑與本會話工具調用裏出現過的倉庫,輸出三檔結論和可複製的處理提示;可選生成交接件骨架或收尾報告。

社區目錄分類爲「工作流」;倉庫地址:https://github.com/xinming-chenniang/dsh-closeout ,目錄頁:https://www.skillhub.cn/plugins/xinming-chenniang/dsh-closeout 。

兩個口徑分別解決什麼

子命令 回答的問題 建議運行時機
closeout(默認,等價 closeout session) 這個會話能不能關、該不該寫交接件 歸檔或刪除一段對話之前
closeout app 整個 DSH 能不能退、下次啓動會不會起不來 退出應用或重啓宿主之前

快速體驗可用 npx,中文輸出加 --zh:

npx dsh-closeout --zh        # 關本會話:能不能歸檔/刪除、該不該交接
npx dsh-closeout app --zh    # 關 DSH:能不能退、退之前確認什麼

會話口徑示例輸出會給出:結論(例如「可以歸檔;先別刪」)、該不該交接、必須處理項(髒倉、本會話寫的臨時文件等),以及未啓用 --local 時標明「沒查的」項。應用口徑會區分「必須處理」(如 profile bundle 斷裂)、「順手看一眼」(待重啓、最近仍在寫的會話、末尾未收口會話)和「不用管」(運行中進程統計等)。

口徑一:關本會話(closeout)

檢查範圍

資料中列出的主要檢查包括:

  1. 未提交改動:對 git status --porcelain 結果拆分暫存/修改/未跟蹤;只統計本會話工具調用裏碰過的倉庫,其他會話留下的改動會明說不計入。
  2. 相對上游領先/落後:未 push 的提交結合提交時間是否落在本會話;behind 多爲提醒;未配置上游則記入「沒查的」。
  3. 臨時目錄中新文件:以本會話最早一條 turn/start 爲窗口起點,路徑歸屬來自本會話工具參數;跳過常見構建/緩存目錄,列表有上限。
  4. 會話長度與收口:調用次數、跨天、turn/end 的 reason、goal blocked 等,主要影響「該不該交接」。
  5. 上下文佔用:可選 --token-threshold;默認只顯示佔用,不硬編碼閾值判交接。
  6. 交接件是否已有:掃描 handoffs/*.md,匹配 原會話:session-… 等規則。
  7. 本機側的門(可選):--local <工作區> 時調用工作區內的規則鎖、結構衛生、規則審計腳本;未給參數則不進這項。

工具有意不讀對話正文、不依賴 atime、也不替你提交或刪文件,只給判斷與可複製命令。

結論三檔(刪除門檻高於歸檔)

  • 可以直接歸檔或刪除:無未落盤項且交接已齊。
  • 可以歸檔;刪之前先寫交接件:該交接但交接件不存在(歸檔可逆,刪除不可逆)。
  • 可以歸檔;先別刪:仍有髒倉、未推提交或本會話臨時文件等。

「該不該寫交接件」與工作區 tools/sessions-handoff.mjs 同源的五條判據一致,例如調用數超過 --threshold(默認 300)、末尾未 completed、goal blocked、跨自然日且未收口、或超過 --token-threshold 等;子會話與 0 調用會話有特殊處理規則。

交接件與收尾報告

工作區根目錄取「向上第一處有 handoffs/ 的目錄」,否則取最近一層含 AGENTS.md 或 .git 的目錄,避免在一次性 tmp/ 任務目錄裏跑出口徑錯誤的落盤路徑。v0.7 起一個工作區只產出一份文檔:

  • 有 handoffs/:寫交接件(七節結構 + 原會話:)到該臺賬;沒有本地臺賬時落到 ~/.dsh/handoffs/<工作區名>/。
  • 沒有 handoffs/:默認 stdout 打出六節收尾報告;需要留檔再用 --report-out。

常用命令:

closeout --zh --handoff --task 收尾工具          # 有 handoffs/ 的工作區 → 寫進臺賬
closeout --zh --handoff --task X --dry-run       # 只打印
closeout --zh --report                           # 默認不寫盤
closeout --zh --report --report-out 收尾報告.md   # 相對路徑按工作區根

默認不覆蓋已有交接文件;覆蓋需 --force。

口徑二:關 DSH(closeout app)

應用口徑關注下次能否正常啓動,而不是攔你結束當前運行態。典型檢查包括:DeepSeek Harness 進程與內存(僅報告)、pending-restart.json 待重啓標記、上次重啓結果、近期有寫入的會話與末尾未收口會話、profile 裏 bundle 與 dependencies/node_modules 是否可解析、dependencies 有而 bundles 無的依賴等。可選 --local 與會話口徑相同;後臺 jobs、終端、未回答審批等宿主內存態資料標明外部讀不到,需在 UI 自行確認。

結論同樣三檔:可直接退出、退出前確認若干件事、或先別退出(存在會導致下次起不來的必須處理項)。--handoff / --report 不在此口徑產出。

應用口徑目前無專用按鈕;dsh-button 面板命令固定爲會話側的 closeout --json --zh。要查退出應用前狀態,需在終端執行 closeout app --zh,或對 agent 明確說「準備關 DSH / 退出應用前查一下」(skill 第 5 步)。

安裝與啓用

CLI

# 臨時用一次(零安裝)
npx dsh-closeout --zh

# 全局裝命令
npm i -g dsh-closeout
closeout --zh

# 開發時鏈接本地副本
cd dsh-closeout && npm link

全局安裝後可直接使用 closeout 命令;行爲與 npx dsh-closeout 一致。

Skill

倉庫根目錄沒有 SKILL.md,技能文件在 skills/closeout/SKILL.md。DSH 只識別 ~/.dsh/skills/<名字>/SKILL.md 這一層路徑,資料建議複製該文件到 ~/.dsh/skills/closeout/,不要把整個倉庫誤放進 skills/ 根下。裝好後對 agent 說「收尾」「收口」或「關這個會話」會走同步(可選)→ 體檢 → 交接或報告流程;說「準備關 DSH」則觸發 closeout app。

插件通過 DSH 的 bundle 機制可掛載 cordis.patch.yml(見 package.json 的 dsh.bundle.patch);具體是否在個人 profile 裏啓用 bundle,以你本機 DSH 配置爲準。

典型用法

關當前會話(默認會話 id 來自 $DSH_SESSION_ID 或最近寫入的會話):

closeout --zh
closeout session --zh
closeout --repo ../api --repo ../web      # 可重複指定倉庫
closeout --temp ./scratch --hours 6       # 臨時目錄與窗口
closeout --session <id>
closeout --token-threshold 150000         # 默認 0:只顯示不判
closeout --cwd D:\dsh
closeout --local D:\dsh                   # 額外跑工作區側檢查

退出 DSH 前:

closeout app --zh

資料中的「收尾」流程統一爲:① 收尾·同步(工作區 tools/dsh-sync.*,本工具只探測提示)→ ② 收尾·體檢(closeout --zh)→ ③ 交接或報告(二選一)→ ④ 退出 DSH(closeout app --zh)。舊稱「收口」對應體檢步驟,「收工」對應同步步驟。

觸發方式還包括:輸入框「收尾」按鈕提交文案由 agent 按 skill 執行;「收口」面板由宿主 spawn closeout --json --zh 只讀展示;終端與 CI 可直接調用上述命令。

適用場景與注意

適合在 DSH 中頻繁開長會話、多倉庫並行、或需要 handoffs 臺賬的團隊個人工作流:關會話前一次性看見「磁盤上還沒落地的部分」和「刪除是否比歸檔多一道交接門檻」。

使用時請注意:

  1. 工具以當前 DSH 進程與 shell 用戶權限讀 git、會話庫和 ~/.dsh 配置;安裝 npm 包或啓用 bundle 前,建議在 GitHub 閱讀源碼與 MIT 許可證。
  2. 未加 --local 時,工作區自定義規則鎖等檢查不會執行,輸出裏的「沒查的」不等於沒問題。
  3. 社區插件目錄 skillhub.cn 爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;星標與版本以倉庫與 npm 發佈爲準。

結尾

dsh-closeout 把「關 AI 編碼會話」和「關 DSH 應用」拆成兩條可復現的體檢命令,用會話事件與 git 事實給出歸檔/刪除/交接判斷,並可按工作區形態生成交接件或收尾報告。進一步說明見目錄頁 https://www.skillhub.cn/plugins/xinming-chenniang/dsh-closeout 與倉庫 https://github.com/xinming-chenniang/dsh-closeout 。

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

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

小夜