前言¶
在 DeepSeek Harness(DSH)的 composer 中输入消息后,如果需要修改或调整之前的表述,目前只能手动删除重写。对于多轮对话场景,这种重复操作会降低开发效率。下面介绍一个插件,可以在输入框中按方向键回溯已发送的消息,并回填为草稿。
这是什么¶
dsh-plugin-composer-history 是一个客户端插件,由 Dogtiti 维护。它为 DSH composer 提供类似 Shell 命令行的历史记录功能:按下 ↑ 向前回溯已发送的消息,按下 ↓ 返回到当前草稿。
插件通过拦截输入框的按键事件,结合会话日志中的消息记录,实现消息的回填与恢复。历史消息来自会话日志中 role: user 且 source.kind === 'user' 的文本,运行时上下文、技能目录等非用户输入会被过滤。
核心功能¶
按下 ↑ / ↓ 方向键,可以逐条回溯本会话已发送的消息:
- 输入框为空时,按
↑从最近一条开始向前回溯 - 回溯时右下角显示当前位置(如
3/19,表示当前第 3 条,共 19 条) - 按下
↓向前返回,越过最新一条后恢复回溯前的草稿 - 手动编辑输入框内容后,会自动退出回溯状态
安装与启用¶
市场索引
https://raw.githubusercontent.com/Dogtiti/dsh-plugin-composer-predict/main/market-index.json
设置 → 插件 → 启用实验性市场 bundle → Discover → 添加上面的地址 → 安装 dsh-plugin-composer-history。
npm
npm i dsh-plugin-composer-history
在 Plugins 页用「添加」填写包名。
本地目录
git clone https://github.com/Dogtiti/dsh-plugin-composer-history
Plugins → 添加 → 选择该目录。
典型用法¶
- 在输入框中发送一条消息,例如「写一个 Python 脚本」。
- 发送第二条消息,例如「再加一个日志功能」。
- 输入框清空后,按
↑回溯到第二条消息「再加一个日志功能」。 - 继续按
↑回溯到第一条消息「写一个 Python 脚本」。 - 按
↓返回到第二条消息,继续编辑或删除部分内容。 - 手动输入新内容后,退出回溯状态。
配置¶
插件支持以下配置项(YAML 格式):
- insert:
- id: composer-history
name: 'dsh-plugin-composer-history'
config:
limit: 50
| 键 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
总开关;关闭后路由返回 503,客户端不接管按键 |
limit |
200 |
保留的历史条数(取最近) |
maxChars |
2000 |
单条消息最大字符数(保留头尾) |
cacheTtlMs |
30000 |
相同会话事件序号下的缓存时间 |
行为说明¶
| 按键 | 行为 |
|---|---|
↑ |
输入框为空时开始回溯,从最近一条向前;到达最旧一条后停止 |
↓ |
向前返回;越过最新一条时恢复原草稿 |
不接管的情况:
| 条件 | 行为 |
|---|---|
| 输入框已有内容或附件 | ↑ 保留给编辑器的光标与选区移动 |
| 焦点不在该输入框 | 不处理 |
| 带 Alt / Ctrl / Cmd / Shift | 不处理 |
/ 或 @ 菜单已认领输入 |
方向键归菜单 |
实现原理¶
浏览器端通过 conversation.composer.dock 拦截阶段捕获 ↑ / ↓ 按键,维护一个索引状态机(index = -1 表示未回溯),调用 inputActions.setDraft(items[index]) 回填消息。Host 侧通过 POST /api/composer.history 接口,从会话日志中提取用户输入消息,按来源过滤后缓存 30 秒。
历史消息过滤规则:
- 计入历史:{ "kind": "user" }
- 排除:runtime-context、skill-catalog、time-context、user-approval
相邻重复消息会合并为一条。
兼容性¶
- DSH
^0.2.1-0(engines.dsh)。 - 依赖公开的
inputActions.setDraft()。
相关插件¶
| 插件 | 说明 |
|---|---|
| dsh-plugin-composer-predict | 预测下一条指令并显示为占位文字,Tab 采纳 |
| dsh-plugin-composer-history | 输入框中按 ↑ / ↓ 回填历史消息 |
| dsh-plugin-subagent-bridge | 让 Codex 通过本机 MCP 把 DSH 当 subagent 用 |
| dsh-plugin-usage-panel | 在模型选择器旁显示供应商套餐额度余量 |
适用场景与注意¶
该插件适合需要频繁调整多轮对话输入的开发者。使用前请确认 DSH 版本不低于 ^0.2.1-0,并检查插件源码与许可证。插件以当前 dsh 进程权限运行,请从可信来源安装。