DSH 采用“一切皆插件”的架构,允许在不修改核心代码的情况下扩展功能。在 DSH Web GUI 中,聊天组件是交互核心,但常驻的输入框和工具条会占用大量垂直空间,导致对话内容被压缩。dsh-chat-collapse 插件提供了一种非侵入式的解决方案:通过在输入框工具行增加一个收缩按钮,将组件隐藏,并从角落唤出恢复球,从而释放空间。
插件定位¶
这是一个由 cx2002302-lang 维护的 DSH Web GUI 插件。它运行在纯浏览器侧,不 patch 本体、不注入 bundle、不起宿主服务,完全符合 DSH 的插件化理念。
核心功能¶
-
一键收缩与恢复
点击输入框工具行最右侧的按钮,聊天组件会收起,释放纵向空间。收起后,视口角落会浮出一个恢复球,点击即可还原组件。组件收起时,草稿、贴的图、光标位置全部保留。 -
目标切换
默认只收缩输入框区域。通过右键点击恢复球,可以在「输入框」和「整个对话区」之间切换收缩目标。 -
快捷键与持久化
支持按Alt+H键盘快捷键切换收起/展开状态。状态通过localStorage['dsh.chatCollapse.v1']持久化,刷新页面后保持。 -
隐私与安全
插件无网络请求、无遥测、无宿主服务。唯一的落盘操作是本地存储的状态数据,不接触会话内容,不读取草稿文本。
安装与启用¶
安装前请确保 DSH 版本不低于 0.1.2-rc.1。
- 安装插件:
dsh plugin --profile web add github:cx2002302-lang/dsh-chat-collapse
- 安装完成后,需要重启 DSH Web 服务以加载新插件(根据 README 示例):
systemctl --user restart dsh-web.service
- 重启并刷新页面后,输入框工具行最右侧会出现收缩按钮。
典型用法¶
- 收起组件:点击输入框工具行最右侧的按钮。
- 恢复组件:点击角落浮出的恢复球。
- 键盘切换:按
Alt+H。 - 切换收缩目标:在组件收起状态下,右键点击恢复球,选择目标。
技术细节¶
- 依赖钩子:插件依赖官方源码中的字面量属性钩子,包括
[data-composer-card]、[data-composer-seat]和[data-conversation-scroll]。 - 实现方式:通过在
<html>上设置data-dsh-cc和data-dsh-cc-target属性,配合 CSS 选择器驱动显隐。这种方式避免了使用 class 名称,防止 React 重渲染时样式丢失。
卸载¶
如果需要移除插件:
dsh plugin --profile web remove dsh-chat-collapse
卸载时会自动清理注入的样式、按钮、恢复球及 HTML 属性,不留残留。