Repository navigation
Releases: lnyuqian/dsh-quick-prompts
Release list
v0.4.1 分类改为下拉框,可直接切换
修复:管理弹层里切换「分类」必须先删掉当前分类的问题。
修复
- 分类改为下拉框:编辑行的「分类」原来是
input + datalist—— 浏览器会按输入框的
当前值过滤候选项,所以必须先删掉当前分类名才能看到别的分类。现在是一个真正的
<select>:选项 = 「已保存分类 ∪ 当前草稿里出现过的分类」,当前值就是该行分类,
直接选即可切换,无需先清空。 - 新分类仍可自由输入:下拉最后一项是「+ 新建分类…」,选中后该行切成输入框;
旁边的「选择已有」一键回退到下拉。空分类名照旧归到「默认」。 - 内部重构:抽出纯函数
catPickerModel(catNames, draft, row)(含NEW_CAT哨兵值)
并经internals暴露,updateRow改走新的patchRow(支持一次更新多个字段);
移除datalist元素,新增.qp-cat-select/.qp-cat-back样式。
测试
新增 test-category.mjs(4 项,含真实渲染断言),原有 6 个测试文件全部通过:
node test-category.mjs # 分类下拉:选项来自全部分类(含草稿内新分类),切换无需先清空升级
dsh plugin --profile web add "https://github.com/lnyuqian/dsh-quick-prompts/releases/latest/download/dsh-quick-prompts.tgz"桌面版用 install-desktop.ps1 或桌面自带 CLI 载体安装(见 README)。
v0.4.0 快捷条一键收起 / 展开
新增:快捷条一键收起 / 展开
手机与远程查看时,输入框上方的快捷条会占掉不少高度。这版把它做成可切换。
怎么用
开关就在闪电笔右侧的三角上(不新增独立控件):
- ▾ = 快捷条展开中,点它收起
- ▴ = 已收起,点它展开
- 收起后快捷条整块不渲染 —— 实测手机宽 390px 下从 61.19px 变成 0 高度
- 闪电笔本身行为不变,收起后仍是选词 / 管理入口,能力不丢
默认与记忆
| 场景 | 行为 |
|---|---|
| 窄屏(≤640px,手机 / 远程访问) | 默认收起 |
| 宽屏(电脑) | 默认展开(与之前一致) |
| 手动切过之后 | 按设备各自记住 |
| localStorage 不可用(隐私模式等) | 安全回退到上面的视口默认 |
折叠状态存本设备 localStorage,刻意不写进三端共用的 quick-prompts.json —— 否则在手机上收起会连累电脑端也收起。快捷语内容仍然三端共享、永不丢失。
真机复核(Playwright 加载真实组件 + 真实 CSS,非设计稿)
| 环境 | 初始 | 点三角后 |
|---|---|---|
| 手机 390×844 | 快捷条不存在(0 高度) | 出现,高 61.19px、宽 322px、圆角 12px |
| 桌面 1440×900 | 展开,高 61.19px | 收起,0 高度 |
工具行控件 44×26(闪电笔 26 + 三角 18);三角的 title / aria-expanded 随状态翻转;重新进入页面后仍记得手动选择;style[data-plugin="dsh-quick-prompts"] = 1(样式归属正常)。
测试
全量 62 项断言通过(新增 test-collapse.mjs):
| 用例 | 断言数 |
|---|---|
| 追加语义 + 折叠渲染 + 样式归属 | 12 |
| MD 解析与合并 | 24 |
| 导出 ↔ 导入 往返一致 | 6 |
| 桌面适配(弹层定位 / 环境识别 / 复制MD) | 9 |
| 服务端半部(路由生命周期 + 读写往返) | 6 |
| 折叠默认值与每设备记忆 | 5 |
升级后
Web 版重新执行一键安装命令即可;桌面版若界面上没看到三角,完全退出并重新打开桌面版即可加载新版客户端 bundle。
完整改动:v0.3.1...v0.4.0
v0.3.1 修复:桌面版快捷条样式丢失与路由重复注册
修复:桌面版快捷条样式丢失与路由重复注册
v0.3.0 在桌面版上会出现「快捷条退化成浏览器默认按钮、位置塌到会话区左上角」。根因是两个宿主集成缺陷,本版修复。
1. 样式被宿主回收后不再恢复(界面塌陷的直接原因)
客户端模块系统按 data-plugin 属性认领并回收插件 bundle 的 <style>。本插件此前用的是 data-dsh-plugin,并且在 apply() 里注入——晚于模块系统的归属快照。宿主图更新回收该样式时插件实例仍然挂载,不会重新物化,于是样式永久消失:按钮回到浏览器默认样式、.qp-bar 的宽度与居中失效,整条 UI 塌陷。
修复:物化期 ensureStyles() 注入并显式打 data-plugin 归属标记;apply() 里再用 MutationObserver 观察 document.head,一旦被回收就自动重注入(幂等,不会重复堆叠)。
2. webServer.register() 返回的 disposer 被丢弃(插件行激活失败)
每次 HMR 重组 / 插件启停都会重复注册 /api/quick-prompts,第二次直接抛:
webserver: duplicate exact route "/api/quick-prompts"
导致整条插件行进入失败态。桌面版安装会连续触发多次组合,这条路径必现。
修复:路由挂进 ctx.effect 生命周期(卸载即释放);并对同进程重复注册做窄容错——只吞 duplicate 并告警,其余错误照抛,避免一行失败导致功能全丢。
升级后需要重启桌面版
宿主进程对服务端半部有 ESM 模块缓存,且被泄漏的旧路由无法在运行中释放,所以刷新页面不够,需要完全退出并重新打开桌面版。重启后:
- 快捷条恢复正常样式与位置(输入框上方常驻)
/api/quick-prompts干净注册,插件行不再进入失败态- 数据仍是同一个
~/.dsh/quick-prompts.json,Web 版与桌面版共用
测试
新增 test-server.mjs(路由生命周期 / 重复注册容错 / 隔离 DSH_HOME 下的 GET-POST 往返与 v1 平铺迁移),test-append.mjs 增加样式注入与幂等断言。全量 53 项断言通过:
| 用例 | 断言数 |
|---|---|
| 追加语义(点击=追加而非覆盖) | 8 |
| MD 解析与合并 | 24 |
| 导出 ↔ 导入 往返 | 6 |
| 桌面适配(弹层定位 / 环境识别 / 复制MD) | 9 |
| 服务端半部(路由生命周期 + 持久化往返) | 6 |
完整改动:v0.3.0...v0.3.1
v0.3.0 桌面版支持(web/desktop 双端通用)
新增:桌面版支持(DeepSeek Harness Desktop)
本版把插件做成 web / desktop 双端通用 —— 一份实现、一份数据、同一套界面。
桌面适配
- 弹层自适应:按可视区自动决定向上/向下展开、左右夹紧、按可用空间限高。桌面窗口通常比浏览器窗口小,旧实现会把弹层顶出可视区。
- 「复制MD」按钮:仅桌面端出现。桌面外壳的下载通道受宿主策略影响,剪贴板是它失效时的可靠退路;导出的 MD 文本与「导出MD」完全一致。
- 环境识别
isDesktopShell():按dsh-app://协议或 Electron UA 判定桌面外壳,取不到环境信息时一律按普通浏览器处理。
安装
- Web 版
然后重启 dsh web 并刷新页面。
dsh plugin --profile web add "https://github.com/lnyuqian/dsh-quick-prompts/releases/latest/download/dsh-quick-prompts.tgz"
- 桌面版:
desktopprofile 由 Electron 独占管理,全局dshCLI 会拒绝操作。请在桌面版的 设置 → 插件 内安装,或完全退出桌面版后运行仓库里的install-desktop.ps1(它走桌面自带的 CLI 载体,带manageDesktopProfile权限),支持link/tgz/-Uninstall/-WhatIf。
说明
- 数据仍存全局
~/.dsh/quick-prompts.json,Web 版与桌面版共享同一份快捷语。 dsh.client.platform保持"web":桌面端复用的就是 web 客户端载体(dsh-client-modules只认platform === 'web'),改成别的值反而会导致客户端半部不被加载。- 桌面端
/api/quick-prompts由 Electron 主进程把dsh-app://app/api/...带认证 cookie 转发到本地 webserver,服务端半部无需改动。 - 回归测试 47 项断言全绿:追加语义(8)/ MD 解析合并(24)/ 导出导入往返(6)/ 桌面适配(9)。
完整改动:v0.2.6...v0.3.0
v0.2.0 全局存储 + 分类快捷条 + MD 导入导出
v0.2.0
- 永不丢失:数据改存全局
~/.dsh/quick-prompts.json(DSH_HOME下),重启环境、换项目都不再丢失;数据模型升级为 v2 分类结构,自动兼容旧 v1 平铺数据并迁移为「默认」分类 - 常驻横向快捷条:输入框上方全宽快捷条(第一行分类、第二行标题),悬停分类切换下方标题,点击标题把内容插入输入框(不自动发送);宽度用官方 dock 几何公式与输入框卡片精确对齐
- MD 导入:弹层「导入MD」按
###解析分类、顶层无序列表解析标题、缩进列表解析内容(多行自动拼接);同名标题跳过、其余合并追加 - MD 导出:「导出MD」一键把现有快捷语(含分类)序列化为标准格式,与导入完全互逆
- 分类下拉:编辑快捷语时「分类」字段可直接下拉选择已有分类,也可输入新分类名
- 附回归测试:
test-parser.mjs(解析/合并 15 例)、test-roundtrip.mjs(导出导入往返 4 例)
安装 / 升级
dsh plugin --profile web add "https://github.com/lnyuqian/dsh-quick-prompts/releases/latest/download/dsh-quick-prompts.tgz"安装后重启 dsh web 并刷新页面。
v0.1.0
首个正式版:输入框快捷输入(闪电笔)客户端插件。
- 权限切换右侧闪电笔按钮,点选预设提示词直接发送
- 「管理」增删改提示词,持久化到项目根目录 .dsh/quick-prompts.json
- 安装:dsh plugin --profile web add "https://github.com/lnyuqian/dsh-quick-prompts/releases/latest/download/dsh-quick-prompts.tgz"