DSH Hub
dsh-quick-phrases cover

xianrui69/dsh-quick-phrases

dsh-quick-phrases

UIWeb UI1 GitHub stars· updated 2026-08-27

DeepSeek Harness client plugin: quick-phrase chip bar above the composer + /-triggered phrase menu

Install

npx @deepseek-ai/dsh plugin --profile web add <本包路径>`。

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-quick-phrases DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-quick-phrases.svg)](https://dshhub.dev/plugins/dsh-quick-phrases)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from xianrui69/dsh-quick-phrases, cleaned of badges and images.

dsh-quick-phrases

DeepSeek Harness(DSH)客户端插件:输入框上方的快捷短语条 + / 触发短语菜单

🇬🇧 TL;DR — A DeepSeek Harness client plugin that adds a quick-phrase chip bar above the composer and a /-triggered phrase menu (phrases group pinned to the top). Pure client-side, host-file persistence, no build step.

当前版本 v0.7.5。v0.1.0 曾带着 2 个 UI 瑕疵以"封存状态"开源求助,v0.2.0 两个都已修复(见 修复记录);v0.3.0 新增每条短语独立的 / 菜单开关;v0.3.1 修复"隐藏快捷条后管理入口随之消失";v0.4.0 把「快捷短语」挂进 DSH 设置对话框settings.section slot);v0.5.0 管理界面改为 Token 面板式浮动窗——标题栏拖拽、放到哪记到哪;v0.6.0 新增每条短语独立的 ▬ 快捷条开关(不上条的短语仍可 /名称+回车 展开);v0.7.0 chips bar 本身可拖拽——整个快捷条变成浮动窗口,拖动到任意位置、位置持久化(学 Token 面板);v0.7.1 修复拖拽冲突 UX —— 管理面板不再是独立浮动窗,而是附加在 chips bar 上方作为一个整体,拖动时两者统一移动,彻底解决 v0.7.0 中两个独立 fixed 窗口互相干扰的问题;v0.7.2 修复 bar 位置跳动 —— 锚定 barPos 到 bar 本身位置,管理面板用 absolute 定位出现在 bar 正上方,打开/关闭时 bar 位置不再跳动;v0.7.3 相对锚点定位 —— barPos 改为相对输入框的偏移量,监听布局变化(ResizeObserver + MutationObserver + 定时器后备),自动跟随对话区移动,解决开关右侧面板时 bar 位置不同步的问题;v0.7.4 修复拖拽与跟随冲突 —— 拖拽期间暂停跟随循环,落盘时写入新偏移量,恢复布局跟随且不抢回拖拽位置;v0.7.5 管理窗支持点击别处关闭 —— 热区按整个浮动单元(面板 + 快捷条)判定,拖条子/点 chip 不误关,设置页浮动窗行为不变。另有一个多窗口并发写的架构缺陷尚未修复(真实踩过坑),见 已知缺陷


✅ 功能(真实环境验证过)

功能说明
快捷短语条v0.7.0 浮动可拖拽:整个条子变成浮动窗口(position: fixed),拖动到任意位置、位置持久化(宿主文件 + localStorage,学 Token 面板),首次加载默认底部居中;点击 chip 把短语填入输入框;每条短语可用 ▬ 开关单独控制是否上条(默认显示);取消勾选「显示快捷条」后仍保留一枚低透明度 ⚙ 常驻入口(悬停变清晰),不会把自己埋掉
➤ 点击即发送每条短语可独立开启;点击后延迟验证草稿确实写入再提交(防抢跑发出空/旧草稿),chip 上带 ➤ 标记
/ 短语菜单输入 / 出现「短语」分组,置顶于命令/技能等全部内置组order: -1),★置顶排最前,按名称/内容模糊过滤;仅显示带 / 标记的短语(每条独立开关,默认不进菜单,保持菜单清爽)
/名称 + 回车草稿为 /短语名 时,提交自动展开为短语内容(matchEnter 纯文本路径);此显式命令路径对全部短语生效,不受 / 开关限制
浮动管理窗输入框旁「⚙ 管理」打开浮动窗口(学 Token 面板):拖标题栏放到任意位置,位置持久化(宿主文件 + localStorage,重开还在原处);增删改 / ★置顶 / ➤自动发送 / / 是否进斜杠菜单 / ▬ 是否上快捷条 / ↑↓排序 / 显示开关 / JSON 导入导出 / 恢复默认;关闭方式:✕ / Esc / 点击浮动单元(面板 + 快捷条)以外的任意处
设置页入口DSH「设置」对话框左侧导航**「快捷短语」settings.section slot,机制同 Token 面板):点进去自动弹出同一个浮动管理窗**,快捷条隐藏时也永远可管理
宿主文件持久化短语表存 $DSH_HOME/storages/dsh-quick-phrases/phrases.json,原子写入(tmp+rename),跨重启、跨浏览器可靠;首次运行自动从旧 localStorage 键迁移;宿主不可达时回退 localStorage
安全边界纯客户端数据,不进会话日志、不影响模型上下文;宿主路由带同源 fence(loopback + Origin/Sec-Fetch-Site 校验)

🔧 v0.7.1 修复:统一浮动单元

v0.7.0 引入的两个独立浮动窗口(chips bar + 管理面板)导致拖拽冲突 —— 两者各有独立的 position: fixed 定位、独立的 pointer capture 和位置存储,拖动一个会干扰另一个。

v0.7.1 修复思路(2026-08-27):

  • 根因ManageWindowQuickPhrasesBar 各自是独立 fixed 窗口,各有独立拖拽处理器(onHeadPointerDown/onBarPointerDown),当管理面板打开时两组 pointer 事件监听器同时活跃 → pointer capture 冲突 → 拖动行为互相干扰。
  • 修复方案:管理面板不再是独立浮动窗,改为附加在 chips bar 容器内(flexbox 布局,panel 在上、bar 在下),整个容器作为唯一的拖拽单元(qp-bar-container)。拖拽逻辑只应用于容器,panel 和 bar 跟随容器一起移动。
  • 技术细节
    1. 新增 .qp-bar-containerposition: fixed,包含 panel + bar);
    2. 移除 ManageWindow 的独立定位和拖拽逻辑(它现在只是一个普通面板);
    3. 移除 store.panel 位置存储,只保留 store.barPos(容器的唯一位置);
    4. 拖拽时阻止在 panel 内部交互元素(inputs、textarea、buttons 等)上触发,避免误拖;
    5. 设置页的管理窗(StandaloneManageWindow)仍保留独立浮动 + 拖拽(位置存 localStorage 独立键,不写 store),与 chips bar 管理窗是两个不同的入口。
  • 用户体验:点击「⚙ 管理」后,管理面板出现在 bar 正上方,拖动 bar(或 panel 标题栏)移动时两者作为一个整体同步移动,不再出现"拖 A 影响 B"的错位感。关闭管理面板后 bar 保持原位。

🔧 v0.7.2 修复:位置锚定到 bar

v0.7.1 修复了拖拽冲突,但引入新问题:打开/关闭管理面板时 chips bar 位置会跳动。

v0.7.2 修复思路(2026-08-27):

Related plugins