前言¶
在 DSH Web GUI 里调试智能体,prompt 很少一次写对。想找回几轮之前输入过的一段提示词,只能向上翻聊天记录、手动复制再粘贴;切换会话或重启之后,连可翻的地方都没有。终端里有 history,Web 输入框此前没有对应物。
dsh_PromptRecall 解决的就是这个问题:仿照 Codex 的交互,在会话输入框按 ↑/↓ 浏览历史 prompt,且历史跨会话、跨重启持久保留。
DSH 的理念是「一切皆插件」,输入历史这类交互增强同样以插件形式接入。下面按功能、存储设计、安装步骤依次介绍。
这是什么¶
dsh_PromptRecall 是一个仿 Codex 的 DSH Web GUI 输入历史插件,由 liguanyu 维护,许可证为 MIT,package.json 标注版本 1.0.0。需要说明的是,仓库与 README 中的名称写作 dsh_PromptRecall,而 package.json 中的包名是 dsh-prompt-recall,两种写法指向同一个项目,核对来源时以 GitHub 仓库为准。
它解决的问题很具体:让会话输入框获得类似终端 history 的能力,并且历史在页面刷新、进程重启之后仍然可以召回。
键位与交互¶
安装后无需额外配置,常用按键如下:
| 按键 | 行为 |
|---|---|
↑(空草稿) |
进入历史浏览,从最新条目开始 |
↑ / ↓(浏览中) |
向旧 / 向新移动;最旧处不回绕 |
↓(最新项再按) |
清空输入框并退出浏览 |
↑ / ↓(非空草稿、正文中间、有选区、弹窗打开) |
交还编辑器,只移动光标或候选 |
Esc(非空草稿) |
清空草稿并存入历史,按 ↑ 可找回 |
Esc(浏览中) |
退出浏览;草稿为空时不做任何事 |
这里的「空草稿」指语义空:文本、附件、mention 全空才算空,此时按 ↑ 才会进入浏览。
按键接管有明确的边界:只要草稿非空、光标停在多行正文中间、存在选区,或弹窗处于打开状态,方向键一律交还编辑器,绝不误伤你正在写的草稿。
Esc 草稿保险值得单独一提:写了一大段草稿又决定清空重来时,Esc 会把这段文本存入历史(仅文本),之后按 ↑ 就能找回。
浏览历史时,输入框上方会出现一个位置 pill,显示当前所处位置,例如 ↑ 2/38。
当前对话优先¶
历史不是简单的全局时间线。回到某个对话时,插件先召回该对话自己的历史;继续按 ↑,才进入其他对话的历史。
README 给了一个可复现的顺序示例:会话 A 依次输入 a、b、c,切到会话 B 输入 e、f,再切回 A 后按 ↑ 的顺序是 c → b → a → f → e。也就是当前对话优先,全局历史兜底。
两层历史设计¶
历史分为两层:
1、持久层:跨会话的 JSONL 文件,只存文本;
2、局部层:当前会话的召回列表,包含 Esc 暂存的草稿。
每条记录带稳定单调 ID,裁剪只删最旧整行、不重编号。局部层相邻且完全相同的条目会折叠为一条,持久层则保留重复记录。
数据存储与容量¶
历史写入 DSH 主目录下的 prompt-history.jsonl(未设置 DSH_HOME 时默认 ~/.dsh/prompt-history.jsonl),每行一条 JSON 记录。只保存纯文本,不保存图片、mention 绑定或其他附件内容。历史目录不存在时会在首次写入时自动创建,无需手动准备。
容量限制:
- 持久文件约 10 MB,超限时删除最旧整行,永远保留最新一条;
- 当前会话的局部召回列表上限 200 条 / 256 KB,从最旧淘汰。
想清空全部历史,点击位置 pill 上的 × 两次(3 秒内):第一次点击按钮变为「确认?」,第二次执行清空,包括持久文件。
安装与启用¶
前置条件:一个已安装 pnpm 的 DSH 环境,dsh plugin 内部会把安装动作转发给 pnpm。
从 GitHub 安装,执行:
dsh plugin --profile web add github:liguanyu/dsh_PromptRecall
这条命令会把插件装入 web profile。如果想改源码,走本地安装:
git clone https://github.com/liguanyu/dsh_PromptRecall
cd dsh_PromptRecall
pnpm install # link 安装沿仓库真实路径解析依赖,需先在仓库内安装
dsh plugin --profile web add .
本地安装使用 pnpm 的 link: 协议,改代码后重启即生效、无需重装;由于 Node 会解析链接的真实路径,要先在仓库内执行一次 pnpm install,让运行时依赖就位。github: 安装不需要这一步,依赖随包一起装入 profile 树。
经过上面的步骤,重启 DSH Web 即可生效:
dsh web
插件会成为 web 组合中的一行,随启动自动加载,无需任何手动 define/run 步骤。
适用场景与注意事项¶
适合的场景:
- 经常在 DSH Web 里迭代长 prompt,需要找回几轮之前的版本;
- 多会话并行工作,希望每个对话优先召回自己的历史;
- 习惯写完又清掉重写,需要 Esc 草稿保险兜底。
几点注意:
1、插件以当前 dsh 进程的权限运行,能读写 DSH 主目录下的历史文件。安装前建议先查看源码与许可证(本项目为 MIT),确认无误再装。
2、历史只存纯文本,但已发送和 Esc 暂存的内容都会落盘;如果 prompt 中包含敏感信息,可随时用 pill 上的 × 清空。
3、历史跨会话共享,其他会话按 ↑ 也能走到当前会话的记录,介意这一点的话需要自行清空历史。
小结¶
dsh_PromptRecall 把终端 history 的使用习惯带到了 DSH Web:一个 ↑ 就能找回上一条 prompt,历史跨会话、跨重启都在,且按键路由和裁剪策略都做了明确边界。如果你日常在 Web GUI 里调 prompt,值得装一份试用。
- GitHub:https://github.com/liguanyu/dsh_PromptRecall
- 目录页:https://www.skillhub.cn/plugins/liguanyu/dsh_PromptRecall
需要说明的是,上述目录页为社区站点,与 DeepSeek、幻方无官方从属关系。