前言¶
在 DeepSeek Harness(DSH)里和智能体多轮对话时,常见情况是:模型刚答完,你还得自己想「下一句该问什么」。有人靠复制上一条问题改几个字,有人切到别的窗口查资料再回来——输入框经常是空的,而思路还没接上。
dsh-next-prompt 是社区插件,维护者为 ihodorchenko,分类为模型推理。它在每一轮回答结束后,由 Host 侧用一次短 LLM 请求(或失败时的启发式规则)生成 2–3 个「下一条用户消息」候选,并在 Web GUI 的消息输入框里以灰色「幽灵文本」显示最佳一条;按 Tab 或点击即可写入草稿,Esc 可隐藏。不会自动发送,也不会改写会话历史或往日志里塞内容。
下面介绍插件定位、安装方式、配置与日常使用注意点。事实以 GitHub 仓库 README 为准;社区目录页见 skillhub.cn。DSH 生态强调「一切皆插件」,该目录为独立社区站点,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-next-prompt(npm 包名 dsh-next-prompt,当前资料中版本为 0.1.0,许可证 MIT)由 Host 与浏览器两半组成:
| 部分 | 位置 | 作用 |
|---|---|---|
index.js(Host) |
DSH Host 进程(Node) | 监听根会话的 turn/end,取最后一问一答,向模型请求若干条下一句建议;模型不可用时退回启发式。通过 GET /next-prompt/suggest 提供给浏览器。 |
lib/client.js(Client) |
Web GUI | 注册到 conversation.input.overlay,显示幽灵文本,处理 Tab / 点击 / Esc,经 inputActions.setDraft 写入草稿。 |
插件不新增面向模型的工具、不写会话日志、不改变已有消息记录。
核心功能¶
- 回合结束后生成建议:仅在根会话
turn/end且原因completed时触发(subagent 会话不处理)。Host 用ctx.llm.stream()做一次受限输出,解析 JSON 数组;任意错误则走启发式,不阻塞界面。 - 输入框幽灵提示:仅当输入框为空、回合已结束、且不在 agent 运行中时显示;用户已开始输入、发送、换会话或按 Esc 会隐藏。接受后与普通草稿相同,可编辑再 Enter 发送。
- HTTP 接口:路由前缀固定为
/next-prompt。客户端轮询GET /next-prompt/suggest?session=<id>(Cache-Control: no-store);GET /next-prompt/config返回当前配置。完整建议列表在 API 中,UI 只展示最优一条。 - 可选纯 API:
showGhost: false时 Host 仍生成,但不画 overlay。
安装与启用¶
推荐通过 Plugin Manager / CLI 安装。资料中的命令如下,请勿自行改写成未在文档出现的 spec。
本地 link(开发或自托管目录):
dsh plugin --profile desktop add link:/absolute/path/to/dsh-next-prompt
从 GitHub(与 Web GUI 里按 git 地址安装等价):
dsh plugin --profile desktop add git+https://github.com/ihodorchenko/dsh-next-prompt.git
也可在 Web GUI:Plugins → 使用 link:/absolute/path/to/dsh-next-prompt 或上述 git 地址。
link: 安装会依赖包内 dsh.bundle.patch,把 dsh-next-prompt 写入 dsh.profile.bundles;开启 HMR 时改 Host/Client 源码后 profile 可热重载,但移动或删除插件目录会使安装失效,需从新路径重装。
手动挂载时,在 ~/.dsh/profiles/<profile>/cordis.patch.yml 增加条目,并保证 profile 能解析到包(link: 依赖或 node_modules + bundles)。示例插入:
- insert:
- id: next-prompt
name: dsh-next-prompt
Git 安装可通过 Plugin Manager 的 Update 或再次执行 dsh plugin add 更新。
配置¶
所有字段可选;在 cordis.patch.yml 的插件条目下写 config: 即可。Host 要求 Node >= 20。
| 字段 | 默认 | 含义 |
|---|---|---|
enabled |
true |
false 时 Host 不生成、不返回建议。 |
maxSuggestions |
3 |
向模型请求的条数;界面只显示最好的一条。 |
showGhost |
true |
是否在输入框显示幽灵文本。 |
language |
auto |
auto 跟随对话;ru / en 强制语言。 |
model |
'' |
空则沿用该会话最后一次请求的模型;否则指定 provider/model 或裸 model id。 |
minAnswerChars |
40 |
助手回答短于该长度时不生成建议。 |
示例:
- insert:
- id: next-prompt
name: dsh-next-prompt
config:
language: ru
maxSuggestions: 3
model: deepseek-account/deepseek-flash
典型用法¶
- 安装并启用 profile 后,正常与 agent 对话,等待一轮回答完成。
- 若输入框为空,应看到与 placeholder 对齐的灰色建议文(overlay 对齐
[data-composer-placeholder]的字体与位置)。 - Tab(无修饰键、无 IME 组合、无打开菜单)或点击幽灵文本 → 文本进入草稿,按需修改后发送。
- Esc 或继续打字 → 隐藏建议,不影响已输入内容。
诊断时可确认 Host 路由是否存活:
curl 'http://127.0.0.1:<port>/next-prompt/config'
客户端是否加载可在 SSE GET /plugins/events 的 entries 中查找 dsh-next-prompt。
适用场景与注意¶
适合:长对话、探索式提问、希望减少「空白输入框发呆」时间的 DSH Web GUI 用户;需要 Host 能调用 LLM(或接受启发式 fallback)的环境。
限制(README 已说明):
- 幽灵层是 overlay,不是 Lexical 编辑器内容:未接受前不进 undo、不算草稿。
- 应用重启后不保留建议缓存,需等新的一轮回答后再出现。
- 依赖标准 composer DOM;主题或其它插件改掉输入区结构时,可能静默不显示。
- 仅展示第一个建议;其余通过
/next-prompt/suggest获取。
安全与信任:插件在 DSH Host 进程权限下运行,会向配置的模型发送最近一问一答以生成建议。安装前请阅读 源码与 MIT 许可证,确认符合你的数据与密钥策略。
开发侧自测(无需 npm install,Node 20+):
node test/run.mjs
结尾¶
dsh-next-prompt 把「下一句问什么」做成可选的一键草稿:Host 生成、浏览器展示、Tab 采纳,且不自动改对话。若你在用 DSH desktop profile 做模型推理相关的工作流,可以从目录页或 GitHub 安装试用。