dsh-tab-complete:DSH 输入框 Tab 补全与幽灵文本预测

前言

在 DeepSeek Harness 里和智能体对话,输入框往往要反复写追问、改需求、贴路径。IDE 里常见的「边打边猜下一句」在 Harness 里默认没有。Codex Pro 一类产品会把「下一步输入预测」做成灰色幽灵文本,按 Tab 填入;dsh-tab-complete 把同一套交互搬到 DSH,预测走你自己的模型路由,不占用订阅额度。

下面介绍插件定位、触发规则、安装配置与使用时的注意点。事实以 GitHub 仓库 README 为准;社区目录页见 SkillHub。

这是什么

dsh-tab-complete 由维护者 dingchenhui0618-arch 发布,分类为 客户端 插件(当前 GitHub 星标为 0)。它用当前对话和你已输入的草稿,预测你接下来要输入的内容:灰色幽灵文本贴在光标后,按 Tab 一键填入,按 Esc 忽略。

插件是标准 DSH bundle:宿主半边注册 HTTP 路由,客户端半边挂在 conversation.input.overlay 插槽上。版本 0.2.0,许可证 MIT。

核心功能

何时给出建议

时机 行为
在输入框里打字 停手约 0.28 秒后,尝试把这句话补完
刚发完消息、输入框为空 基于对话预测你的下一句(用户口吻,不是助手口吻)
候选是助手刚说过话的复述 直接丢弃,不显示
使用输入法(IME)拼字 不预测,避免与候选栏冲突
输入框以 / 开头 不预测(命令面板)

补全目标是整句而非半句:一次 Tab 即可发出或继续编辑。对话中的文件、函数、版本号会被沿用;提示词会抑制模型编造不存在的路径(如 src/plugins、index.ts)。送给模型的内容仅包含「你和助手说过的话」——技能目录、运行时上下文等框架注入会被 isScaffolding() 过滤,避免挤占上下文导致预测失真。

交互与实现要点

  • 流式生成:首个 token 到达即绘制幽灵文本,随后逐字增长,而不是等整句结束再显示。
  • 按 Tab 后幽灵文本变为真实草稿,光标在末尾,可继续修改。
  • Tab 在捕获阶段拦截,避免触发编辑器缩进;落字通过 inputActions.insertText,带 draftRev 的 CAS,继续打字会使进行中的补全作废。
  • 客户端为 0 高度覆盖层,按测量光标定位,字体与行高与编辑器一致。

成本与隐私(README 说明)

  • 每次预测为独立小模型调用(默认 maxTokens: 96),不写进会话记录,也不消耗 Harness 主上下文。
  • 仅接受 loopback 请求;请求体上限 64 KB。
  • 相同「会话 + 草稿」结果缓存 2 分钟;无结果缓存 20 秒。
  • 同一会话同时只保留一个在飞请求,新请求会中断旧的。

安装与启用

在 profile 目录(~/.dsh/profiles/<profile>/)中配置依赖与 bundle,例如:

// package.json
{
  "dependencies": {
    "dsh-tab-complete": "link:D:/Projects/dsh-tab-complete"  // 或 npm 版本号
  },
  "dsh": {
    "profile": {
      "bundles": ["...", "dsh-tab-complete"]
    }
  }
}

然后在对应 profile 下安装依赖并重启 Harness(README 示例为 desktop profile):

cd $env:USERPROFILE\.dsh\profiles\desktop
pnpm install

重启后输入框具备补全能力;已在跑的会话记录落盘,不会因此丢失。安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行。

配置

宿主侧配置写在 bundle 的 cordis.patch.yml 对应条目下,均可省略:

- id: dsh-tab-complete
  config:
    enabled: true
    debounceMs: 280        # 停手多久后请求
    maxTokens: 96          # 生成上限(整句比半句要更多 token)
    maxCompletionChars: 180
    contextMessages: 6     # 送给模型的历史消息条数
    contextChars: 2200
    minDraftChars: 0       # 空输入框也预测,设成 2 就要求先打两个字
    provider: ""           # 留空则用当前会话的默认模型路由
    model: ""

若主会话模型较慢,可为补全单独指定更快模型(不影响主会话),例如:

- id: dsh-tab-complete
  config:
    provider: chenyuzhiyun
    model: glm-5.3-flash

运行时可查询状态或临时开关(内存态,重启复位),需浏览器同款 cookie:

curl.exe http://127.0.0.1:3080/dsh-tab-complete/state
curl.exe -X POST http://127.0.0.1:3080/dsh-tab-complete/enabled -d '{\"enabled\":false}'
curl.exe "http://127.0.0.1:3080/dsh-tab-complete/transcript?sessionId=<id>"
curl.exe "http://127.0.0.1:3080/dsh-tab-complete/prompt?sessionId=<id>&draft=<草稿>"

一次建议的等待时间约为默认静默 280ms 加上模型首 token 延迟;同一「会话 + 草稿」缓存命中时延迟为 0,GET /dsh-tab-complete/state 中的 lastMs 为上一次真实耗时。

典型用法

  1. 在 Harness 对话输入框中正常打字,停手约 0.28 秒后观察光标后的灰色幽灵文本。
  2. 若建议合适,按 Tab 接受;不合适按 Esc 忽略。
  3. 发送一条消息后,在空输入框等待,可得到基于上下文的「下一句用户消息」预测(同样 Tab / Esc)。
  4. 需要排查模型实际看到的内容时,用上述 transcript 与 prompt 接口对照 sessionId 与草稿。

适用场景与注意

适合:长期在 DSH 里写多轮追问、重复性指令或带路径/版本号的说明,希望减少「想下一句怎么写」的停顿,且愿意用自有模型路由承担小额补全调用。

注意:

  • 依赖编辑器的 data-composer-card / data-composer-input 标记;Harness 大改输入框结构时插件可能需要跟进。
  • 幽灵文本定位按「光标在草稿末尾」优化;多行草稿且光标在中间时,补全仍贴在最后一行末尾。
  • 模型偶发不相关建议,用 Esc 忽略即可;预测本身是有损的。
  • DSH 生态强调「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-tab-complete 把「灰色幽灵文本 + Tab 填入」的输入预测接到 DeepSeek Harness,预测与主对话分离、可配独立模型,适合愿意在自有路由上换一点延迟与调用成本的用户。详情与截图见 GitHub README;安装与 bundle 列表以 profile 内 package.json 与 pnpm install 流程为准。

  • 目录页:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-tab-complete
  • GitHub:https://github.com/dingchenhui0618-arch/dsh-tab-complete
羽毛球分组比赛记分
小程序二维码

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

小夜