dsh-recent-prompts
Manifest validDeepSeek Harness plugin: browse, search, copy and hide the prompts you sent to the AI across all sessions.
dsh-recent-prompts
把你说给 AI 的话找回来:按会话浏览最近的对话、在全部历史里搜索、一键复制、把废话和不想再看的会话藏起来。
一个 DeepSeek Harness (DSH) Web 插件。 装上之后左侧栏底部多一个气泡图标,点开就是一整页「我最近对 AI 说的话」。
English · 更新日志 · MIT License
为什么做这个
和 AI 协作久了,最值钱的东西往往是你自己以前写过的那段话:一段约束、一份规格、一个反复用的提示词。 但它们散落在几百个会话里,翻起来很痛苦。这个插件只做三件事:
- 看:最近说过的话,一眼可见,全文而不是摘要;
- 搜:记得大概内容时,在全部会话里找回来;
- 留:用得上的复制走,废话和不想再看的会话标记为「不显示」,需要时再恢复。
功能
| 功能 | 说明 |
|---|---|
| 最近窗口 | 默认只加载最近 6 个会话、每个会话最近 6 轮,按会话分组、组内按时间正序显示你的原话全文 |
| 加载更早 | 每个会话组可继续往前翻,一次约 6 轮,直到该会话的第一条 |
| 搜索全部历史 | 输入即搜,覆盖所有会话的每一轮;命中按会话分组,显示 #轮次 + 开头片段 |
| 载入全文 | 命中行点「载入全文」时,才按「下一轮起点」精确锚定、只取那一轮,拿到完整原话 |
| 复制 | 复制整段原文到剪贴板(navigator.clipboard,失败回退到选区方案),成功有「已复制」反馈 |
| 隐藏消息 | 按轮隐藏:连列表里的开头预览一起消失 |
| 隐藏会话 | 整组隐藏,最近的列表和搜索结果都不再出现 |
| 已隐藏 / 恢复 | 独立的「已隐藏 N」页签名列会话与消息两类记录,可单条恢复、全部恢复;消息记录还能直接复制 |
| 包含已隐藏 | 搜索框右侧开关,默认关闭;打开后被隐藏的内容重新出现在搜索结果里并标注「已隐藏」,可就地恢复 |
| 只读 | 只调用 Session 的读取接口,不写入任何会话日志,不发网络请求 |
| 主题 / 语言 | 只用宿主主题 token(跟随明暗);中英文案随宿主语言切换 |
安装
要求:DSH 0.2.x(插件用到的接口:session.list / session.projections / session.page,均为只读)。
⚠️ 别直接填
hujiyo/dsh-recent-prompts。DSH 的安装框只接受下表左列的写法,裸的用户名/仓库名会被当成 npm 包名校验,报「not a package name the registry accepts」。
在 DSH 里安装
侧边栏 Plugins → 添加插件,安装源选「自定义地址」,把下表的字符串粘进输入框,点安装,然后刷新页面。
| 方式 | 填什么 |
|---|---|
| Release 压缩包(推荐给使用者) | https://github.com/hujiyo/dsh-recent-prompts/releases/download/v1.0.0/dsh-recent-prompts-1.0.0.tgz |
| GitHub 仓库(取 main 最新) | github:hujiyo/dsh-recent-prompts或 https://github.com/hujiyo/dsh-recent-prompts |
| 本地目录(开发者,改动即时生效) | D:\桌面\dsh-recent-prompts 这类绝对路径 |
| npm 包名(已发布 1.0.0) | dsh-recent-prompts |
区别:压缩包和 npm 一样是「安装一份副本」;github: / URL 由 pnpm 克隆仓库;本地路径以 link: 方式接入,改 client.js 刷新页面即生效。
装好后左侧栏底部(插件图标旁)会出现气泡图标「最近说过的话」。
命令行 / agent 安装
dsh plugin --profile web add https://github.com/hujiyo/dsh-recent-prompts/releases/download/v1.0.0/dsh-recent-prompts-1.0.0.tgz
然后在 $DSH_HOME/profiles/web/package.json 的 dsh.profile.bundles 数组末尾追加 "dsh-recent-prompts",再刷新页面。
(用 Plugins 界面或 agent 的 plugin_manager install_bundle 安装会自动完成这一步;命令行需要手动补。)
卸载
- 从
dsh.profile.bundles里删掉"dsh-recent-prompts"; dsh plugin --profile web remove dsh-recent-prompts。 或在 Plugins 界面上直接卸载。
工作原理
插件是纯客户端(浏览器)实现,Host 半边是空的。读取路径全部是 DSH 已有的只读 Remote 接口:
session.list() → 全部会话目录:标题、更新时间、每轮开头约 50 字的投影大纲
├─ 最近窗口:对最近 6 个会话
│ session.projections({sessionId}) → 精确日志切点 asOfSeq + 标题 + 大纲
│ session.page({throughSeq, turnWindow}) → 最近约 6 轮的事件
└─ 搜索:本地匹配大纲里每一轮的开头文本
命中后点「载入全文」
session.projections({sessionId}) → 切点
session.page({beforeSeq: 下一轮起点}) → 只取那一轮
再把事件流过滤成你本人打的字:
- 只认
user/message事件; - 且
data.source.kind === 'user',因此自动排除 agent 注入的上下文、goal 续轮、工具结果、命令回显; - 文本取自
content里的text块,图片/文件只留占位标记。
隐藏记录只写浏览器:
localStorage键dsh.recent-prompts.hidden.v1;- 结构:会话记录
{kind:'session', sessionId, sessionTitle, …}、消息记录{kind:'turn', sessionId, seq:<轮起点 seq>, body, …}; - 不写会话日志、不改 Harness 状态,所以随时可恢复,也不会影响别的客户端。
数据与隐私
- 所有读取都走本机 Harness 的 Remote 接口,插件本身不联网;
- 插件不写会话日志,隐藏仅存于你当前浏览器的站点存储;
- 换浏览器 / 换设备 / 清空站点数据会看不到之前的隐藏记录(会话本身不受影响)。
已知限制
- 搜索粒度:匹配的是每轮开头约 50 字的文本(投影大纲的粒度),长消息中间的关键词搜不到。要覆盖任意位置,需要接入宿主的全文消息索引(
ctx.sessions.search),目前未实现。 - 缓存依赖:从未被投影缓存覆盖过的老会话可能没有大纲,因而搜不到;把那个会话打开一次后缓存会补齐。
- 固定窗口:默认最近 6 个会话 × 6 轮、搜索最多列 60 个命中会话,均为
client.js顶部常量。 - 会话数很多时:
session.list()返回的是全量目录(你如果有数百个会话,首次加载会花一点时间),属正常现象。 - 隐藏是「视图级」的:它只改变本插件里的显示,不影响 DSH 侧边栏里的会话列表。
可调参数
client.js 顶部:
const RECENT_SESSIONS = 6; // 默认显示几个最近的会话
const WINDOW_TURNS = 6; // 每个窗口读取几轮
const WINDOW_MESSAGES = 400; // 每次分页请求的消息预算
const SEARCH_GROUPS = 60; // 搜索最多列出多少个命中会话
const CACHE_MS = 60 * 1000; // 会话目录缓存时长
目录结构
dsh-recent-prompts/
├─ package.json # 包声明:dsh.bundle.patch + dsh.client
├─ cordis.patch.yml # 把插件行插进 profile
├─ index.js # Host 半边(空实现,渲染全在浏览器侧)
├─ client.js # 全部界面与读取逻辑(React,无构建步骤)
├─ icon.svg # 插件管理页展示的图标
├─ locale/zh.json # 插件元数据(标题/描述)
├─ locale/en.json
├─ README.md # 中文说明(本文件)
├─ README.en.md # English
├─ CHANGELOG.md
└─ LICENSE
没有打包步骤:client.js 是一个 window.__ModuleLoader__.load({ id, factory }) 的普通 JS 文件,React 由宿主的模块表提供。
开发
- 把仓库目录以 link 方式装进某个 profile(见「方式二」),之后改
client.js只需刷新页面; - 没有测试套件,也没有构建;
- 界面文案在
client.js的zh/en两个字典里;locale/*.json只给插件管理页用; - 样式只用
--dsw-alias-*主题 token,不依赖宿主组件库。
贡献
Issue / PR 都欢迎。改动前留意:插件必须保持只读(不得写入会话日志),不得加载宿主 Client 包,不得用 iframe 渲染页面。
License
MIT © 2026 hujiyo
Comments
Loading…
Similar plugins
by n8guru
DSH hook plugin: a session may not stop the harness it runs inside
★ 0
MIT
JavaScript
Sep 2, 2026
dsh plugin --profile web add dsh-self-preserveby bobby-sheng
Search, inspect, update, and install DeepSeek Harness plugins from DSH Get.
★ 0
MIT
JavaScript
Aug 19, 2026
dsh plugin --profile web add dshget-pluginby gorban
DeepSeek Harness (dsh) plugin: stop a running background job from the session-header job list, behind a confirmation dialog.
★ 1
↓ 276/wk
MIT
TypeScript
Sep 20, 2026
dsh plugin --profile web add @gorban/dsh-job-stopby jwilson411
DeepSeek Harness plugin: fail-closed URL host/scheme allowlist that runs before a request is opened
★ 0
MIT
JavaScript
Sep 21, 2026
dsh plugin --profile web add dsh-ssrf-guardby MarJose123
DeepSeek Harness plugin: your DeepSeek API balance and the current peak/off-peak billing window, below the message input.
★ 0
MIT
JavaScript
Oct 18, 2026
dsh plugin --profile web add dsh-simple-usage-infoby weibaohui
DeepSeek Harness plugin: cron-driven scheduled items with a full-page management UI. Each item carries a title, a prompt, and a croner expression; executions spawn a fresh agent session in a bound wor
★ 0
JavaScript
Aug 19, 2026
dsh plugin --profile web add dsh-plugin-scheduled-items