为所有 Web UI 弹窗添加窗口化操作:标题栏拖动、八向缩放、钉住防误触关闭、全屏最大化、移除背景模糊,以及按弹窗持久化的状态。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:lisniuse/dsh-modal-enhancer
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
简体中文 · English
这是一个客户端 Cordis 插件,无需修改 DeepSeek Harness Web GUI 源码, 即可为所有模态窗口增加接近桌面窗口的操作能力。
功能
- 拖动窗口:按住顶部独立拖动条移动弹窗。
- 八向缩放:四条边和四个角都可以用鼠标调整窗口大小。
- 固定 / 取消固定:固定后,点击窗口外部不会关闭弹窗;关闭按钮和
Esc键仍然可以正常关闭。 - 最大化 / 还原:将弹窗扩展到接近整个视口,并可恢复最大化前的位置和尺寸。
- 取消遮罩与磨砂:同时移除暗色遮罩和背景模糊;弹窗会增加一层浅阴影, 以便继续和页面背景区分。
- 逐窗口状态持久化:每个弹窗会分别记住位置、宽度、高度、最大化、固定和 遮罩状态,关闭浏览器后再次打开仍会恢复。
- 总开关:可在 设置 → 通用 → 弹窗增强 中启用或停用整个插件。
插件通过稳定的无障碍属性
[role="dialog"][aria-modal="true"] 发现弹窗,不依赖可能变化的 CSS Module
哈希类名。因此设置窗口、创建工作区、模型与智能体预设编辑器、风险确认窗口,
以及其他使用相同约定的 Harness 弹窗都可以被增强。
操作说明
| 控件 | 功能 |
|---|---|
| 顶部拖动条 | 移动弹窗 |
| 上、下、左、右四条边 | 单独调整宽度或高度 |
| 四个角 | 同时调整宽度和高度 |
| 图钉 | 切换点击窗口外部是否关闭 |
⛶ / ❐ |
最大化 / 还原 |
◐ / ◌ |
移除 / 恢复视觉遮罩和磨砂 |
缩放热区会略微跨过弹窗边界,便于鼠标抓取。弹窗处于最大化状态时,会暂时禁用 拖动和缩放;还原后即可继续操作。
状态持久化
插件按照以下优先级识别“同一个弹窗”:
- 弹窗显式提供的
data-dshme-state-key; aria-label;aria-labelledby指向的标题文本;- 弹窗内部的第一个标题元素。
状态保存在浏览器 localStorage 中,键名前缀为
dshme.dialog-state.v1:。如果更换显示器或浏览器视口尺寸发生变化,插件会在
恢复时重新约束窗口位置和大小,确保仍有一部分窗口处于可操作区域。
停用或卸载插件时,当前页面中注入的控件、样式类、事件监听器和行内几何样式 都会被清理;已经保存的窗口状态会保留,方便下次重新启用时继续恢复。
安装
可直接使用的单文件插件位于 dist/plugin.js。将该文件的完整内容
作为动态 cordis_define 插件的 code.client 函数体传入即可。文件以
return { ... } 开头,是一个完整的 JavaScript 函数体。
本插件不需要修改 Harness 源码,不需要运行 pnpm install,也不需要重新构建
Web 应用或重启服务。动态插件和智能体预设两种安装方式请参阅
docs/install.md。
激活后,如果 Harness 界面出现 Client Package 权限确认,请先批准本次运行; 随后打开任意弹窗,确认顶部工具栏和边缘缩放光标已经出现。
工作原理
插件会:
- 通过客户端
stylesbuiltin 注入限定在.dshme-*下的样式; - 监听
document.body,在 React 挂载弹窗时自动增强; - 在不移动 React 所管理节点的前提下,兼容设置窗口等横向双栏布局;
- 在
settings.general.item插槽中注册总开关; - 按弹窗身份分别读取并恢复已经保存的状态。
取消视觉遮罩后,透明遮罩仍会保留点击拦截,从而维持正常的模态语义,并防止 用户误点弹窗背后的页面内容。
项目结构
dist/plugin.js 生成的单文件插件函数体
src/plugin-body.js 权威的自包含源文件
src/enhancer.js 便于阅读的模块化运行时参考
src/settings.js 便于阅读的设置项参考
src/styles.css 便于阅读的样式参考
scripts/build.js 生成 dist/plugin.js
scripts/layout-check.test.js 布局、缩放、固定与状态恢复回归测试
scripts/syntax-check.js JavaScript 语法冒烟检查
docs/install.md 详细安装指南
README.md 英文文档
开发与验证
需要 Node.js 18 或更高版本。
npm run build # 重新生成 dist/plugin.js
npm test # 运行布局与交互回归测试
npm run test:syntax # 解析所有源文件和生成的 JavaScript
发布修改前应执行以上三个命令,并确保生成的 dist/plugin.js 与源代码一起提交。
兼容性
- 目标:DeepSeek Harness Web 客户端(
platform: 'web')。 - 客户端能力:
ctx、React、styles以及标准浏览器 API。 - 设置插槽:
settings.general.item(scope: root、kind: list)。 - 状态存储:仅使用浏览器
localStorage,不会将窗口状态发送到服务器。
许可证
链接
同类插件
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 2622
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
ccch1mneyyy/dsh-TUI★ 1231
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/DSH-better-sidebar★ 1198
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
omdsh-dev/dsh-at-file★ 214
Codex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
huiliyi37/dsh-tianshu-tui★ 159
DeepSeek Harness 的终端 UI(TUI)。
Nagi-ovo/dsh-visualize★ 114
对话内生成式 UI:模型把交互式 HTML 卡片直接画进会话流,带流式预览与沙箱渲染。