dsh-pocket-console:人不在工位时,把审批和提问送到飞书

前言

用 DeepSeek Harness(DSH)跑长任务时,Agent 常会停在需要人拍板的地方:工具调用要审批、ask_user_question 要回答。人离开电脑,会话就卡在那里,回来才发现进度没动。

整机远程 GUI、聊天里驱动整台 Agent、或只做无法回复的通知,都能部分缓解,但要么要把工作区与会话搬出去,要么只能「知道有动静」却不能当场做决定。下面介绍 dsh-pocket-console:电脑留在原处,只把挡路的决定和对话的下一步,通过飞书卡片发到手机。

这是什么

dsh-pocket-console 由维护者 picsky 发布,在 DSH 社区目录中归类为工作流插件。定位是 IM 控制台里偏「口袋决策」的一类:不把整台机器交出去,只送出审批、提问、结果回复,以及开下一段任务所需的那几步;桌面优先,默认只出站一条 WebSocket,不依赖公网 IP、域名或隧道。

核心功能

经过上面的定位,插件在 README 中写明的可核实能力如下。

送到手机的内容

  1. 工具调用审批:桌面在设定时限内未响应时,飞书收到审批卡;批准仅对该次调用生效(allowed-once),结算后请求 id 失效。
  2. ask_user_question 提问:同样在手机侧以卡片形式送达,可按钮或文字回复。
  3. 一轮结束后的结果:会话停下来后,把本轮结果发到手机,并附带可直接回复的输入框;行为受「结果通知」配置控制。
  4. 执行过程可见:任务在跑时,手机上一张卡片原地更新,便于查看进度。
  5. 下一段任务:结果卡上可带在同一工作区开新会话的表单;在结果卡上回一句,该卡会变为下一轮的「执行中」卡片。

桌面优先与回复方式

默认有「桌面专享时间」(默认 120 秒):桌面在这段时间内若已应答,则不会发到手机;设为 0 表示即时发送。插件不会自动批准,沉默不作数。

在飞书中的操作方式(来自 README):

  • 点卡片按钮,Agent 立刻继续;手机上的回复会作为你自己的消息进入会话。
  • 引用结果卡回话:视为本会话的下一步。
  • 引用审批卡回「允许」或「拒绝」。
  • 引用提问卡:直接写答案。

它不搬什么

不能在手机上翻会话历史、改设置或换工作区;工位、会话、设置和凭据都留在原 DSH 实例。从手机开新任务会在当前会话的工作区里起一轮,仍受 Agent 自身审批规则约束。

安装与启用

发布的 tarball 已内置飞书通道,安装不会解析需构建许可的依赖,也不执行安装期脚本。官方安装命令为:

dsh plugin --profile web add dsh-pocket-console

安装后重启 dsh web,在 设置 → 插件 → 插件配置 →「口袋控制台」 完成绑定(DSH 0.1.7 起,同一张配置卡片也在侧边栏插件页的官方分组下;较旧版本在设置页的插件列表中操作):

  1. 点「扫码创建应用」;若已有飞书应用,点「使用已有的应用」,填写 App ID 与 App Secret。
  2. 用飞书扫码(链接 10 分钟内有效、仅可使用一次)。
  3. 卡片显示「已绑定」,并列出应用、接收人与长连接状态。

凭据与接收人写入凭据库,之后每次启动 dsh 会自动重连长连接。换应用点「使用其他应用」;停止手机侧点「解除绑定」。

卸载:

dsh plugin --profile web remove dsh-pocket-console

注意:从 github: 直接安装不带内置通道 bundle,需在 profile 中补通道;详见仓库内 故障排查。本文安装命令以 npm 发布包为准。

典型用法与配置

插件默认开箱即用。设置卡片中常见项(与 README 表格一致):

设置 默认 含义
桌面专享时间(秒) 120 桌面超时未响应则发到手机;0 为即时
标题前缀 DSH 手机消息标题前缀
结果通知 空闲时通知 会话停下后发结果;延迟复用桌面专享时间

部署层配置(不进设置卡片)可在 $DSH_HOME/profiles/web/cordis.patch.yml 中覆盖;patch 会整体替换该行的 config,需写全要保留的键。出厂示例:

- id: pocket-console
  config:
    channel: dsh-pocket-console/providers/feishu.js
    channelConfig: {}
    delaySeconds: 120
    titlePrefix: DSH
    resultNotify: idle
    resultNotifyCooldownSeconds: 0
    mirrorTtlSeconds: 60
    locale: zh
    debug: off

典型工作流:在桌面给 DSH 丢任务 → 离开工位 → 审批或提问超时后手机收卡 → 点选或引用回复 → Agent 继续;若桌面浏览器仍开着,答完后页面会像本地点击一样结算(镜像约 60 秒内有效,见 mirrorTtlSeconds)。

适用场景与注意

适合:必须离开工位,但希望 Agent 在审批、提问、结果确认处不要长时间空转;接受飞书作为出站通道、且愿意做一次应用绑定。

与同类方案的差别(README 对比表):整机 GUI 镜像适合「电脑跟手走」;纯通知插件只能知晓动静;本插件服务「电脑在原地,决定出门」。

运行与信任:插件以当前 dsh 进程权限运行,审批卡本质是远程代码执行授权通道。安装前应阅读源码、MIT 许可证 与 SECURITY.md。密钥存放在 $DSH_HOME/.credentials.yaml,不放进 Agent 命令的环境变量。

已知限制(README「会怎么坏」):

  • 一个飞书应用只应对一个 DSH 实例;多实例共用一个 bot 时审批可能随机落到某一侧。
  • 进程重启后,内存中的审批/提问待决表清空;重启期间按旧审批卡无效,结果卡可走持久存储仍可用。
  • 卡片文本受飞书请求体字节限制,插件按约 32 KB 请求体截断并提示。
  • 无入站监听:不能做到「任意网络都能连上」那种入站访问。

环境:package.json 要求 Node ^22.19.0 || >=24.0.0。插件针对 DSH 0.1.6-alpha.1 与 0.1.7-rc.2 做全流程验证;其他版本也许可用,维护者未在文档中承诺。

DSH 生态理念是「一切皆插件」;社区目录站点与 DeepSeek / 幻方无官方从属关系,本文介绍的是社区插件,非官方应用商店条目。

结尾

dsh-pocket-console 把 DSH 里卡住人的那几步——审批、提问、可回复的结果与下一段任务——经飞书送到手机,桌面优先、只出站,适合「人走开、任务不能停」的工作流。

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

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

小夜