dsh-btw-live:在 DeepSeek Harness 里对「进行中会话」旁路提问

前言

在 DeepSeek Harness(DSH)里跑长任务时,主对话往往还在一轮里不断调用工具、流式输出。若你想问一句「现在做到哪了」或「刚才那条报错什么意思」,常见做法是开新会话、复制粘贴上下文,或者等当前轮结束再追问——前者割裂上下文,后者耽误节奏。fork 型旁路提问有时还要停住当前 turn,才能读到「此刻」的状态。

下面介绍社区插件 dsh-btw-live(维护者 neutron42-jp):在 Web 会话里注册 /btw 命令,包含正在执行的这一轮,从旁问一句;回答用 BTW 卡片展示,不写入会话历史,也不进入后续模型的上下文。插件归类为「模型推理」,许可证 MIT,当前 package 版本为 1.4.1(以仓库 package.json 为准)。

这是什么

dsh-btw-live 是 DSH 的 Web 侧 bundle 插件(npm 包名 @local/btw-live)。它在宿主侧注册 btw 命令,在浏览器侧替换 conversation.chat.commandview 里对 btw 的展示;一次 LLM 调用、不执行工具、不写历史。

与「另开会话再问」相比:模型解析顺序与会话一致(未发送的模型选择 → 上一请求的 header → 默认模型),且能通过 session.snapshotEvents() 读到执行中 turn 的工具调用与结果,无需先停住主 turn。

核心功能

依据 GitHub README 与仓库说明,已核实能力如下。

  1. 旁路单次推理:从会话日志组 transcript,经 llm 流式调用一次;结果经 command/done 的 text 返回,不挂进主对话链。
  2. 覆盖进行中 turn:通过 session.snapshotEvents() 读取事件(含当前轮工具与结果);与 fork 型旁路不同,不必先结束 turn 才能问「现在怎样」。
  3. 模型与 reasoning 跟随会话:使用当前会话的 provider / model / reasoning effort(未指定时用适配器默认);仅对输出上限做收紧(默认 maxTokens 4096)。若提供商拒绝该形态,会按 dsh-llm 的失败码(如 EMPTY_RESPONSE、PI_AI_ERROR、TIMEOUT、TRANSPORT)最多再试一次与主会话相同上限的形态。
  4. Web 展示:答案在 transcript 中以 BTW 卡片呈现,支持 Markdown;长文卡片内滚动,点击标题可折叠。等待时显示「考えています…」(locale 支持 ja / en / zh);失败以红色提示,成功则自动展开。
  5. 会话路由:调用携带会话 id 作为 sessionId(OpenCode 系通过 x-opencode-session 路由;缺失会 400 MissingSessionID)。

环境与依赖

项目 要求
DeepSeek Harness README 在 0.2.1-rc.2 上验证(使用 conversation.chat.commandview 槽位)
Node.js 22 及以上

插件在当前 DSH 进程权限下运行;安装前请自行查看源码与 MIT 许可证,社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。

安装与启用

官方 README 给出的安装方式是在 Web profile 目录用 pnpm link 本地包(请勿自行拼接 dsh plugin add github:... 一类未在文档出现的命令)。

先在本地准备好插件目录,再在 Web profile 中 link:

cd "${DSH_HOME:-$HOME/.dsh}/profiles/web"
pnpm add link:/path/to/dsh-btw-live

将 bundle 写入该 profile 的 package.json 的 dsh.profile.bundles:

"bundles": [
  "@deepseek-ai/dsh-base",
  "@deepseek-ai/dsh-web-app",
  "@local/btw-live"
]

重启 dsh web 并刷新页面。客户端仅在启动时扫描 bundle,首次安装必须重启;之后若只改 client.js,HMR 可热更新。

典型用法

在会话输入框使用斜杠命令,后跟你的旁路问题。README 示例(日语):

/btw いまどこまで進んだ?

中文场景可同样写法,例如询问当前进度或澄清刚出现的工具结果;具体措辞不限,命令名固定为 btw。

配置项

在插件的 cordis.patch.yml 的 config 中可改(下表为 README 记载的默认值):

键 默认值 含义
maxEvents 80 读取的事件数量(从末尾起)
maxChars 16000 组 transcript 的字符上限
toolArgChars 300 工具参数展示截断长度
toolResultChars 900 工具结果展示截断长度
maxTokens 4096 旁路回答的最大 token
timeoutMs 120000 单次调用的超时(毫秒)

调小 maxEvents / maxChars 可减轻上下文体积,但可能漏掉较早步骤;maxTokens 过小会更容易触发带上限形态的失败并进入 README 所述的二次尝试逻辑。

失败与排错

卡片上会按次显示每次尝试的结局(finish 的 reason.kind 与 failure.code / HTTP 状态 / 消息)。示例形态:

btw failed: no answer (#1 error PI_AI_ERROR HTTP 400 — …; #2 stop; provider=… model=…)

#1 为带输出上限的调用,#2 为与主会话相同上限形态;若第二次成功,界面仍按成功展示。认证、配额、上下文超限等「重试同形也无益」的错误不会盲目重试。

适用场景与注意

  • 适合:长 agent 任务中临时确认进度、解读当前轮工具输出、不想污染主 transcript 的追问。
  • 不适合:需要把旁路答案写回主对话、或依赖工具执行才能回答的问题(本插件明确不跑工具)。
  • 注意:旁路仍消耗同一 provider 的配额;transcript 截断由上述配置决定,极长会话可能看不到最早事件。

结尾

dsh-btw-live 用 /btw 把「问一句当前会话(含进行中 turn)」做成一次性的旁路推理,回答留在 BTW 卡片里,不进历史。若你在 Web 上常驻 DSH 做工具型会话,可按 README 的 link + bundles 方式接入。

  • 社区目录页:https://www.skillhub.cn/plugins/neutron42-jp/dsh-btw-live
  • 源码与说明:https://github.com/neutron42-jp/dsh-btw-live
羽毛球分组比赛记分
小程序二维码

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

Xiaoye