Skip to content

Releases: lnyuqian/dsh-quick-prompts

v0.4.1 分类改为下拉框,可直接切换

Choose a tag to compare

@lnyuqian lnyuqian released this 07 Oct 01:40

修复:管理弹层里切换「分类」必须先删掉当前分类的问题。

修复

  • 分类改为下拉框:编辑行的「分类」原来是 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 快捷条一键收起 / 展开

Choose a tag to compare

@lnyuqian lnyuqian released this 04 Oct 17:02

新增:快捷条一键收起 / 展开

手机与远程查看时,输入框上方的快捷条会占掉不少高度。这版把它做成可切换。

怎么用

开关就在闪电笔右侧的三角上(不新增独立控件):

  • ▾ = 快捷条展开中,点它收起
  • ▴ = 已收起,点它展开
  • 收起后快捷条整块不渲染 —— 实测手机宽 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 修复:桌面版快捷条样式丢失与路由重复注册

Choose a tag to compare

@lnyuqian lnyuqian released this 02 Oct 10:10

修复:桌面版快捷条样式丢失与路由重复注册

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 双端通用)

Choose a tag to compare

@lnyuqian lnyuqian released this 02 Oct 09:36

新增:桌面版支持(DeepSeek Harness Desktop)

本版把插件做成 web / desktop 双端通用 —— 一份实现、一份数据、同一套界面。

桌面适配

  • 弹层自适应:按可视区自动决定向上/向下展开、左右夹紧、按可用空间限高。桌面窗口通常比浏览器窗口小,旧实现会把弹层顶出可视区。
  • 「复制MD」按钮:仅桌面端出现。桌面外壳的下载通道受宿主策略影响,剪贴板是它失效时的可靠退路;导出的 MD 文本与「导出MD」完全一致。
  • 环境识别 isDesktopShell():按 dsh-app:// 协议或 Electron UA 判定桌面外壳,取不到环境信息时一律按普通浏览器处理。

安装

  • Web 版
    dsh plugin --profile web add "https://github.com/lnyuqian/dsh-quick-prompts/releases/latest/download/dsh-quick-prompts.tgz"
    然后重启 dsh web 并刷新页面。
  • 桌面版:desktop profile 由 Electron 独占管理,全局 dsh CLI 会拒绝操作。请在桌面版的 设置 → 插件 内安装,或完全退出桌面版后运行仓库里的 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 导入导出

Choose a tag to compare

@lnyuqian lnyuqian released this 07 Sep 15:29

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

Choose a tag to compare

@lnyuqian lnyuqian released this 27 Aug 07:57

首个正式版:输入框快捷输入(闪电笔)客户端插件。