前言¶
DeepSeek Harness(DSH)可以在桌面端使用經典 Agent 殼,同時用另一個 Web 配置跑 DS Bot,供瀏覽器或平板使用。兩套配置共用 ~/.dsh 數據目錄,但 Web 實例需要單獨啓動,還要從命令行輸出裏拿到帶 ?token= 的地址再粘貼到瀏覽器。手動做這幾步容易打斷工作流。dsh-classic-mode 由社區維護者 shiyoungwoo 發佈,歸類爲客戶端插件,在經典界面側邊欄底部增加入口,點一次即可在 Safari 中打開已配置的 Web 配置;若實例未運行會先拉起進程。它不負責安裝 DS Bot,也不改動任一配置裏的插件列表。
這是什麼¶
dsh-classic-mode(npm 包名 @local/dsh-classic-mode,當前資料中版本爲 0.1.7)是一個 DSH bundle:在經典 Agent 側邊欄底部的插件操作區註冊「DS Bot」按鈕(圖形爲內嵌的 DS Bot 鯨魚靜態資源,Apache-2.0),點擊後由宿主側啓動或複用指定 profile 的 Web 服務,並用系統瀏覽器打開認證 URL。默認目標 profile 名爲 classic,需在該 profile 中已啓用 DS Bot 才能使用其團隊界面。
架構與行爲¶
插件拆成兩半,職責在 README 中有明確說明。
宿主側(index.js) 讀取 ~/.dsh/classic-mode/state.json;若本插件此前在同一宿主下已啓動過 Web 進程則複用,否則執行 dsh --profile <profile> --no-open --port <port>,從標準輸出解析帶 token 的 URL,寫入 state,再打開瀏覽器。還會在適當時機清理「殘留實例」(見下文)。
客戶端側(client.js) 通過 sidebar.footer.action 註冊按鈕,位置隨經典側邊欄佈局:展開時顯示圖標與標籤,摺疊爲窄欄時僅圖標;不懸浮在對話區域。按鈕請求 GET /classic-mode/open。DS Bot Web 獨立側欄不提供此入口。
環境與依賴¶
- DSH:
>=0.2.1-rc.3且<0.3.0(Web 或 Desktop)。 - Node:
>=22.19。 - 需要第二個已啓用 DS Bot 的 DSH profile(默認名
classic)。 - 默認用 macOS 的
open -a <browser>打開瀏覽器;其他平臺可將browser改成本機可用的啓動方式,或自行讀取接口返回的url。
安裝與啓用¶
1、把包加入某一 profile(本地 checkout 或 GitHub):
pnpm add link:/path/to/dsh-classic-mode
# or: pnpm add github:shiyoungwoo/dsh-classic-mode
2、將倉庫 cordis.patch.yml 中的條目追加到該 profile 的 bundle 列表,或依賴包自帶的 patch 自動應用,然後填寫 config(見下節)。
3、重啓 DSH,或在 Plugins 頁面切換該 bundle 的啓用狀態。
配置¶
倉庫內 cordis.patch.yml 爲佔位值,四項都需按本機填寫;建議在自己的 profile 補丁里覆蓋,避免把絕對路徑寫進倉庫:
| 字段 | 含義 |
|---|---|
cliPath |
dsh 啓動器絕對路徑,必填。Desktop 示例:/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh |
profile |
要拉起的 profile,默認 classic |
port |
Web 服務監聽的本機迴環端口,默認 3090,需保持未被佔用 |
browser |
傳給 open -a 的應用名,默認 Safari |
示例覆蓋(來自 README):
- id: local-classic-mode
name: '@local/dsh-classic-mode'
config:
cliPath: /Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh
profile: classic
port: 3090
browser: Safari
典型用法¶
完成安裝與配置後,在已加載該 bundle 的經典 Agent 界面中,展開或摺疊側邊欄均可看到底部 DS Bot 入口。點擊後:
- 若目標 profile 的 Web 實例已在運行(且屬於當前宿主或已被正確複用),直接在 Safari(或你配置的
browser)中打開已有會話 URL。 - 若未運行,宿主會 detached 啓動
dsh --profile classic --no-open --port 3090(實際 profile/port 以配置爲準),解析 token URL 後打開瀏覽器。
無需手動複製終端裏的地址。插件不會替你安裝 DS Bot,也不會修改 desktop 與 classic profile 各自的插件選擇。
殘留實例與佔用會話¶
classic Web 服務以 detached 方式啓動,會存活於啓動它的 DSH 宿主進程之外。DSH 重啓後,舊進程仍可能佔用 Harness 會話,其他 DSH 實例(桌面端或另一個 dsh web)可能報會話已被佔用。插件在 state.json 中記錄宿主 PID,並在兩處嘗試清理:bundle 在新宿主進程中加載時;以及點擊按鈕時發現記錄的 server 屬於更早的宿主。僅當進程命令行同時包含本插件配置的 profile、port 且爲 DSH 入口時纔會發終止信號;PID 已被無關進程複用時只報告、不 kill。當前宿主自己啓動的實例始終複用,不重啓。
安全與權限¶
/classic-mode/open在 DSH Connection 認證之前響應,會拒絕Origin與服務 host 不一致的跨站請求;僅接受GET,其他方法返回 405。- 拉起的 Web 服務綁定迴環地址;token 寫在
~/.dsh/classic-mode/state.json,權限隨用戶主目錄,勿將該文件提交到版本庫。 - 插件以當前 DSH 進程權限運行,安裝前應閱讀倉庫源碼與許可證(啓動器代碼 MIT;內嵌鯨魚素材見
DS-Bot-LICENSE)。社區目錄 SkillHub 插件頁 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-classic-mode 面向「桌面經典殼 + 獨立 Web profile 跑 DS Bot」的分工方式,用側邊欄一鍵補齊「啓動 Web 實例並打開帶 token 的 Safari 頁」這一步。進一步說明與 issue 見 GitHub:shiyoungwoo/dsh-classic-mode,目錄索引見 SkillHub。