前言¶
在 DeepSeek Harness(DSH)里跑长任务时,主 Agent 往往已经占住驱动:你想问一句「这一步为什么慢」,或者突然记起「某个文件刚改过、别再动」,若用 steer 发成普通用户消息,模型容易把它当成新任务,打断手头工作或重复已完成的步骤。
liufeicc/dsh-btw-command 提供 /btw 斜杠命令,面向正在运行的会话:旁注式提问得到独立回答,或把补充事实投进下一步上下文,而不唤醒正在跑的 driver。下面按功能、用法、配置和界面说明如何理解和使用它。
这是什么¶
- 名称:
dsh-btw-command(npm 包名@local/dsh-btw-command,版本1.0.0) - 维护者:liufeicc
- 分类:客户端(Web 端注入
@deepseek-ai/dsh-client-ui-conversation,immediately: true) - 许可证:MIT
- 来源:GitHub、SkillHub 目录页
官方简介:/btw slash command for DSH: ask a side question or inject information into a running agent session。
SkillHub 是社区插件目录站点,与 DeepSeek / 幻方无官方从属关系;DSH 侧插件通常从社区或源码按各自说明安装,并非内置应用商店条目。
核心功能¶
两种行为,自动判定¶
用户不必加 ? 前缀;旁注助手根据语义二选一:
| 用户说的话 | 判定 | 实际发生什么 |
|---|---|---|
| 提问题(进度 / 原因 / 某个数值) | question |
起一次独立的模型请求,回答作为命令结果返回 |
| 补充事实 / 决定 / 约束 / 偏好 | info |
整理成一条记忆条目,经 agent.inject() 投到 next-step |
提问:独立请求,不进主 Agent 上下文¶
steer 会把用户输入当新指令,主 Agent 可能丢活或重做。旁注要求「只回答、不改变」,因此提问路径为:
session.deriveMessages()取当前会话真正送给模型的历史;- 保留原 system prompt,末尾追加「旁注助手,只回答、不动手」;
ctx.llm.stream()发请求,模型路由用session.requestHeader().config(与主线同模型);- 回答作为命令结果返回。
command/run/command/done为 log-only,不进模型上下文。
补充信息:inject 且不打断 driver¶
agent.inject() 把内容排到下一步 pre-step 收件箱,不唤醒正在跑的 driver;下一段模型请求可读。注入消息带 [补充信息 · 用户插话] 前缀及「不要当成新任务」说明,避免 user 角色被误解为新指令。
判错时的安全策略¶
- 解析不出 JSON ⇒ 一律退化为「回答原文」(当提问),不注入记忆;
info但memory为空 ⇒ 同样退化;- 设计刻意不对称:避免脏数据写入记忆。
安装与启用¶
README 与 GitHub 仓库页未给出可逐字复制的一行 shell 安装命令。安装步骤请以 SkillHub 目录页 上「发送给 DeepSeek Harness 安装」段落为准(页面表述为安装插件 liufeicc/dsh-btw-command)。
安装前建议:
- 在 GitHub 阅读源码与
cordis.patch.yml,确认行为符合预期; - 确认许可证为 MIT(见
package.json); - 记住插件在当前 DSH 进程权限下运行,与主 Agent 共用环境与配置。
安装后,客户端配置项默认可用;总开关 enabled 默认为 true。
典型用法¶
在输入框直接输入,或在工具行气泡入口发送相同内容:
/btw 为什么这一步这么慢
/btw 记住 MEMORY.md 已经改过,别再改
第一句趋向 question,得到旁注回答;第二句趋向 info,在下一步被主 Agent 读到约束。
配置¶
插件 config 字段均可省略:
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
historyMessages |
40 |
喂给旁注助手的历史条数上限 |
maxHistoryChars |
120000 |
历史字符上限 |
maxAnswerChars |
4000 |
回答最大字符数 |
timeoutMs |
120000 |
单次旁注请求超时(毫秒) |
界面与交互¶
两个入口共用同一份命令数据:
| 入口 | 行为 |
|---|---|
输入框工具行气泡按钮(+ 右侧) |
浮层提问,回车发送 |
输入框 /btw … |
同一命令节点,浮层自动弹出并显示答案 |
Agent 运行、对话行折进「运行过程」时,浮层仍可读最新 btw 命令节点(useChat 读 snapshot.nodes.values(),含折叠节点)。时间线里另有 conversation.chat.commandview 的 btw 卡片;空闲时更易浏览,运行中可展开「运行过程」查看。
浮层按当前窗格与 composer 实时矩形定位(贴在 composer 上方 8px,宽度不超出窗格,过高时内部滚动),经 portal 挂到 document.body,随 resize / scroll 更新。
为让输入框立刻清空,handler 先返回占位并完成 commands.execute 结算,后台完成后用同一 commandId 追加 command/done,客户端原地刷新答案,不新增事件类型。
已知边界¶
- 旁注只看模型可见历史;长时间构建等「进程状态」未必在历史里,只能从工具结果推断(未来可读会话日志或
job表,README 标为 P2)。 - 历史从最近一条
user消息切开,以满足 tool 调用与结果的协议对齐。 - 旁注回答为一次性返回,非流式(P2)。
维护者本地测试命令(README):
node --test test/*.test.mjs
README 写明 25 条用例,覆盖「提问不注入」「补充才注入」「解析失败绝不注入」及浮层几何等场景。
适用场景与注意¶
适合:长 Agent 任务中偶尔追问进度或原因,或临时追加约束/偏好而不 steer 主线。
注意:
- 旁注准确性受历史裁剪与模型判定影响;敏感操作仍以明确 steer 或人工复核为准;
- 插件修改 Web 客户端与会话注入路径,升级 DSH 或插件后应回归测试
/btw两种分支; - 星标等社区指标以目录页为准(当前 GitHub 显示 0 stars),不代表功能完备度。
结尾¶
dsh-btw-command 把「旁注」拆成两条技术路径:提问走独立 LLM 请求且不动主上下文,补充信息走 inject 且不唤醒 driver。对需要在运行中插一句话的 DSH 用户,它是客户端侧的可选插件。
- 目录页:https://www.skillhub.cn/plugins/liufeicc/dsh-btw-command
- 源码与详细设计:https://github.com/liufeicc/dsh-btw-command