← 返回列表
未验证
仿 Codex 的 DSH Web GUI 输入历史插件:在会话输入框按 ↑/↓ 浏览历史…
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/10 · 已提供中文文档
仿 Codex 的 DSH Web GUI 输入历史插件:会话输入框按 ↑/↓ 浏览历史 prompt,Esc清除当前对话框并进入历史,跨会话、跨重启持久保留,仅存纯文本,安全接管不误伤草稿。 A Codex-style input-history plugin for the DSH Web GUI: recall previous prompts with ↑/↓ in the composer, persisted across conversations and restarts, text-only storage with safe key routing.
综合分
29.7
GitHub 分
29.7
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add liguanyu/dsh_PromptRecall该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/20(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh_PromptRecall 仿 Codex 的 DSH Web GUI 输入历史插件:在会话输入框按 ↑/↓ 浏览历史 prompt,历史跨会话、跨重启持久保留。 一个仿 Codex 风格的 DSH Web GUI 输入历史插件:在会话输入框中用 ↑/↓ 浏览之前的 prompt,历史跨对话、跨重启持久保留。 特性 / Features - ↑ 召回历史,↓ 向新移动:空输入框按 ↑ 从最新条目开始逆序浏览,↓ 向新移动,越过最新项后清空输入框并退出浏览。 - 当前对话优先:回到一个对话时,先召回该对话自己的历史,继续按 ↑ 才进入其他对话的历史。 - 跨会话、跨重启持久:用户级 JSONL 全局历史,稳定单调 ID,刷新页面或重启后仍可召回。 - 安全的按键路由:非空草稿、多行正文中间、有选区、弹窗打开时,方向键一律交还编辑器,绝不误伤草稿。 - 浏览时不弹触发菜单:历史浏览期间主动收起 / 命令、skill、@ 引用候选面板,面板不会抢走 ↑/↓;一旦编辑草稿,浏览让位、面板立即恢复正常。 - Esc 草稿保险:清空未发送的非空草稿时把它存入历史(仅文本),按 ↑ 可找回。 - 位置指示:输入框上方 pill 显示当前位置(如 ↑ 2/38);pill 上的 × 两次点击可清空全部历史。 - 仅存文本 + 自动裁剪:只持久化纯文本;相邻完全相同的条目折叠;文件超限时删除最旧整行并保留最新。 - ↑ 召回,↓ 向前移动:空输入框从最新条目开始浏览;↓ 向更新的条目移动,越过最新一条后清空输入框并退出浏览。 - 当前对话优先:回到一个对话时,先召回该对话自己的历史;继续按 ↑ 会走入其他对话的历史。 - 跨对话、跨重启持久:用户级 JSONL 历史,带有稳定单调 ID,在页面刷新和重启后仍可召回。 - 安全的按键路由:当草稿非空、光标位于多行文本中间、存在活动选区或弹窗打开时,方向键会交还给编辑器,绝不会覆盖草稿。 - 浏览时不弹触发菜单:历史浏览期间会主动收起 / 命令、skill 和 @ 引用候选菜单,使它们无法捕获 ↑/↓;编辑草稿会结束浏览并立即恢复它们。 - Esc 草稿保险:清空未发送的非空草稿时,会将其存入历史(仅文本),以便按 ↑ 找回。 - 位置指示:输入框上方有一个 pill 显示当前位置(例如 ↑ 2/38);点击其 × 两次可清空全部历史。 - 仅文本存储并自动裁剪:只持久化纯文本;相邻完全相同的条目会被折叠;文件过大时会删除最旧的完整记录并保留最新的记录。 设计 / Design 历史分两层:持久层(跨会话 JSONL 文件,只存文本)与局部层(当前会话的召回列表,含 Esc 暂存草稿)。 进入或切回一个会话时冻结快照:快照只含其他会话的记录,本会话的记录播种进局部层,因此统一索引的顺序是 [其他会话记录 | 本会话记录]。 示例:会话 A 依次输入 a、b、c,切到会话 B 输入 e、f,再切回 A 后按 ↑ 的顺序是 c → b → a → f → e(当前对话优先,全局兜底)。 每条记录带稳定单调 ID,裁剪只删最旧整行、不重编号;本会话新提交只出现在局部层,因此每条恰好出现一次;局部层相邻且完全相同的条目(文本+会话+附件签名)折叠,持久层保留重复记录。 历史有两层:持久层(跨对话的 JSONL 文件,仅文本)和局部层(当前对话的召回列表,包括 Esc 暂存的草稿)。 进入或返回一个对话时会冻结一个快照:快照只保留其他对话的记录,而该对话的记录会被播种到局部层中——统一索引顺序为 [其他对话 | 本对话]。 示例:会话 A 提交了 a、b、c;会话 B 提交了 e、f;回到 A 后,↑ 召回 c → b → a → f → e(当前会话优先,全局历史作为回退)。 每条记录都带有一个稳定的单调 ID;裁剪只删除最旧的完整记录,绝不重新编号。当前会话中的新提交只出现在本地层,因此每个条目都恰好出现一次。本地层中相邻的相同条目(文本 + 会话 + 附件签名)会被折叠,而持久层则保留重复项。 键位与交互逻辑 / Keybindings & interaction logic | 按键 | 行为 | |---|---| | ↑(空草稿) | 进入历史浏览,从最新条目开始 | | ↑ / ↓(浏览中) | 向旧 / 向新移动;最旧处不回绕 | | ↓(最新项再按) | 清空输入框并退出浏览 | | ↑/↓(非空草稿、正文中间、有选区、弹窗打开) | 交还编辑器,只移动光标/候选 | | ↑/↓(浏览中,召回文本以 /、@ 开头) | 触发菜单被抑制:继续回溯历史,不弹候选面板 | | Esc(非空草稿) | 清空草稿并存入历史(↑ 可找回);刚召回的条目已在历史里,不再重复记录 | | Esc(浏览中) | 退出浏览;草稿为空时不做任何事 | 鼠标操作(非键盘)/ Mouse actions (not keyboard): | 操作 | 行为 | |---|---| | 点击 pill 上的 × 两次(3 秒内) | 第一次点击变“确认?”,第二次清空全部历史(含持久文件) | 接管判定:按键目标必须是会话输入框;只有“语义空”草稿(文本、附件、mention 全空)按 ↑ 才进入浏览;浏览中一旦用户改动文本或附件,立即退出接管并作废在途请求;弹窗或命令菜单消费过的按键自动让位。优先级上历史浏览高于触发菜单:浏览期间 / 命令、skill、@ 引用菜单被主动收起(避免刚召回的 /...、@... 弹面板抢走 ↑/↓),用户一编辑草稿即解除抑制、菜单恢复原有行为。 | 按键 | 行为 | |---|---| | ↑(空草稿) | 从最新条目开始浏览历史 | | ↑ / ↓(浏览中) | 向旧 / 向新移动;最旧处不回绕 | | ↓(越过最新项) | 清空输入框并退出浏览 | | ↑/↓(非空草稿、正文中间、有选区、弹窗打开) | 交还编辑器:只移动光标 / 候选 | | ↑/↓(浏览中,召回文本以 / 或 @ 开头) | 触发菜单被抑制:方向键继续用于历史,不弹出候选面板 | | Esc(非空草稿) | 清空草稿并存入历史(可用 ↑ 找回);刚召回的条目已在历史里,不会重复记录 | | Esc(浏览中) | 退出浏览;草稿为空时不执行任何操作 | | 操作 | 行为 | |---|---| | 点击 pill 上的 × 两次(3 秒内) | 第一次点击进入“确认?”状态,第二次清空全部历史(包括持久文件) | 接管规则:按键目标必须是会话输入框;只有在语义空草稿(无文本、附件或 mention)上按 ↑ 才开始浏览;浏览期间用户对文本或附件的任何编辑都会立即解除接管并使在途请求失效;已被弹窗或命令菜单消费的按键始终不受干预。在优先级上,历史浏览优先于触发菜单:浏览期间,/ 命令、skill 和 @ 引用菜单会被主动收起(这样召回的 /... 或 @... 就不会弹出面板并抢走 ↑/↓),而编辑草稿会解除该抑制并恢复正常菜单行为。 数据与隐私 / Data & privacy 历史写入 DSH 主目录下的 prompt-history.jsonl(即 $DSH_HOME/prompt-history.jsonl;未设置 DSH_HOME 时默认 ~/.dsh/prompt-history.jsonl),每行一条 JSON 记录;只保存纯文本,不保存图片、mention 绑定或其他附件内容。 容量限制:持久文件约 10 MB(超限删除最旧整行,永远保留最新一条);当前会话的局部召回列表上限 200 条 / 256 KB(从最旧淘汰)。pill 上的 × 可随时清空全部历史。 历史写入 DSH 主目录下的 prompt-history.jsonl(即 $DSH_HOME/prompt-history.jsonl;未设置 DSH_HOME 时默认 ~/.dsh/prompt-history.jsonl),每行一条 JSON 记录;只保存纯文本,不保存图片、mention 绑定或其他附件内容。 容量限制:持久文件约 10 MB(超限删除最旧整行,永远保留最新一条);当前会话的局部召回列表上限 200 条 / 256 KB(从最旧淘汰)。pill 上的 × 可随时清空全部历史。 安装 / Installation 前置条件:已安装 pnpm 的 DSH 环境(dsh plugin 内部转发给 pnpm)。 从 GitHub 安装: dsh plugin --profile web add github:liguanyu/dsh_PromptRecall 本地安装: 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_HOME/prompt-history.jsonl(默认 ~/.dsh/prompt-history.jsonl);目录不存在时会在首次写入时自动创建,无需手动准备。 前置条件:已安装 pnpm 的 DSH 环境(dsh plugin 内部转发给 pnpm)。 从 GitHub 安装: dsh plugin --profile web add github:liguanyu/dsh_PromptRecall 本地安装: 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_HOME/prompt-history.jsonl(默认 ~/.dsh/prompt-history.jsonl);目录不存在时会在首次写入时自动创建,无需手动准备。 开发 / Development 目录结构 / Layout: - lib/index.js — Host 半:promptRecall Remote 服务(JSONL 存储 + inbox 提交捕获) - lib/store-core.js — 纯存储核心(两层历史/折叠/裁剪,零依赖可单测) - lib/typert.host.js — 手写的 typert 宿主面(网关校验与派发) - lib/client.js — Client 半:按键路由、历史状态机、位置 pill - cordis.patch.yml — bundle patch:把插件行插入 web 组合 - test/store-core.test.mjs — 存储核心单测(node --test) - lib/index.js — 宿主端:promptRecall Remote 服务(JSONL 存储 + 收件箱提交捕获) - lib/store-core.js — 纯存储核心(双层历史 / 折叠 / 裁剪,无依赖且可单元测试) - lib/typert.host.js — 手写的 typert 宿主接口(网关校验与分发) - lib/client.js — 客户端:按键路由、历史状态机、位置胶囊 - cordis.patch.yml — 打包补丁:将插件行插入 web 组合 - test/store-core.test.mjs — 存储核心单元测试(node --test) 运行测试 / Run tests: node --test
扫码进群