前言¶
在 DSH 里和智能体多轮对话时,下一句提示往往要对照上一轮结果再想一遍:补约束、改方向、或接着拆任务。Composer 本身是空白的,没有「根据上下文猜你接下来会说什么」这一层。Claude Code 一类产品会在输入框里用灰色 ghost text 给出预测,Tab 采纳即可继续改。dsh-prompt-suggestion 把同类能力接到 DSH Composer:每轮任务结束后,在输入框为空时显示模型预测的下一句用户提示,并附带历史前缀补全与独立设置页。下面按安装、操作和实现要点说明。
这是什么¶
dsh-prompt-suggestion 是社区维护的 DSH bundle,仓库为 GoldenLoaf24h/dsh-prompt-suggestion,在 SkillHub 目录中归类为「模型推理」。插件在每轮对话结束、输入框为空、没有命令 chip、且会话不在运行时,调用辅助模型生成「下一步用户提示」,以灰色 ghost text 显示在输入框内;另有基于本会话已发提示的历史前缀补全,与预测互不挡路。纯 JavaScript,无构建步骤,零第三方运行时依赖;package.json 版本为 0.1.0,许可证 MIT,要求 Node >=22.0.0。
核心功能¶
下一步预测与采纳¶
预测以灰字挂在 Composer 末段,可用下表中的快捷键操作(与 README 行为表一致):
| 操作 | 结果 |
|---|---|
Tab |
把整条预测填入输入框(可继续编辑,不发送) |
Alt + → |
按词逐步填入预测,剩下的仍显示为灰字 |
Enter |
把预测填入并立即发送(可在设置里关掉) |
Esc |
忽略本次预测,并标记该轮不再提示 |
| 直接打字 | 预测自动消失;擦回原样后又会出现 |
Alt + R |
换一条预测(旧的那条作为「不要重复」传给模型) |
↑ |
空输入框时填入本会话上一条已发送的提示(清空后灰字会回来) |
Tab 采纳只影响当前这一屏,刷新页面仍会看到同一条缓存预测;只有 Esc 会把该轮标记为「不再提示」并落盘。
历史前缀补全¶
输入几个字后,若本会话发过以它开头的提示,剩余部分会以灰字补出,同样可用 Tab 采纳。预测与补全互不干扰:预测不再匹配当前输入时会自动让位给补全。
出现条件与缓存¶
预测只在一轮任务结束、输入框为空、没有命令 chip、且会话不在运行时出现。同一轮重复请求命中磁盘缓存,不会重复调用模型;打开会话只读缓存、零模型调用,缓存缺失(会话早于插件安装,或条目过期)才补一次真实调用。若补调用失败,一分钟后再自动重试一次。失败(超时、模型空返回)只在内存里压一分钟、不写盘,重启即重试。
设置页¶
在「插件 → 提示预测」可改下列项,全部持久化到 ~/.dsh/plugin-data/dsh-prompt-suggestion/settings.json:
- 启用下一步预测 — 总开关
- 模型服务商 / 模型 — 留空则跟随当前会话实际使用的 route;选了服务商后模型为下拉,选项来自该 adapter 目录
- 思考强度 —
自动(最省)或显式off/low/high/max - Alt + → 逐词采纳 / Enter 采纳并发送 / 历史前缀补全 / ↑ 回填上一条 — 四个独立开关
- 生成参数 — 预测最长字数、超时、输出上限、携带最近消息条数、上下文字符上限
- 上下文脱敏 — 发模型前抹掉密钥、令牌、密码等敏感串
- 最近预测 — 最近若干条的原文、耗时、所用模型
bundle 级 cordis.patch.yml 还可配置:
- id: prompt-suggestion
name: dsh-prompt-suggestion
config:
enabled: true # 与设置页里的开关等价,设置页优先
安装与启用¶
本目录是标准 DSH bundle(dsh.bundle.patch 指向 cordis.patch.yml)。官方 README 给出三种方式:
- 桌面端插件面板(
desktopprofile,Electron 独占):插件 → 添加插件 → 填本目录绝对路径,或github:GoldenLoaf24h/dsh-prompt-suggestion - CLI(非 desktop profile):
dsh plugin --profile <profile> add github:GoldenLoaf24h/dsh-prompt-suggestion
- Agent 会话内:
plugin_manager({action:'install_bundle', target:'github:GoldenLoaf24h/dsh-prompt-suggestion'})
装完后 package.json 的 dsh.profile.bundles 会自动登记。改 lib/index.js 需在插件面板关掉再打开(host 半不热更新);改 lib/client.js 刷新页面即可。
典型用法¶
- 安装并启用插件,在设置页确认「启用下一步预测」为开(或与 bundle
config.enabled一致)。 - 在 DSH 里正常完成一轮对话,等任务结束且输入框为空;若条件满足,应看到灰色预测文案。
- 需要整句草稿时按
Tab填入后再改;需要边想边填时按Alt+→逐词采纳。 - 预测不合适时按
Alt+R换一条,或Esc忽略并禁止该轮再提示。 - 若你常重复类似开头,直接输入前缀,观察历史补全灰字,用
Tab采纳。
适用场景与注意¶
适合在 DSH 里长时间多轮编码、排障或写提示的用户:减少「盯着空白框想下一句」的停顿,同时保留编辑后再发送的控制权。辅助调用会读取会话 transcript(经条数与字符双预算裁剪),并可在设置里开启上下文脱敏;仍应假设插件以当前 DSH 进程权限运行,安装前请自行审阅 仓库源码 与 MIT 许可证。自定义 HTTP 路由不经过宿主 cookie 鉴权,实现上带有 Origin / Sec-Fetch-Site 同源校验。
实现上 host 在 lib/index.js 提供 /suggest、/session、/dismiss、/catalog、/settings 等路由,通过 ctx.llm.prepareCall 与 call.stream 发辅助调用;client 在 lib/client.js 注册 conversation.input.overlay 与 plugins.bundle.config 槽位,灰字通过编辑器上的 CSS 自定义属性 --dsh-ps-ghost 传入,以适配 Lexical 重建段落时的 DOM 行为。
结尾¶
dsh-prompt-suggestion 把「下一轮用户提示」做成 Composer 内的 ghost text 与可配置快捷键,并区分磁盘缓存、内存失败重试与 Esc 落盘忽略。目录介绍见 SkillHub 插件页,源码与完整行为说明见 GitHub 仓库。