dsh-prompt-snippets 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/README.md +30 -6
  2. package/client.js +926 -89
  3. package/index.js +235 -29
  4. package/package.json +1 -1
package/README.md CHANGED
@@ -3,7 +3,9 @@
3
3
  保存并一键插入可复用的提示词片段,支持分类与 `{{占位符}}`。
4
4
 
5
5
  一个让「常用提示词」随手可得、不重复造轮子的 DSH 插件。片段数据保存在本机
6
- `<DSH_HOME>/data/prompt-snippets/snippets.json`,纯本地、无任何网络上传。
6
+ `<DSH_HOME>/data/prompt-snippets/snippets.json`。默认只存本机、不上传任何内容;
7
+ **仅当你主动点击 ✨ AI 优化时,才会把当前那一条片段文本发送给你配置的模型服务**
8
+ (用于生成优化建议),除此之外不与网络通信。
7
9
 
8
10
  ## 安装
9
11
 
@@ -53,9 +55,20 @@ and reload the page.
53
55
  变量(必填勾选 + 默认值);面板底部「+ 新建」同样在面板内完成创建,全程不用敲命令。
54
56
  保存走乐观锁:两个标签同时改同一条时,后保存者看到冲突横幅,可选「覆盖」或
55
57
  「重新载入」服务器版本。草稿没保存时点面板外部不会关闭面板,取消也要二次确认。
56
- - **搜索**:按名称、分类、正文实时筛选,打开面板自动聚焦,`Esc` 清空。
58
+ - **搜索**:按名称、分类、正文实时筛选,打开面板自动聚焦。命中词在名称里高亮标记,
59
+ 右侧实时显示 `当前/总数` 命中计数;键盘 `↑` `↓` 移动选中、`Enter` 插入选中项、`Esc` 逐层退出。
60
+ 无命中时给出「+ 新建『搜索词』」按钮,点一下把搜索词预填为新片段名。
57
61
  - **删除可撤销**:点 🗑 删除后底部出现撤销条,记住最近 5 条,可逐条恢复或一键全部撤销。
58
- - **AI 优化**:点 ✨ 用当前默认模型改写片段,优化结果插入输入框。
62
+ - **AI 优化(对比后决定)**:点 ✨ 用当前默认模型改写片段,结果进「原文 / 优化后」双栏对比,
63
+ 不直接插入、也不自动落盘。**优化后那一栏可直接编辑**——微调后再决定怎么用。对比视图里给出
64
+ 字节数变化与占位符保全标记(丢了哪个 `{{x}}` 会点名,字节数随编辑实时重算),
65
+ 按钮为「插入优化版」「替换片段正文」「再试」「保留原文插入」「✕」:
66
+ - 「插入优化版」只进输入框,不动库里的片段;插入的是你编辑后的文本;
67
+ - 「替换片段正文」是**唯一会落盘**的动作,带 `expectedRevision` 乐观锁;冲突时只提供
68
+ 「用优化版覆盖(force)」与「放弃」,不做自动合并;
69
+ - 优化结果超长或丢了占位符时「替换片段正文」禁用,`title` 写明原因;把超长部分删短后自动解除;
70
+ - 「再试」最多 3 次,之后置灰;「取消」走 `AbortController`,host 回 `aborted` 时静默收起;
71
+ - 当前未配置默认模型时 ✨ 直接置灰,`title` 说明原因,不会等到点击才报错。
59
72
  - **`{{占位符}}` 智能填充**:正文里写 `{{主题}}` 之类占位符,点击片段时:
60
73
  - 无占位符 → 直接插入;
61
74
  - 占位符全部非必填且都有默认值 → 按默认值直接插入,并提示「可在 ✏️ 里改」;
@@ -63,10 +76,17 @@ and reload the page.
63
76
  也可选「保留占位符插入」原样插入。
64
77
 
65
78
  `\{{字面量}}` 转义后插入的是字面 `{{字面量}}`;同名占位符只问一次,全实例填同一个值。
79
+ - **导入 / 导出**:`/snippet export [文件名]` 把全部片段导出成 JSON,落在
80
+ `<DSH_HOME>/data/prompt-snippets/exports/` 下;`/snippet import <文件路径>` 导回来,
81
+ `--replace` 用文件内容替换现有库(未出现在文件里的片段软删除,仍可 `/snippet undo`),
82
+ `--dry` 只预演不写入。面板底部同样有「⬇ 导出」「⬆ 导入」两个按钮,导入填路径即可
83
+ (面板拿不到宿主文件系统,路径由 host 侧读取;省略目录与 `.json` 后缀时回落到 `exports/`)。
66
84
  - **深浅色主题跟随**:面板全部使用 DSH 主题 token,浅色 / 深色自动适配,无白底刺眼。
67
85
  - **窄屏可用**:面板宽度取 `min(340px, 100vw - 16px)`,窗口缩到 320px 也不溢出,
68
86
  并会在视口变化后自动拉回可视区。
69
87
  - **可拖动可记忆**:拖标题栏移动面板,位置记在浏览器本地,下次打开还在原处。
88
+ - **可缩放可记忆**:面板四条边和四个角都能拖(像 Windows 窗口),拖边缘调宽高(最小 200×160),
89
+ 松手后尺寸记在浏览器本地,下次打开沿用上次大小;缩到超出视口会自动收窄拉回。
70
90
 
71
91
  ## 使用
72
92
 
@@ -79,6 +99,9 @@ and reload the page.
79
99
  /snippet undo 代码审查
80
100
  /snippet mv 周报 日报
81
101
  /snippet optimize 周报
102
+ /snippet export 我的片段
103
+ /snippet import 我的片段.json --dry
104
+ /snippet import 我的片段.json
82
105
  ```
83
106
 
84
107
  然后在任意会话里,点击输入框下方的「📋 片段库」→ 点击片段名 → 内容插入草稿。
@@ -150,13 +173,14 @@ LICENSE MIT
150
173
 
151
174
  ## 测试
152
175
 
153
- 仓库外的工作区里有一组自测脚本(不随包发布),当前覆盖 **253 条断言**:
176
+ 仓库外的工作区里有一组自测脚本(不随包发布),当前覆盖 **417 条断言**:
154
177
 
155
178
  | 套件 | 覆盖 |
156
179
  |---|---|
157
- | `v110-host-test.mjs` | 迁移矩阵与迁移前备份、存储可靠性、双轨匹配、占位符扫描、`--cat` 收口、能力握手(153) |
180
+ | `v110-host-test.mjs` | 迁移矩阵与迁移前备份、存储可靠性、双轨匹配、占位符扫描、`--cat` 收口、能力握手、只读保护(156) |
158
181
  | `optimize-test.mjs` | 优化流的分支与降级(14) |
159
- | `client-test.mjs` | 渲染、搜索、插入、占位符表单、行内编辑、冲突处理、多条撤销、主题 token、窄屏(80) |
182
+ | `io-test.mjs` | 导入/导出命令:落盘、文件名安全、后缀回退、merge/replace/dry、往返一致、同名去重、大小限制(74) |
183
+ | `client-test.mjs` | 渲染、搜索高亮、命中计数、键盘导航、插入、占位符表单、行内编辑、冲突处理、多条撤销、优化三态对比(含优化后编辑)、导入导出按钮、使用统计 touch、主题 token、窄屏、窗口缩放(167) |
160
184
  | `client-error-test.mjs` | 插入失败的报错链路(6) |
161
185
 
162
186
  测试通过 `isolate-home.mjs` 把 `DSH_HOME` 顶到系统临时目录,**绝不读写真实片段库**。