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 。

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

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

Xiaoye