omdsh-chatmode:給 DeepSeek Harness 加一個 Chat / Work 模式開關

前言

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 發佈的註冊表(sessionModesmodeOfcolumn 等),自身不修改 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.registernewSession 回調;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 發佈的註冊表(sessionModesmodeOfcolumn 等),環境裏需要這套接縫;
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 / 幻方無官方從屬關係)
羽毛球分组比赛记分
小程序二维码

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

小夜