dsh-prompt-shelf
taoziliyouchong/dsh-prompt-shelf
把常用提示词存进 DSH 输入框工具行:可插入、可整框替换,带变量与回收站。
安装
dsh plugin --profile web add github:taoziliyouchong/dsh-prompt-shelfREADME
dsh-prompt-shelf
中文 | English
把常用提示词存进 DSH:输入框工具行里多一个「常用提示词」按钮,点开是一张列表窗口, 可以存当前草稿、也可以把某条一键送进输入框。
入口在哪
输入框卡片底部工具行里、「完全权限」右边,文字「常用提示词」加条数。新会话的空白页也有这个入口。
怎么用
- 存:「存入当前输入」把输入框现有内容存成一条;空框时按钮灰着,同正文不会重复存。
- 写:「+ 新建」直接在窗口里写一条(标题 + 正文),保存后排在卡片最前。
- 找:顶部搜索框按标题和正文过滤。
- 用:卡片头右侧有「插入」(在光标处追加,不动已写的内容)与「替换」(整框换成这条)。 插入不关窗口,可以连着挑好几条。
- 改:卡片内展开编辑标题与正文;标题留空时自动取正文首行。
- 删:进回收站,默认留 3 天;工具行右侧「回收站」里能看每条还剩几天,并可一键恢复。 保留天数可改(1~365),改完立刻按新天数清理过期条目。
- 关:右上角 ×、点窗口外的暗区、或按 Esc(编辑中按 Esc 先退编辑)。
变量
正文里写 {{名称}} 或 {{名称=默认值}},这张卡片的正文里那个位置就变成一个输入框:
插入时用填的值替换,不填就用默认值,同名变量共用一份值。变量框里打 @ 可以引用工作区文件(见下)。
编辑卡片时看到的是带 {{…}} 的原文——改模板在那里改。新建或编辑时正文框下方有「+ 变量」,
把光标放到要放变量的位置点它就在光标处插入 {{变量}} 并选中「变量」两字,直接打字就是改名。
正文框里按 Alt+V(或 Ctrl+Alt+V)同效,只在这个框里生效,不是全局快捷键。
@ 里选用
- 任务输入框里打
@:先只出「常用提示词」一项;选中它才展开条目列表(第二层),再选一条把正文 落到光标处。展开后接着打字按关键词过滤;Esc 关掉后草稿里留着@常用提示词,删掉即可。 - 新建 / 编辑卡片的标题框、正文框里打
@:候选分「常用提示词 / 文件与文件夹 / 对话 / 插件」几类, 顶部类别栏点一类只看该类。标题框选常用提示词插条目名,正文框插整段正文;选文件与文件夹插@路径(目录带尾斜杠,路径含空格时用@"路径")。上下键选、回车或 Tab 选中、Esc 关。 - 卡片上的变量框里打
@:同样分这几类(浮层出现在输入框下方,放不下时翻到上方), 选常用提示词把整段正文填进变量,选文件把@路径填进去;插入或替换进任务输入框后,模型按 @ 引用去读它。
数据存哪
真源是宿主侧的 $DSH_HOME/data/dsh-prompt-shelf/state.json(写入先落 .tmp 再改名,旧的留 .bak),
经本插件的本机路由读写;浏览器侧另存一份 localStorage 缓存(键 dsh.prompt-shelf.v1)用于首屏。
为什么不直接用 localStorage:它按 origin 隔离,而桌面端每次启动端口都不同,刷新或重启后条目就读不到了。 与插件包分开存:重装、升级插件都不影响条目。
安装
dsh plugin --profile desktop add github:taoziliyouchong/dsh-prompt-shelf
发布到 npm 之后也可以:
dsh plugin --profile desktop add dsh-prompt-shelf
装完重启 DSH。用别的 profile 就把 desktop 换成你的 profile 名。
要求:DSH 0.2.1 及以上的桌面端或 dsh web(0.2.1-alpha.3、0.2.2-rc.1 验证通过)。要求 DSH >= 0.2.1-alpha.1(下限按用到的服务与槽在 alpha.1 已存在推定);实测 0.2.1-alpha.3、0.2.2-rc.1,更高版本未验证。
机制
- 界面挂在 list 槽
conversation.input.left(session 范围,渲染在 permission / plan 之后); 窗口是createPortal到document.body的覆盖层——输入框容器会裁剪,不 portal 就弹不出来。 - 宿主半边注册三条本机路由,只接受回环地址:
GET /dsh-prompt-shelf/api/state、POST同路径(读写条目)GET /dsh-prompt-shelf/api/files(按查询词列工作区文件,递归 3 层、封顶 400 条)GET /dsh-prompt-shelf/api/plugins(插件加载器实时表里的第三方插件)
- 读写输入框只用宿主给的 slot 标准 props:
useInput读草稿,inputActions.captureInsertion()/insertText(text, span)插到光标处,setDraft(text)整框替换。不碰编辑器 DOM。 - 不联网、不上传任何内容;所有数据只在本机。
已知限制
- 条目上限 5000 条、单次写入上限 1MB;超了会被拒并提示。
- 只在本机回环地址下可用:远程访问的 DSH 上,路由会回 403。
- 「替换」是整框覆盖,会盖掉输入框里现有的内容(「插入」不会)。
开发
npm install
npm run build:client # 从 src/entry.jsx 重新生成 lib/client.js
npm run check:client # 已提交产物与源码一致
npm run check # 语法
npm run smoke # 结构 / 组合声明 / 宿主路由 / 鉴权 / 产物 / 伴随插件 六关
lib/client.js 是提交进仓库的构建产物:从 GitHub 安装时不跑构建,缺了它界面不加载。
打包要求:react、react/jsx-runtime、react-dom 保持 external(由 DSH 客户端模块表提供);
产物外壳 window.__ModuleLoader__.load({ id, factory }) 里的 id 必须等于包名。
源码:
src/entry.jsx—— 浏览器半边(按钮、窗口、卡片、变量、窗口里的 @ 候选)index.js—— 宿主半边(三条本机路由、状态文件读写)
反馈
插件有问题,按这个顺序:
- 开 Issue:https://github.com/taoziliyouchong/dsh-prompt-shelf/issues —— 能留痕、能搜历史;
- 急着问或不想开 Issue,QQ 号:2171960697(加好友请注明装的是哪个插件)。
反馈时带上:DSH 版本、插件版本、报错原文、截图。
许可
MIT