🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

顶栏高度拖拽 jiangshirong/dsh-ui-panel-resize

DeepSeek Harness
jiangshirong36 天前有提交已提供中文文档扫描:含敏感能力

拖动对话顶栏下边界调高度,拖过头即收起

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add jiangshirong/dsh-ui-panel-resize
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
作者未把包发布到 npm,只能用源码安装
插件本身没问题,是分发方式不同
数据截至 2026/09/30·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 36 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@dsh/ui-panel-resize(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/8 09:41:01

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 5 处,展示前 5 条)
  • 写入本地文件
    lib/index.js:84
    appendFileSync(output, `${new Date().toISOString()} HOST:mirror-start\n`);
  • 读取本地文件
    lib/index.js:93
    names = existsSync(root) ? readdirSync(root) : [];
  • 读取本地文件
    lib/index.js:93
    names = existsSync(root) ? readdirSync(root) : [];
  • 读取本地文件
    lib/index.js:101
    raw = readFileSync(join(root, name));
  • 写入本地文件
    lib/index.js:115
    appendFileSync(output, `${new Date().toISOString()} ${payload}\n`);
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 拖动下边界调高度
  • 拖过最小值即收起
  • 点击细条恢复

DSH 插件:给 DeepSeek Harness Web GUI 的对话顶栏加一条可拖动的下边界,上下拖动调高度,拖过最小值就收起,点击细条恢复。

README

由 DeepSeek 最新模型翻译生成
description: "对话顶栏高度拖动 / 拖过最小值即收起:给 DSH Web GUI 的会话标题栏加上可拖动的下边界。" @dsh/ui-panel-resize DSH plugin license: MIT 这是 DSH(DeepSeek Harness)的客户端插件:装进 DSH profile 后,给 Web GUI 的对话顶栏加一条可拖动的下边界。 仓库话题:dsh · dsh-plugin · deepseek-harness · cordis-plugin · dsh-client-plugin 它解决的问题 对话内的顶栏(会话标题 + 子智能体 / 模式 / 后台任务徽标 + “对话 / 轨迹” 标签页)高度完全由内容决定,没有任何调节入口:鼠标移到它的下边界时光标不会变化,也没有办法把它压扁或收起来。 本插件把那条边界变成可拖动的手柄。 左栏的“拖过最小宽度即收起”曾经也在本插件里,已删除(见文末「为什么不做左栏」)。
展开完整文档(README 剩余 1 节)
description: "对话顶栏高度拖动 / 拖过最小值即收起:给 DSH Web GUI 的会话标题栏加上可拖动的下边界。"

@dsh/ui-panel-resize

DSH plugin
license: MIT

这是 DSH(DeepSeek Harness)的客户端插件:装进 DSH profile 后,给 Web GUI 的对话顶栏加一条可拖动的下边界。
仓库话题:dsh · dsh-plugin · deepseek-harness · cordis-plugin · dsh-client-plugin

它解决的问题

对话内的顶栏(会话标题 + 子智能体 / 模式 / 后台任务徽标 + “对话 / 轨迹” 标签页)高度完全由内容决定,没有任何调节入口:鼠标移到它的下边界时光标不会变化,也没有办法把它压扁或收起来。
本插件把那条边界变成可拖动的手柄。

左栏的“拖过最小宽度即收起”曾经也在本插件里,已删除(见文末「为什么不做左栏」)。

交互

| 操作 | 结果 |
| 鼠标移到顶栏下边界 | 光标变 row-resize(上下箭头),并浮出一小段把手 |
| 向上拖 | 顶栏变矮,内容超出部分被裁掉;最低 44px(只留标题行) |
| 在最低高度以下继续向上拖 40px 以上 | 把手变蓝 + 提示「松开以收起顶栏」 |
| 在上一步松手 | 顶栏收成 8px 细条 |
| 收起后:点击细条 | 展开回上次的高度(未设过则回到自然高度) |
| 收起后:向下拖 24px 以上 | 同上 |
| 向下拖 | 顶栏变高,在自然高度以上最多再长 160px |
| 在把手上双击 | 清除手动高度,回到内容自然高度 |

拖动过程中把手旁会显示实时高度(xx px),越过收起阈值时改为提示文字。

参数(lib/client.js 顶部)

| 常量 | 值 | 含义 |
| HEADER_MIN | 44 | 最低可见高度(保留标题行,裁掉标签页) |
| HEADER_COLLAPSE_SLACK | 40 | 比最低高度再矮多少才算“要收起” |
| HEADER_COLLAPSED | 8 | 收起后保留的细条高度 |
| HEADER_MAX_GROWTH | 160 | 自然高度之上允许的最大增高 |
| HEADER_DRAG_SLOP | 3 | 超过多少像素才算拖动(否则算点击) |
| HEADER_RESTORE_TRAVEL | 24 | 收起状态下向下拖多少像素算展开 |

实现

只用稳定的 DOM 钩子,不依赖被哈希的 CSS 类名,也不改动任何由 React 管理的子树:

- 顶栏用 [data-conversation-header-leading] 的父元素定位(回退:最宽的 header[data-window-drag]),给它打上插件自有的 data-dsh-panel-resize="header",并通过 CSS 变量 --dsh-panel-resize-header-height 控制高度(!important 覆盖宿主 min-height:76px)。
- 把手是挂在 document.body 上的 position: fixed 元素,几何只取自顶栏自身的
getBoundingClientRect()。这一点很关键:顶栏的父节点是槽位宿主,可能是 display: contents
(边框盒为 0),早期版本因此算出 left:0;width:0 的隐形把手。把手跨在边界上:约 7px 在顶栏内(正好落在标签页自身的下内边距里)、约 3px 在正文侧;若右侧面板占用轨道([data-rightbar-col] 宽度 > 0),把手会裁到轨道左边缘。
- 偏好写在 localStorage['dsh.ui-panel-resize.header'] = {"height":number|null,"collapsed":boolean}。
- 所有节点与监听器都归 ctx.effect() 管理,关闭或热替换插件时自动移除;样式是单个。

插件不申请任何服务(inject: []),纯 DOM chrome。

安装

git clone https://github.com/jiangshirong/dsh-ui-panel-resize.git
cd dsh-ui-panel-resize
powershell -ExecutionPolicy Bypass -File install.ps1

(装了 PowerShell 7 的话 pwsh -File install.ps1 等价。)

脚本会把当前目录复制到 %USERPROFILE%\.dsh\profiles\desktop\node_modules\@dsh\ui-panel-resize,并在 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml 末尾写入 loader 条目(已存在则跳过)。

如果你所在网络访问 github.com 不稳定,install.ps1 也可以离线使用:把仓库目录(或压缩包解压后的目录)放到任意位置,在该目录里运行 pwsh -File install.ps1 即可。

手工安装(等价两步)

1. 把本仓库目录复制到 %USERPROFILE%\.dsh\profiles\desktop\node_modules\@dsh\ui-panel-resize;
2. 在 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml 末尾追加:

- insert:
- id: ui-panel-resize
name: "@dsh/ui-panel-resize"
disabled: false

insert 是必须的:只写 id + name 的行是覆盖已有条目,条目不存在时会被静默丢弃。

宿主 Loader 会立即新增该条目,浏览器端通过模块图(HMR)热加载,通常不需要重启;改 lib/client.js 后同样会自动重载,改 lib/index.js(宿主半边)才需要重启。

卸载

删除 cordis.patch.yml 里的 insert 条目(或在「设置 → 插件」里关闭该条目),再删掉 node_modules\@dsh\ui-panel-resize 目录。插件所有 DOM 节点与样式会随卸载一起消失。

诊断

浏览器端把关键事件写进自有的 localStorage 环形缓冲 dsh.ui-panel-resize.trace(每次激活重置),宿主端插件把它镜像到 %USERPROFILE%\.dsh\profiles\\ui-panel-resize-trace.log。
页面内插件没有 devtools 控制台,这是唯一的外报通道。

| 标记 | 含义 |
| A:apply | 客户端半边已激活 |
| H:found: | 已定位顶栏, 为自然高度;后附 anchors= / pos= |
| H:handle | 已创建把手 |
| H:detach::live= | 顶栏节点被宿主替换(React 重建 ),live=0 表示旧节点已断开 |
| H:collapsed / H:height: / H:restore: / H:reset | 收起 / 设高 / 展开 / 复位 |
| D:handle= / D:atHandle= | 激活后 1.2s 的命中采样:把手几何 + 该点上最上层元素 |
| E: | 异常(含类型与消息) |

为什么不做左栏

初版还实现了「左栏拖动过最小宽度即收起」(ChatGPT 那套)。后来删掉了,理由是它作为功能不成立:

1. 结果本来就一步可达:Ctrl+B 和侧栏自带的收起控件都能收起左栏。实现里的降级方案就是合成一次 Ctrl+B —— 当一个手势的兜底是一次按键时,这个手势没有新增能力。
2. 它有代价,不只是零收益:按宿主契约,收起会忘掉拖出来的宽度,重新展开回到默认 280px。
于是“拖宽度”这个原本安全的动作变成危险动作:过冲一下,整栏消失,刚调好的宽度也没了。
3. 窄窗口语义不一致:窗口 < 1024px 时 toggleSidebar() 切换的是“窄屏覆盖式展开”状态,手势与快捷键的后果并不等价。
4. 它是整个插件里唯一需要和 React 拖动生命周期抢指针的部分(捕获阶段拦截 pointerup、 stopPropagation 阻止宿主回写宽度、手动释放指针捕获、再用 280/720ms 反向补发兜底),风险最高、最难维护,而服务的是一个重复功能。

顶栏没有等价入口,所以留下。

已知边界

- 把手宽 10px、跨在边界上;约 7px 落在顶栏内(标签页自身的下内边距里),约 3px 落在正文顶部。
- 顶栏收成 8px 细条后,若当前主面板不是对话(例如打开设置面板),把手自动隐藏。
- 顶栏高度覆盖在「空白会话 ↔ 有会话」切换时会重新测量自然高度(监听 class 变化),手动设定的高度会被夹到新的合法区间。
预览分享卡片长什么样 ↓jiangshirong/dsh-ui-panel-resize
分享 · DeepSeek Harness Hub
jiangshirong/dsh-ui-panel-resize

拖动对话顶栏下边界调高度,拖过头即收起

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部