dsh-stuck-reply:DSH 卡住会话时的飞书答复代理

前言

在 DeepSeek Harness(DSH)里跑长任务时,会话常会停在「等你选一项」「等你审批」或「等你确认计划」这类状态。人不在终端前,进程就挂着;等你回来,上下文可能已经冷掉。社区里也有把整段会话问答搬进飞书的方案,但那是另一种形态——全程在飞书侧交互。若你只想在真正卡住时被叫醒、在飞书里答一句、再把答案自动送回 DSH,就需要专门做「卡住才介入」的中继,而不是抢会话控制权。

下面介绍维护者 Yo1ick 发布的 dsh-stuck-reply(分类:工作流)。它在 DSH 会话卡在提问、审批或计划时,通过飞书通知你;你在飞书里回复,答复会按协议写回,由配套看守进程喂回会话。

这是什么

dsh-stuck-reply 的定位是:卡住会话飞书答复代理。它不搬会话、不注册工具或 subagent,也不直接检测「是否卡住」或「如何把答案写进会话」——这两步由仓库外的 watch 看守 负责。本插件只做飞书中继:读意图文件、发通知、收回复、发回执、心跳互检。

与 dsh-lark 的对比(README 原文表述):dsh-lark 把会话问答搬进飞书;本插件不搬任何东西,只在卡住时用飞书叫醒你并把答复带回。缺了 watch,插件可以启动,但不会收到任何通知——这是设计边界,不是缺陷。

两件套形态

两者通过 stateRoot 下的意图文件协议 v1 通信(原子写、版本戳、id 幂等、消费后归档):

  1. 外挂 watch(不在本仓):检测会话卡住、维护状态机,通过 DSH Remote API 应用答案,并在 stateRoot 下写意图文件。
  2. 本插件:飞书通知、收回复、应用回执、心跳互检。

部署时须同时规划 stateRoot 路径与 watch 的安装方式;只装插件而不装 watch,飞书侧不会有卡住通知。

核心功能

  • 飞书通知:卡住时推送带 #N 编号的消息,多条并存时可指定条目回复。
  • 回复规则:选项序号(如 1)、指定条目(如 #1 2)、任意文字作自定义答案、审批场景的 批准 / 拒绝、以及 取消 放弃。
  • 安全与隔离:飞书凭据只在 lark-cli 自身认证里,不进包、不进 git;插件不碰会话 seam,仅文件轮询 + lark-cli 出站调用。
  • 可靠性:发送异步(15s 超时),失败不归档,最多重试 3 次后放弃并写 plugin.log;同一 stateRoot 有单实例锁(plugin.lock + pid 存活检测),bundle 与 standalone 可同时安装,但只有一个在消费。

运行环境(package.json):Node >=22.4.0,peer 依赖 @deepseek-ai/cordis ^4.0.1,当前包版本 0.1.2,许可证 MIT。

安装与启用

在 DSH 中安装(命令来自官方 README):

dsh plugin add dsh-stuck-reply        # 或 npm/pnpm 本地路径

在 profile 的 cordis.patch.yml 里参考 config.example.yaml 配置。必填 stateRoot;larkCli 缺省为 PATH 中的 lark-cli:

- insert:
    - id: dsh-stuck-reply
      name: 'dsh-stuck-reply'
      config:
        stateRoot: '/path/to/dsh-stuck/state'
        larkCli: 'lark-cli'

启动时会校验:stateRoot 为空,或 larkCli 为绝对路径但文件不存在,会直接报错退出,不会静默不工作。

不装进 DSH 时,可用独立脚本运行:

node standalone.mjs --state-root /path/to/dsh-stuck/state --lark-cli /opt/homebrew/bin/lark-cli

使用前需本机已配置好 lark-cli 与飞书认证;插件以当前 DSH 进程(或运行 standalone 的用户)权限读写 stateRoot 并调用 CLI,安装前应阅读仓库源码与 MIT 许可证,确认路径与凭据管理方式符合你的环境策略。

典型用法:飞书侧怎么答

卡住时通知大致如下(README 示例):

🔔 DSH 会话等你选择(本条编号 #1)
会话:<标题>
问题:今晚想吃什么?
1. 火锅
2. 烧烤
直接回复序号(如 1)选择;回复自定义文字作答案;回「取消」放弃。

按场景回复即可:选 1 或 #1 2 指定条目;直接打字作自定义答案;审批用 批准 / 拒绝;不想继续则 取消。答复经插件写回意图文件,由 watch 应用进 DSH 会话。

适用场景与注意

适合:本地或远程跑着 DSH 长任务,希望只在提问、审批、计划卡住时用手机飞书处理,且愿意部署 watch + 共享 stateRoot 的开发者。

注意:

  • 插件不替代 watch;意图文件协议与 Remote API 应用答案都在看守侧完成。
  • 同一 stateRoot 勿多实例并发消费;锁机制保证崩溃后另一实例可接管。
  • DSH 生态是「一切皆插件」;社区目录页与 GitHub 仓库由维护者发布,与 DeepSeek / 幻方无官方从属关系,安装来源以你信任的目录与仓库为准。

结尾

dsh-stuck-reply 把「卡住才介入」做成飞书中继:不抢会话控制权,只在需要人时出现,并把飞书里的选择或文字带回 DSH。完整说明与配置示例见仓库 README。

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

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

小夜