DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Split Panes — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
S

@dsh-external/dsh-split-panes

Split Panes

DSH 分屏对话插件:PiUI 风格的多窗格对话界面——支持拆分/堆叠窗格、每窗格独立会话、侧边栏会话拖放,以及单行融合式标题栏。无需修改核心:每个窗格都在窗格作用域宿主上运行核心自带的插槽渲染器。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:lehhair/dsh-split-panes#ccbbf06d414df233744fb1f776f54fb47465ac17
README兼容性版本
dsh-split-panes 分屏效果

兼容性与来源证明

Split Panes 以 @dsh-external/dsh-split-panes 发布,当前版本为 0.6.5。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/10

版本

0.6.5stable
2026/9/10
0.6.4stable
2026/9/10
0.6.3stable
2026/9/10
查看其余 3 个版本收起版本
0.5.0stable
2026/9/9
0.4.0stable
2026/9/8
0.2.3stable
2026/9/8

相关插件

正在加载相关插件…

最新版
0.6.5
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
BSD-3-Clause
发布源
github
GitHub
★ 7
周下载
0
最近提交
2026/9/10
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Client Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。Pet@linxin666/dsh-pet适用于 dsh Web GUI 的多宠物伴侣插件:由注册表驱动的浮动宠物,可响应模型活动,支持为每只宠物命名、抚摸/喂食互动以及亲密度评分

README

dshfind

dsh-split-panes

DSH 对话分屏插件(PiUI 风格):把信息流分成多个可独立操作的窗格,每个窗格绑定自己的会话——分屏/层叠、四向拖拽分配、侧边栏会话拖入。每个窗格都跑核心自己的渲染器,插件只提供容器、焦点路由与交互。

免补丁:不修改、不重打包核心。插件把核心的 slot 渲染器(createSlotRenderer)逐字节 vendor 进仓库,给每个 pane 构造一个 pane 作用域的 host(SlotRendererHost 是公开接口),于是核心的 outlet 用这个 pane 的 session binding 渲染——header / 消息流 / composer / hero 全部是核心代码。

功能

  • 分屏组合:header 分屏按钮 + mod+shift+方向键(左右/上下),mod+shift+w 关闭窗格;分隔条可拖拽、可键盘调节(比例 0.1–0.9)
  • 窗格全屏:pane header 的全屏按钮把该窗格铺满整列,分屏树原样保留;再点一次或按 Esc 退出,精确回到分屏状态
  • 每窗格独立会话:每个 pane 绑定各自的会话;分屏是纯视图操作——新窗格是"新建对话"占位(不创建 host 会话),在占位里选工作区才真正创建会话并绑定到该 pane
  • 焦点即全局选中(OpenCode 模型):点 pane → 它成为焦点并让全局选中跟随(侧边栏高亮同步);点侧边栏会话 → 改的是焦点 pane 的内容,其余 pane 保持 pinned
  • 侧边栏拖拽分配:拖会话到 pane 中心=替换,四条边缘=向该侧分屏(拖拽通道完全插件化:capture 阶段反查行 DOM)
  • 原生视觉:单窗格时逐字节等同原生(无边框无 chrome);分屏后焦点 pane 带品牌蓝边框

效果预览

dsh-split-panes 分屏效果

为什么需要 vendor 核心渲染器

核心没有"按任意 session id 渲染"的扩展点(详见 docs/ARCHITECTURE.md §2:ScopeProvider 硬编码 adapter.current,binding context 私有、installScope 一次性、renderSlot() 只允许 'root'、SlotScope 是封闭联合)。

但核心公开了渲染器的输入契约 SlotRendererHost:

renderRoot(host)
 ├─ HostContext.Provider(host)
 ├─ RootStandardProvider        ← 读 host.root
 ├─ ScopeProvider               ← 读 host.scope('session').current   ★ 决定 binding
 └─ RootOutlet                  ← 读 host.entriesOfSlot('root')

host 由调用方提供。所以每个 pane 用一个合成 host(scope('session') 指向本 pane 的 binding、entriesOfSlot('root') 返回一个只有一行 renderSlot('conversation') 的合成 root、entriesOfSlot('conversation') 过滤掉插件自己的影子),核心渲染器就把原生会话渲染进这个 pane 了。

createSlotRenderer 没有从已发布的 @deepseek-ai/dsh-client-ui-renderer 导出(npm 包只带 lib/),所以渲染器源码 vendor 进 src/client/vendor/renderer/,由 scripts/sync-renderer-vendor.mjs 同步、tests/renderer-vendor.spec.ts 逐字节守门。

安装

git clone https://github.com/lehhair/dsh-split-panes.git
dsh plugin --profile web add link:/path/to/dsh-split-panes

重启 dsh web 即可使用(会话 header 出现分屏按钮)。

版本:开发与测试基线是核心 0.1.5-alpha.2(vendor 的渲染器副本来自该版本;alpha.2 引入的 main 面板模型已适配)。0.1.2-rc.1 也实测可用(分屏 / 双 pane 各自会话 / 焦点路由 / 拖拽),0.1.5 才有的东西(右侧栏等)在该版本上不存在,插件优雅降级。

上游跟踪:.github/workflows/upstream-track.yml 每 6 小时检测核心新 release,只在上游真正触碰本插件消费的接触面(ui-renderer 渲染器文件 + ui-conversation/ui-session/ui-layout 契约 + 图标源)时才开升级 PR(全绿才开);发版仍由人工合 PR 后执行。钉死的核心版本在 core-pin.json(build-release 读它生成发布产物)。本地一键:pnpm run upgrade:core dsh-vX.Y.Z。想验证"开 PR"那半边链路(定时路径平时走不到),手动 dispatch 加 force: true。

使用

  • 分屏:点会话 header 的分屏按钮,或 mod+shift+←/→(左右)、mod+shift+↓(上下)
  • 切会话:点 pane 让它成为焦点,然后在侧边栏点另一个会话 → 焦点 pane 换成它
  • 替换:拖侧边栏会话到窗格中心
  • 新建:分屏出的新窗格是当前工作区的新建对话,直接在窗格内选工作区开始
  • 关闭:窗格 header 的关闭按钮或 mod+shift+w
  • 全屏:点窗格 header 的全屏按钮(或全屏后按 Esc 退出)

开发

pnpm install          # devDeps link 到 ../dsh2026/deepseek-harness(核心源码)
pnpm run check        # vendor 漂移检查 + typecheck + test + build
  • src/client/:浏览器半(slot 注册、分屏树 store、pane host facade、拖拽、焦点路由)
  • src/client/vendor/renderer/:核心 slot 渲染器的逐字节副本(不要手改,用 pnpm run vendor:renderer)
  • src/index.ts:node 半(空)
  • 构建产物 lib/client.js 由 harness 以 /plugins/<id>/client.js 提供

测试跑 vitest,resolve 到核心 ../dsh2026/deepseek-harness 的 src(vitest.config.ts 的 alias),因此跑的是核心源码、非构建产物,能即时反映上游 API 变化。

真机验证脚本(本地):.dev/scenario.mjs 用 Playwright 驱动真实浏览器完成"开会话 → 分屏 → 切侧边栏 → 点回第一个 pane",输出截图与 console 错误。

布局

src/client/
  pane-host.ts          # 合成 SlotRendererHost(root 槽 / pane scope adapter / store / abdication)
  PaneRoot.tsx          # 合成 root entry:一行 renderSlot('conversation')
  PaneConversation.tsx  # 一个 pane:binding + host + 核心渲染器
  root-binding.ts       # root standard-source binding(按 ctx.inject 反应式补齐 workspaces/resources)
  pane-session.ts       # 非当前会话的窗口打开(session.open)
  session-row.ts        # 侧边栏会话行的 drag / click 反查
  PaneWorkspace.tsx     # 分屏树 / 焦点路由 / 拖拽 / 快捷键(无对话布局)
  pane-layout-store.ts  # 分屏树 store(模块单例)
  SplitContainer.tsx    # 分隔条容器
  PaneDropOverlay.tsx   # 拖拽 drop-zone 高亮
  SplitPaneButton.tsx / SplitVerticalButton.tsx / FullscreenPaneButton.tsx / ClosePaneButton.tsx
  vendor/renderer/      # 核心渲染器逐字节副本(bind.ts / bindings.tsx / scoped-slots.tsx)

License

BSD-3-Clause(与核心渲染器副本同许可)

友情链接 / Friend Links

  • DSHFind — DeepSeek Harness 插件市场与学习社区