HwFee/HwFee-dsh

predict

下一句:每轮回答后预测你的下一条输入,以浅灰 ghost 文本显示在输入框。按 Tab 填入但不发送,预测模型可选。

UI 개선deepseek-harnessdshdsh-market

dsh-predict · 下一句

在每轮回答结束后,根据当前对话预测你下一句想说什么,用浅灰文字提示在输入框里。按 Tab 填入输入框但不发送,你审完再按 Enter。

安装

dsh plugin --profile desktop add @hwfee/dsh-predict

装完必须彻底退出并重开 DSH。 客户端 bundle 在页面启动时加载,只刷新页面不够,而且重建产物后再刷新会因 rev 不匹配让整页 boot 失败。

卸载:

dsh plugin --profile desktop remove @hwfee/dsh-predict

设置

设置 → 通用设置,多出一行 下一句:

  • 开关:关掉后宿主不再发起预测请求。
  • 预测模型:默认 跟随当前模型;也可以从宿主的模型目录里固定一个模型。固定值存的是 provider/model,模型下线时会原样显示而不是被悄悄改掉。

行为

时机 · 行为 新会话第一轮 · 不预测(还没有可参考的对话) 第二轮起,每轮回答结束 · 预测一次,结果只画在空输入框里 打字 / 按 Esc · 预测消失;下一次回合结束再出现 按 Tab · 填进输入框,不发送 空输入框里的宿主占位符 · 有预测时让位给预测文字,预测消失后恢复 连续失败 3 次 · 冷却 10 轮,避免对着坏路由反复请求 单次预测超过 20 秒 · 放弃这一次,不影响对话

预测是旁路:它不写会话日志、不占回合、失败也不会在对话里留下错误消息。宿主只在页面通过 predictSettings/* 请求时才把结果交出去。

它怎么工作

两半:

  • Host(lib/):监听会话的 session/event,在 turn/end 后取最近几轮对话,走 ctx.llm 用与当前回合相同的 provider/凭据发一次短请求。
  • Client(client/client.js):在页面里监听当前会话的事件流,收到 turn/end 后向宿主要这次的结果,画成输入框上的叠层。

模型调用走宿主自己的 LLM 服务,所以供应商切换、凭据、重试和计费与正常回合一致,插件不自己拼 HTTP。

数据去了哪里(请按功能数据流理解)。 每次预测都会把最近几轮对话的片段(含你的输入和模型回复的文本)作为提示词,发给你在 DSH 里配置的那个 provider 和模型——和正常回合走同一条通道、同一份凭据、同一家供应商。插件本身不建任何自己的网络连接,不向第三方上报,也不写额外日志;但「本地计算」这个说法不适用于本插件:预测必然要请求一次模型,否则它无法产生结果。不希望对话片段离开本机,就只能关掉这一行设置。

预测请求关闭推理(reasoningEffort: 'off',DeepSeek 侧即 thinking: { type: 'disabled' }):预测只要一行字,思考纯属浪费,而且思考块一旦漏出来就会出现在输入框里。即使某条路由不认这个开关,流里的推理块也会被丢弃,正文里内联的 … 也会被剥掉——只有正文能变成 ghost 文字。预测不写会话日志,所以对话记录里不会多出一条消息或一个思考块。

已知边界

  • 预测会把对话片段发给你的 provider。 见上文「数据去了哪里」;这条不是边界细节,是使用前必须知道的事实。
  • 预测的上下文窗口有限(最近若干轮),不包含工具调用的完整结果。
  • 宿主自己的设置行、侧栏文字的字号写死在盐化 CSS Modules 里;能跟随「字号大小」的是插件注册的行和消费主题令牌的控件(见根目录 AGENTS.md 第十二节)。
  • 模型可能什么都不给(返回空或拒绝),这时这一轮就没有预测——这是正常结果,不是错误。

开发者

cd plugins/predict
npm test        # 新鲜度 + 清单契约 + 解析/退避/幽灵文字/宿主/客户端/选择器/请求/推理过滤,共 9 套
npm run build   # 重新生成 client/client.js(产物提交进 git)

目录职责、改包名的四个位置、发布流程见仓库根 AGENTS.md。