前言¶
在 DeepSeek Harness(DSH)里跑长任务时,会话常会停在「等你选一项」「等你审批」或「等你确认计划」这类状态。人不在终端前,进程就挂着;等你回来,上下文可能已经冷掉。社区里也有把整段会话问答搬进飞书的方案,但那是另一种形态——全程在飞书侧交互。若你只想在真正卡住时被叫醒、在飞书里答一句、再把答案自动送回 DSH,就需要专门做「卡住才介入」的中继,而不是抢会话控制权。
下面介绍维护者 Yo1ick 发布的 dsh-stuck-reply(分类:工作流)。它在 DSH 会话卡在提问、审批或计划时,通过飞书通知你;你在飞书里回复,答复会按协议写回,由配套看守进程喂回会话。
这是什么¶
dsh-stuck-reply 的定位是:卡住会话飞书答复代理。它不搬会话、不注册工具或 subagent,也不直接检测「是否卡住」或「如何把答案写进会话」——这两步由仓库外的 watch 看守 负责。本插件只做飞书中继:读意图文件、发通知、收回复、发回执、心跳互检。
与 dsh-lark 的对比(README 原文表述):dsh-lark 把会话问答搬进飞书;本插件不搬任何东西,只在卡住时用飞书叫醒你并把答复带回。缺了 watch,插件可以启动,但不会收到任何通知——这是设计边界,不是缺陷。
两件套形态¶
两者通过 stateRoot 下的意图文件协议 v1 通信(原子写、版本戳、id 幂等、消费后归档):
- 外挂 watch(不在本仓):检测会话卡住、维护状态机,通过 DSH Remote API 应用答案,并在
stateRoot下写意图文件。 - 本插件:飞书通知、收回复、应用回执、心跳互检。
部署时须同时规划 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。