前言¶
DeepSeek Harness 的 web GUI 是一个编码智能体,New Session 界面要求先选一个工作区才接收消息——对编码智能体来说合理,因为它总得工作在某个目录里。但不是每次提问都是工作:想随手问一句、理一条思路时,选目录这一步就成了障碍。
DSH 的理念是一切皆插件,这类体验缺口正好留给插件补。下面介绍的 omdsh-chatmode 做的就是这件事:在对话上方加一个 Chat / Work 切换,Chat 模式下不用选项目目录就能开始对话,这些对话统一收纳在侧边栏一个受管的 Chat 工作区里。
这是什么¶
omdsh-chatmode 是 DeepSeek Harness web GUI 的聊天模式插件,属于 omdsh-plugins,npm 包名 @omdsh-plugins/omdsh-chatmode,当前版本 0.2.5,许可证 MIT,包元数据中归类为 workspace。
它依赖 omdsh-basemode 发布的注册表(sessionModes、modeOf、column 等),自身不修改 harness 的任何部分,全部能力建立在这些接缝上。
核心功能¶
Chat / Work 开关与受管工作区¶
插件向 omdsh-basemode 发布的 sessionModes 分段注册表注册 Chat 和 Work 两个分段,在会话上方提供模式切换。同时注册真实目录 <dshHome>/sessions/chat 作为侧边栏的 Chat 工作区分组,并保持其标题为 Chat;无论打开多少项目,该分组始终排在侧边栏第一位——host 半区在启动时置顶,browser 半区负责维持。
两个分段携带 tone / owns,侧边栏会话上的绿、蓝圆点由 omdsh-basemode 依据这些声明绘制。
Chat 的新会话行上,工作区 chip 被移除:插件对自带按钮做标记而非替换,harness 自带的预设 chip 保留在原位。
模式是派生的,不是存储的¶
一个会话是 Chat,当且仅当它归入受管的 Chat 工作区。开关读取这一事实并报告它,所以从侧边栏打开一个对话会把开关移动到对应模式——开关描述当前会话所在位置,而不是决定它。
相应地,按分段是导航,不是状态写入。
Work 切换始终留在当前项目¶
按 Work 时,插件先借助 omdsh-basemode 发布的 sessionModes.column 判定屏幕上的项目,然后按顺序回答:回到该项目最近离开的会话、其次该项目最近的会话、否则在该项目新建一个——不会跳到别的项目。
“最近的会话”有两个排除条件:
1、其他 posture 认领的会话,注册表用 modeOf 判定,模式增加时依然成立;
2、空白会话——除非项目里只有空白会话,此时空白会话就是这个项目的 New Session 行,打开它好于再建一个。
另外,Chat 分段声明 inProject: false,表明其对话不归档于某个具体工作项目。
New Session 的归属¶
New Session 请求先交给持有当前列的分段处理,也就是 modes.register 的 newSession 回调;Chat 与 Work 不响应,交给框架自身的 New Session,并让出该列。本插件负责的一处行为是:New Session 复用工作区已有的空白会话。
安装与启用¶
本包是 profile bundle:通过 dsh plugin 安装进 profile,并追加到该 profile 的 layer stack,它的加载行组合在自带代码树之上。README 只描述了这一机制,未给出完整命令原文,本文不代拟,安装前以仓库 README 为准。
版本与环境要求(来自 package.json):
包名:@omdsh-plugins/omdsh-chatmode
版本:0.2.5
Node:^22.19.0 || >=24.0.0
包管理器:pnpm@11.7.0
许可证:MIT
client 侧注入以下模块,platform 为 web:
@deepseek-ai/dsh-client-locale
@deepseek-ai/dsh-api-session-controller
@deepseek-ai/dsh-api-workspace-controller
它不替换 harness 的任何控件。移除插件时,加载行、两个分段及其用到的所有接缝会一并移除。
典型用法¶
经过上面的安装,日常使用就是三种导航:
1、按 Chat:回到离开的聊天,或在 Chat 工作区开始一个新对话;
2、按 Work:回到当前所在项目中离开的工作会话,否则该项目最近的会话,否则在该项目新建一个;
3、从侧边栏打开一个对话:开关随之移动到对应模式。
对话里跑的是什么:聊天运行与工作会话相同的 agent,使用部署默认预设——除非部署另有说明,即为 Standard mode。要换预设,仍用 harness 自带的 chip。
对想给 omdsh-basemode 写模式的开发者,README 给了 newSession 回调的接口示例,omdsh-chatmode 的 New Session 路由依赖这一约定:
modes.register({
id: 'code',
newSession: (workspaceId) => startAnotherTerminal(workspaceId),
})
返回 true 表示“我已启动”,列保持不变;不响应的模式把请求让给框架处理。
适用场景与注意¶
适合在 DSH web GUI 里既有项目工作、也想随手提问的人:问题不关于某个项目时,不必为它选目录,这些对话也与项目会话分开收纳。
使用前注意三点:
1、插件依赖 omdsh-basemode 发布的注册表(sessionModes、modeOf、column 等),环境里需要这套接缝;
2、插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证,本插件许可证为 MIT;
3、它是 profile bundle 而非对 harness 的改动,移除即整体还原。
结尾¶
omdsh-chatmode 用一个开关和一组受管接缝,把“随手一问”和“项目工作”在 DSH web GUI 里分开,且没有动 harness 本身。如果你两种用法都有,可以看一下。
- GitHub:https://github.com/omdsh-plugins/omdsh-chatmode
- 社区目录页:https://www.skillhub.cn/plugins/omdsh-plugins/omdsh-chatmode (skillhub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系)