dsh-conversation-float:把 Conversation 视图变成可拖拽的浮动面板

前言

在 DeepSeek Harness(DSH)里,对话(Conversation)默认占住中间栏:你要对照左侧会话树、右侧工具或 Trajectory 时,往往只能收窄侧栏或来回切换焦点。若希望「对话仍在原生界面里操作,又能临时挪到侧边或单独浮起」,就需要在客户端布局层做改动,而不是另开一个浏览器窗口。

dsh-conversation-float(仓库 gosutry/dsh-conversation-float)由社区维护者 gosutry 发布,分类为客户端插件。它把 DSH 自带的 Conversation 列整块移入 dock kit 的浮动面板,支持拖放收纳、回中栏、挂靠右侧栏,并保留输入、滚动、附件与人格选择等原生行为。下文按安装、入口与拖放逻辑说明用法与限制。

这是什么

一句话:把固定在中栏的 Conversation 视图 提到 DSH 自有浮动面板里,仍属同一 DSH 窗口(任务栏只有一个 DSH),面板内是 同一 DOM / 同一 React 根,不是重绘副本。

与「新开 OS 级窗口」不同,本插件用的是与右侧栏相同的 dock kit 浮层;关闭或收纳时会把列移回原来的座位(若原座位不存在则回退到中栏)。

核心功能

浮动与隐藏主界面

入口:会话标题栏右侧的小型窗口图标(Conversation float)。

  1. 单击:在 DSH 主界面仍可见时打开浮层(两侧栏打开,浮层居中于留出的区域)。
  2. 同一按钮再次单击:隐藏 DSH 主界面,仅保留浮层(提示在 Hide DSH / Show DSH 之间切换);再按一次恢复主界面。
  3. 关闭浮层、收进左侧栏或挂到右侧栏时,侧栏状态会按插件规则自动归还。

首次打开会调用 dock kit 的 resizeFloat 把浮层放大(约 920×711,随窗口缩放);只放大,不会把已放大的浮层再缩小。打开前若右侧栏收起会先展开,左侧收起同理,以便「收回归侧栏」有落点。

左 / 中 / 右三带拖放

按住浮层标题栏拖动:按住约 1.2 秒 后进入落点判定,轮廓跟随指针下方带状区域,松手落入该带;未满 1.2 秒松手不产生移动,避免误触。

三带对应窗口真实分栏(宽度随布局测量,README 示例为左 0..280、中 280..680、右 680..1097):

落点 效果
左 收进左侧栏抽屉:浮层未关闭仅隐藏,中栏可保持空;左侧出现以 该 Conversation 标题 命名的行,点行可恢复
中 关闭浮层,对话回到中栏
右 作为右侧栏原生页签挂靠,带 Return to sidebar 与关闭

也可不用拖拽:左侧栏 More 菜单有 Stow the conversation here,右侧引导 More tools 卡有 Move the conversation here;对话已在目标位置时对应项会隐藏。

侧栏状态快照

浮层打开前会快照当前侧栏开合;关闭浮层或退出「仅浮层」隐藏态时,按快照恢复——若在浮层打开期间你本人点击或快捷键改过侧栏,则以最后一次为准。DSH 因窄窗自动收栏、浮层内操作等不计入「本人」修改。

实现要点(为何仍是「真」对话)

  • 对话列在同一文档内整块移入面板 body,关闭或换宿主时再移回。
  • 收左:在浮层根上标记隐藏(visibility/opacity),不关面板。
  • 收右:经 openResource(..., { destination: 'sidebar' }) 交给 DSH;页签类型 keepMounted,切走其他右侧页签时对话仍留在该页签 body。

拖动用 DSH 自带机制;每帧最多一次测量,三带在按下时测一次,轮廓仅在换带时重绘并用 transform 移动,以降低拖拽卡顿。

安装与启用

依赖:DSH >= 0.2.2-rc.1(README 开发与测试基线)。package.json 中 peerDependencies 为 @deepseek-ai/dsh": ">=0.2.2-rc.1 <1.0.0",Node >= 18。许可证 MIT。

插件以当前 DSH 进程权限在客户端运行;从 npm 安装前可在 GitHub 查阅源码与 LICENSE。

通过 npm

npm i dsh-conversation-float

两步都必须在 profile 的 package.json 完成,缺一不可:

  1. 在 dependencies 增加 "dsh-conversation-float": "^0.1.4"(README 示例;npm 上包版本见仓库 package.json,当前为 0.2.3)
  2. 在 dsh.profile.bundles 增加 "dsh-conversation-float" —— 仅注册后的 bundle 会出现在插件列表并可开关

从源码链接(节选)

  1. 将源码放在任意路径
  2. junction 到 <profile>/node_modules/dsh-conversation-float
  3. dependencies 使用 "dsh-conversation-float": "link:<path>",dsh.profile.bundles 同样加入 "dsh-conversation-float"
  4. client.js 支持热重载;宿主侧 index.js 为 no-op,改动后需重启 DSH

社区目录页:skillhub.cn 上的 dsh-conversation-float。目录为社区站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」,安装方式以 README 为准,勿凭仓库名自行拼接未文档化的 CLI。

典型用法

  1. 在 profile 中安装并注册 bundle 后,重启或按 README 重载客户端。
  2. 打开任意 Session,点标题栏右侧 Conversation float,浮层居中出现。
  3. 需要对照右侧工具:拖向右侧带松手,对话成为右侧页签;要专注单栏对话:拖向中间带或关闭浮层。
  4. 临时收进左侧:拖向左带或菜单 Stow the conversation here,中栏留白,从左栏同名行唤回。
  5. 只要浮层、不要两侧 chrome:同一按钮切到 Hide DSH,用完 Show DSH 或关闭浮层恢复布局。

适用场景与已知限制

适合:长时间对照 Trajectory / 右侧工具又不希望开第二个系统窗口;需要把当前 Session 的对话暂存到左栏抽屉、或固定到右侧页签的工作流。

务必注意:

  • 每个 Conversation 只有一个宿主;左栏行是入口,不是第二份实时副本。
  • 浮层属于打开它的 Session;切换 Session 会把对话还给该 Session 的中栏(或该 Session 自己的浮层)。
  • 左侧抽屉 只保留一个 Conversation;再收纳会替换前一个,被替换者失去抽屉标记回到普通浮层。
  • 从抽屉取出时浮层回到收纳时的位置,不会自动居中。
  • 重启 DSH 后抽屉状态丢失,对话回到中栏。

星标与热度以目录 / GitHub 当时数据为准(撰写时线索为 0 star);未在资料中出现的能力或配置项请勿假定存在。

结尾

dsh-conversation-float 在单窗口内把 Conversation 变成可拖放的 DSH 原生浮层,并打通左栏收纳与右侧挂靠,适合需要灵活分栏又不愿牺牲输入与附件体验的场景。安装与 bundle 注册以 README 为准;详情与 issue 见 GitHub 仓库,社区索引见 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye