READMESource: main@b8f69925
multiple-chat-panels
Multiple chat panels for DeepSeek Harness: view and interact with several agent sessions side by side.
这是一个纯插件(不修改 DSH 核心包),为 DeepSeek Harness Web/Desktop UI 增加“Mission Control”多面板视图:默认仍是你熟悉的单对话视图;当你把侧边栏中的会话拖到中间区域时,会打开多个可实时交互的迷你会话面板。
安装
npm 发布后:
dsh plugin --profile web add multiple-chat-panels
也可以直接从 GitHub 安装:
dsh plugin --profile web add github:<owner>/multiple-chat-panels
安装后重启 DSH,把侧边栏中的会话拖到中间区域即可打开 Mission Control。
功能
- 默认单对话视图,不打扰现有工作流。
- 从侧边栏拖拽会话到中间区域 → 自动打开 Mission Control,并把“当前会话 + 拖入会话”放入面板。
- 每个面板是可交互的 mini chat:
- Markdown 渲染(复用 DSH
MarkdownText); - reasoning 折叠块、工具调用/工具结果卡片、斜杠命令生命周期卡片,全部默认折叠,点击 summary 展开,与单对话模式的收拢语义一致;
- 流式 partial 输出;
- 取消当前 turn(运行中只显示 Stop,空闲只显示 Send);
- 队列消息展示与移除;
- 加载更早历史;
- 输入
/弹出斜杠命令菜单,选中后走session.command; - 输入框随内容自动增高,最多 6 行后内部滚动;输入框上边缘可上下拖拽调整高度,并持久化;
- 支持图片附件:📎 按钮选择文件、拖拽文件到面板、在面板内
Ctrl/Cmd+V或右键粘贴剪贴板图片(同时复制的文字照常进输入框)、缩略图预览与移除,发送时随消息提交(与单对话一致的 PNG/JPEG/WebP/GIF); - 聊天区右下角有“滚动到底”按钮,仅在向上翻看历史时出现;
- 审批 / 计划模式等复杂交互显示“open in main conversation”,一键跳回主对话。
- Markdown 渲染(复用 DSH
- 每个面板顶部有独立工具栏:权限预设(Perm)、模型(Model)、思考模式(Think),与主对话共享同一份会话状态。
- 面板信息分两层显示:第一行对话标题,第二行目录 + git branch/worktree(非 git 目录只显示目录名)。
- 布局为动态行数的横向布局:新面板默认加入第一行;每行超出屏幕宽度时,自动把该行最右的面板递归移到下一行,直到每行都完整可见(2 行、3 行或更多,按需要自动产生)。
- 面板标题栏原生拖拽(drag image 跟随鼠标):在同一行内可重排;向下拖到行下方会显示换行预览,松手后创建新行;向上拖回上一行。
⋮⋮拖拽把手固定在标题栏水平正中(整条标题栏可拖,按钮除外),右侧⤢回到单对话按钮与×关闭按钮之间保持 6px 安全间距。 - 从侧边栏把新会话拖入 Mission Control 时按落点放置:最右边追加到行尾、两个面板之间插入中间、下方进入下一行,随后自动执行防溢出换行。
- 没有持久化尺寸时,面板按所在行的可用宽度等分;右边缘、下边缘和右下角都可拖拽调整尺寸,最小 360×280。向下拉超过当前行时,面板临时置顶覆盖下一行并继续跟随鼠标;松手后行高按“行内最高面板”重算,下方行被整体推出去,放不下时网格出现纵向滚动——拖多少就长多少,不再被下方面板挡住。
- 聊天滚动条与右侧 resize 手柄分离,两者都可正常点击拖动。
- 页面内“Add”选择器可添加尚未打开的面板。
- 面板列表、行归属、面板尺寸与输入框高度持久化到
localStoragev5,刷新后恢复;旧版本只迁移面板列表。
当前实现状态(TDD 切片)
已通过 Web e2e(Playwright + DSH web scaffold)验证:
- Mission Control 导航入口与页面。
- 拖拽打开 Mission Control 并显示两个面板。
- 面板内实时渲染会话消息。
- 面板内发送消息只影响当前面板。
- 面板列表刷新后恢复。
- git branch 信息通过 host RPC 显示。
- 页面内选择器添加/移除面板。
- 默认大尺寸布局、三边 resize 以及刷新后的尺寸恢复。
- 含斜杠命令历史的会话加入面板时,命令卡片正常渲染且不会打挂 Mission Control。
- 默认单行布局、拖拽标题栏打开第二行,且行归属在刷新后恢复。
/斜杠命令菜单和每面板权限/模型/思考选择控件可用。- 工具/推理默认折叠,点击后可展开。
- 面板重排、侧边栏按落点插入(行尾/中间/下一行)以及输入框自动增高。
- 行溢出自动递归换行、手动拖到新行、每行完整可见。
- 输入框拖拽调高、滚动到底按钮、面板标题栏进入单对话视图(⤢ 与 × 间距 6px、拖拽把手居中)。
- 面板内图片附件选择、拖拽上传、剪贴板粘贴、预览移除与随消息提交。
- 向下拉长面板跨过行边界:拖拽中置顶覆盖、松手后下方行被推出,且不产生回弹。
已知限制
- 纯插件无法复用 DSH 内置 Conversation 组件,所以每个 pane 是插件自绘的 mini chat,视觉和交互尽量接近主对话,但复杂功能(审批弹窗、详细设置等)在 pane 内以跳转主对话的方式处理。
- 行布局由“宽度是否溢出”自动决定,不是完整 tmux/i3 自由分割。
- 使用了一个受控的内部 API 桥接(
Session.open()),详见FUTURE_UPSTREAM.md。
构建
DSH_CHECKOUT=/path/to/deepseek-harness-studio bash scripts/build.sh
npm run build:client
或在 DSH 开发环境中使用注入器:
dev_build_plugin /path/to/multiple-chat-panels
dev_inject_plugin /path/to/multiple-chat-panels
测试
Web e2e 位于 DSH 仓库的 apps/web/tests/multiple-chat-panels.e2e.ts(开发期 seam)。运行:
pnpm vitest run --config vitest.web.config.ts apps/web/tests/multiple-chat-panels.e2e.ts
开源说明
- 纯插件:不修改 DSH 核心包,用户开箱即用。
- 插件 peerDependencies 声明了 DSH client/host 相关包;安装到 DSH 后由 DSH 提供。
- 发布渠道:npm(
multiple-chat-panels)+ GitHub(topic 请加dsh-plugin/deepseek-harness)。 - 完整发布/开源操作见
RELEASING.md。
License
MIT
No comments yet. Be the first to write one.