🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

提示词历史召回 NoneadChina/dsh-nonead-prompt-recall

DeepSeek Harness
NoneadChina3 天前有提交已提供中文文档扫描:含敏感能力

在空输入框按上下键回溯并复用历史提示词

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add NoneadChina/dsh-nonead-prompt-recall
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · dev
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 16 处,展示前 16 条)
  • 删除本地文件
    lib/history-store.js:224
    await rm(join(this.#rootDir, `${key}.json`), { force: true }).catch((error) => {
  • 读取本地文件
    lib/history-store.js:306
    const raw = await readFile(file, 'utf8');
  • 写入本地文件
    lib/history-store.js:313
    await rename(file, `${file}.corrupt-${Date.now()}`).catch((renameError) => {
  • 写入本地文件
    lib/history-store.js:354
    await mkdir(this.#rootDir, { recursive: true });
  • 写入本地文件
    lib/history-store.js:363
    await writeFile(tmp, payload, 'utf8');
  • 写入本地文件
    lib/history-store.js:364
    await rename(tmp, file);
  • 读取本地文件
    lib/settings.js:88
    const parsed = JSON.parse(await readFile(this.#file, 'utf8'));
  • 写入本地文件
    lib/settings.js:94
    await rename(this.#file, `${this.#file}.corrupt-${this.#now()}`).catch((renameError) => {
  • 写入本地文件
    lib/settings.js:120
    await mkdir(dirname(this.#file), { recursive: true });
  • 写入本地文件
    lib/settings.js:122
    await writeFile(tmp, payload, 'utf8');
  • 写入本地文件
    lib/settings.js:123
    await rename(tmp, this.#file);
  • 写入本地文件
    lib/actions.js:41
    await mkdir(targetDir, { recursive: true });
  • 写入本地文件
    lib/actions.js:46
    await writeFile(file, payload, { encoding: 'utf8', flag: 'wx' });
  • 读取本地文件
    lib/actions.js:91
    const info = await stat(path);
  • 读取本地文件
    lib/actions.js:94
    const bytes = await readFile(path);
  • 读取本地文件
    lib/actions.js:108
    const names = await readdir(exportsDir);
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(131 字)↓

DeepSeek Harness 插件,给输入框加上 shell 风格的**提示词历史回溯**。当前版本:**0.6.1**。- 输入框为空时按 **↑**,载入你上次发送的提示词;- 再按 **↑** 继续往前翻;- 按 **↓** 往后翻,最后回到空白草稿。

README

由 DeepSeek 最新模型翻译生成
dsh-nonead-prompt-recall DeepSeek Harness 插件:给输入框加上 shell 风格的提示词历史召回。 当前版本:0.7.0。 - 输入框为空时按 ↑:载入上一条提交过的提示词; - 再按 ↑:继续向前载入更早的一条; - 按 ↓:向回走,最后回到当前空白草稿; - 历史按工作区隔离并持久化到磁盘,关闭 DSH Desktop、重启后仍然可用; - 手动输入内容时 ↑/↓ 恢复普通光标行为,不会误触。 目录 - 行为细节 · 安装 · 验证 · 设置页面 - 命令 · 数据位置 · 架构 · 本地化 - 开发 · 文档 · 兼容性 行为细节 | 场景 | ↑ | ↓ | | 输入框为空 | 载入历史第 1 条(最新) | 不拦截 | | 正在浏览历史(未编辑) | 载入更早一条 | 载入更新一条 / 回到空白 | | 手动输入/编辑过 | 不拦截,正常移动光标 | 不拦截 | | 历史为空 | 不拦截 | 不拦截 | - 连续两次提交完全相同的提示词只保留一条(避免连按 ↑ 一直停在同一条)。 - 单条提示词最长保存 32000 字符;每个工作区最多 500 条。 - 只记录真人输入:插件注入、续接仪式、工具调用等来源不会进入历史。
展开完整文档(README 剩余 1 节)
dsh-nonead-prompt-recall

DeepSeek Harness 插件:给输入框加上 shell 风格的提示词历史召回。

当前版本:0.7.0。

- 输入框为空时按 ↑:载入上一条提交过的提示词;
- 再按 ↑:继续向前载入更早的一条;
- 按 ↓:向回走,最后回到当前空白草稿;
- 历史按工作区隔离并持久化到磁盘,关闭 DSH Desktop、重启后仍然可用;
- 手动输入内容时 ↑/↓ 恢复普通光标行为,不会误触。

目录

- 行为细节 · 安装 · 验证 · 设置页面
- 命令 · 数据位置 · 架构 · 本地化
- 开发 · 文档 · 兼容性

行为细节

| 场景 | ↑ | ↓ |
| 输入框为空 | 载入历史第 1 条(最新) | 不拦截 |
| 正在浏览历史(未编辑) | 载入更早一条 | 载入更新一条 / 回到空白 |
| 手动输入/编辑过 | 不拦截,正常移动光标 | 不拦截 |
| 历史为空 | 不拦截 | 不拦截 |

- 连续两次提交完全相同的提示词只保留一条(避免连按 ↑ 一直停在同一条)。
- 单条提示词最长保存 32000 字符;每个工作区最多 500 条。
- 只记录真人输入:插件注入、续接仪式、工具调用等来源不会进入历史。
- 输入框会对草稿做规范化(例如 @引用 会被剥离);再按 ↑/↓ 时按回填后的实际文本比较,因此这类提示词也能继续回溯。

安装

方式 A:从 npm registry 安装(最省事)

包已公开发布在 npm:dsh-nonead-prompt-recall。

- 在 DSH Desktop 的插件页面选择添加插件,输入包名:

dsh-nonead-prompt-recall

- 对不受 Electron 独占的其他 profile,命令行等价:

dsh plugin --profile <profile-name> add dsh-nonead-prompt-recall

方式 B:插件页 + 本地目录(desktop profile 也可以走这里)

在 DSH Desktop 的插件页面选择添加插件,填入仓库路径(输入框接受本地目录):

D:/MyProgram/GitHub/dsh-nonead-prompt-recall

desktop profile 由 Electron 应用独占管理,直接对它执行命令行安装会被明确拒绝:

error: profile "desktop" is managed exclusively by the Electron application

本地目录安装是链接(junction)而不是复制:改工作区源码后,客户端半刷新页面即生效,宿主半需重启。

方式 C:其他 profile 从本地目录安装(命令行)

dsh plugin --profile <profile-name> add "file:D:/MyProgram/GitHub/dsh-nonead-prompt-recall"

安装完成后刷新页面(或重启 DSH Desktop),让浏览器端 bundle 生效。

验证

1. 在任意工作区发送一条提示词(例如 测试提示词 1);
2. 清空输入框,按 ↑:输入框应出现 测试提示词 1;
3. 再发一条不同的提示词,清空后连按 ↑:应依次出现最近的提示词;
4. 按 ↓ 逐条回退,最后回到空白;
5. 完全退出并重启 DSH Desktop,再按 ↑:历史仍在;
6. 打开 设置 → 提示词历史,确认左侧导航是历史图标、页头/状态区为新版布局,并能看到导出 / 导入 / 清空操作。

历史文件可直接检查:

<DSH_HOME>/plugin-data/dsh-nonead-prompt-recall/history/<workspace-key>.json

设置页面

打开 设置 → 提示词历史(左侧使用历史图标而非通用齿轮),在同一页完成全部管理与配置:

- 页头:插件图标、版本徽章与刷新按钮;
- 状态区:捕获状态、条数、当前工作区、存储位置;
- 捕获设置:启用开关、每工作区上限(1–5000 条)、保留天数(0 = 永久),数字输入带单位与保存校验;
- 历史管理:导出 / 导入 / 清空放在最近列表之前,窗口较矮时也能触达;列表展示当前工作区最近 5 条提示词。

导出会通过浏览器下载带时间戳的 JSON;导入通过文件选择器读取,在页面内解析(上限 8MB / 20000 条)并显示文件名、条数、来源工作区与前 5 条,确认后才合并。

命令

/prompt-recall 用于管理捕获设置与历史。设置保存在历史文件旁的 settings.json。

| 子命令 | 作用 |
| status / help | 查看捕获状态、上限、保留天数与本工作区条数 |
| on / off | 开关捕获(已有历史保留) |
| max <n> | 每工作区保留条数(1–5000) |
| keep <days> | 清理超过 N 天的历史(0 = 永久) |
| clear confirm | 清空当前工作区历史 |
| export | 导出 JSON 到 plugin-data/<plugin>/exports/ |
| import <file> | 合并已导出的文件(精确重复会跳过) |
| reset | 恢复默认设置 |

数据位置

<DSH_HOME>/plugin-data/dsh-nonead-prompt-recall/
├── history/<workspace-key>.json # 新的在前 ├── settings.json # 捕获开关、上限、保留天数 └── exports/<workspace-key>-<ts>.json

- workspace-key = 规范化工作区路径的 SHA-256 前 24 位;
- 文件内容为 { version, cwd, updatedAt, entries: [{ text, at, sessionId? }] },entries 新的在前;
- 写入采用临时文件 + rename 原子替换;损坏文件会被改名为 .corrupt-<时间戳> 后重新开始,不会卡住捕获;
- exports/ 只服务于 /prompt-recall export 命令——设置页只在内存中生成下载,不写宿主文件。

架构

session/event (user/message, source.kind=user)
│
▼
lib/index.js ── HistoryStore ── per-workspace JSON
│
│ connection.rpc.handle('/dsh-nonead-prompt-recall', 'history')
▼
lib/client.js (browser) ── conversation.input.shell(id).setDraft(text)
▲
└─ document keydown (capture) on [data-composer-input]

- host 半:监听 session/event,把真人提示词按工作区落盘;通过 Connection RPC 暴露 /dsh-nonead-prompt-recall(通道名必须是绝对路径),端点包括 history、ping、settings.get/set、history.clear/export/importPayload。history.export 只返回内存载荷,不写宿主文件。
- client 半:在 document 捕获阶段拦截输入框的 ↑/↓,通过 harness 自己的 composer facade 写草稿(不直接改 DOM),因此草稿持久化、发送按钮、Lexical 撤销栈都保持一致。
- 浏览器半以 window.__ModuleLoader__.load({ id, factory }) 形式打包(DSH client 模块加载器的约定)。

本地化

插件跟随桌面程序的语言:设置 → 通用 → 语言 里选中的语言(持久化为 locale.preference)决定设置页、/prompt-recall 命令输出以及插件页标题/描述。覆盖 DSH 内置的全部八种语言:

| id | 语言 | 文件 |
| zh | 简体中文 | locale/zh.json |
| en | English | locale/en.json |
| ja | 日本語 | locale/ja.json |
| es | Español | locale/es.json |
| fr | Français | locale/fr.json |
| de | Deutsch | locale/de.json |
| ru | Русский | locale/ru.json |
| pt | Português (Brasil) | locale/pt.json |

插件页的标题与描述来自 locale/<id>.json(小写 id,与 DSH 客户端语言一致);设置页通过 ctx.locale.register(ns, DICTS) 注册字典(src/i18n.js),命令面由 lib/i18n.js 翻译。两者都以 zh 与 en 为基线,缺翻译时回退到 en,再回退到 key 本身。normalizeLocale() 把 zh-CN、pt-BR、en_US 这类宿主值归一到八个 id,无法识别时返回 en。

每个元数据文件使用 meta 命名空间:

{ "meta": { "title": "提示词召回", "description": "…" } }

宿主通过包的 exports 映射读取这些文件,因此 "./locale/": "./locale/" 必须保持导出。package.json 的 description 是不支持本地化的界面(以及 npm)上的纯文本兜底。文档提供英文(README.md)与简体中文(README.zh.md)两份。

开发

npm run build:client # src/.js -> lib/client.js
npm test # node:test(沙箱内使用 --test-isolation=none)
npm run check # 构建 + 语法检查 + 全量测试
node scripts/build-client.mjs --check # 产物与源码不一致时失败

- src/core.js 是纯决策函数(可单测);src/client.js 是浏览器集成;scripts/build-client.mjs 只做 ESM → ModuleLoader 包裹,无第三方依赖。
- lib/index.js、lib/history-store.js、lib/message-text.js 均为纯 Node,可直接 node --test。
- 测试共 65 个,包含插件边界端到端用例(宿主捕获 → RPC → 按键 → setDraft)与设置页图标用例;真实窗口的验收清单见 docs/E2E.md。
- CI(.github/workflows/ci.yml)在 Node 24 上运行 npm run check 与产物同步检查。
- PLUGIN_VERSION 从 package.json 读取:发版时改版本号并补 CHANGELOG.md。

文档

- CHANGELOG.md — 版本变更记录(中英对照);
- docs/E2E.md — 手动端到端验收矩阵(按键、命令、设置页、备份);
- docs/RELEASE.md — 发布前检查、打包与发布/回滚步骤;
- 仓库:<https://github.com/NoneadChina/dsh-nonead-prompt-recall> · 问题反馈:<https://github.com/NoneadChina/dsh-nonead-prompt-recall/issues>。

兼容性

- 宿主:DSH 0.2.1-rc.3(Nonead DSH Desktop 2.1.11)实测可用;
- 依赖的宿主内部约定:[data-composer-input]、conversation.input.shell(id).setDraft()、sessions.list 快照的 cwd / retainedBy.mainView、session/event 的 user/message。宿主升级后若这些约定变化,需要同步适配(改动集中在 lib/client.js 与 src/client.js)。
预览分享卡片长什么样 ↓NoneadChina/dsh-nonead-prompt-recall
分享 · DeepSeek Harness Hub
NoneadChina/dsh-nonead-prompt-recall

在空输入框按上下键回溯并复用历史提示词

回到顶部