dsh-sidebar-remote

前言

在 DSH(DeepSeek Harness)的插件化架構中,側邊欄與 SSH 遠程會話的集成通常需要分別處理。dsh-sidebar-remote 插件通過聚合 dsh-better-sidebar 和 @dsh-ssh/dsh-ssh,提供了一套單一可安裝的解決方案。它解決了遠程工作區文件操作、終端和 Git 需要在遠端執行,而本地工作區側邊欄保持原有行爲的需求。

插件介紹

dsh-sidebar-remote 是一個 DSH Web 聚合插件。它由 zijun-T 維護。其核心價值在於將 SSH 遠程工作區的功能(文件、預覽、傳輸、終端、Git)完全下沉到遠端執行,同時通過插件機制保持本地側邊欄的一致性。

核心功能

插件提供以下能力:
* 文件樹 / 瀏覽:通過 SFTP readdir 和 stat 探測。
* 讀取 / 編輯 / 保存:通過 Sftp.readText、applyLiteralEdit 和 writeFileAtomic。
* 上傳 / 下載:使用 Sftp.createWriteStream / createReadStream,失敗時自動清理。
* 預覽:通過 /sidebar/remote/html/<sid>/<path> 路由提供。
* 終端:通過 SshConn.shell PTY 實現,支持 30s 重連優雅期。
* Git:通過 git -C <cwd> --no-pager -c color.ui=false 在遠端執行。

安裝與配置

插件通過 dsh plugin 命令安裝,安裝後 cordis.patch.yml 會自動掛載聚合插件。

  1. 本地路徑安裝:
    dsh plugin --profile web add /path/to/remote-sidebar-plugin
  1. Tarball 安裝(推薦用於換機部署):
    先在源機器打包:
    npm pack
再在目標機器安裝:
    dsh plugin --profile web add ./dsh-sidebar-remote-0.2.1.tgz
  1. NPM 安裝:
    dsh plugin --profile web add dsh-sidebar-remote

移除插件:

dsh plugin --profile web remove dsh-sidebar-remote

依賴要求

運行本插件需滿足以下環境:
* DSH: 0.1.1-rc.2
* Cordis: ^4.0.1
* Node: >=22
* 上游插件: dsh-better-sidebar (0.17.1), @dsh-ssh/dsh-ssh (0.1.3)

使用與更新

安裝後行爲:
插件無額外 UI,無獨立入口。安裝後側邊欄會自動區分本地與遠程會話。本地會話不建立 SSH 連接,沿用原 dsh-better-sidebar 行爲。

更新注意事項:
1. 更新後必須重啓 dsh web 進程(Host 半邊無熱重載)。
2. 瀏覽器端需硬刷新(Ctrl+Shift+R)以避免沿用舊 client bundle。

更新命令:

# 使用 pnpm 更新 git 依賴
cd ~/.dsh/profiles/web && pnpm update dsh-sidebar-remote

提示詞路徑改寫 (0.2.1+)

遠程會話的 cwd 在模型提示詞的 sandbox:policy 中原爲佔位符。插件在組裝期將其改寫回真實遠程路徑。

  • 主路徑改寫:通過 deepseek-harness-zh_pro 的 registerAssembleRewriter 註冊(運行於翻譯之後)。
  • 兜底改寫:agent/pre-step 監聽器對 decision.messages 做同樣替換。
  • 映射構建:由 remoteCwdMapOf() 構建,基於 ctx.sessions.list() 返回的活會話數組。

驗證方式:遠程會話對話的上下文注入中 sandbox:policy 顯示真實路徑,Host 日誌輸出 rewriter: replaced "<佔位符>" → "<真實路徑>"。

換機部署

客戶端在掛載時會向 GET /sidebar/remote/root 取回權威佔位根,一份 bundle 可服務任意部署。

遷移配置:
遷移 ~/.dsh/settings.yaml 即可帶走主機配置與側邊欄偏好。注意私鑰和 known_hosts 不會自動遷移,需在新設備上手動複製 ~/.ssh/* 或通過 TOFU 對話重建。

驗證

插件包含自動化驗證腳本,無需網絡與遠端主機即可運行部分測試。

npm install
npm run typecheck
npm test             # 102 tests / 14 suites
npm run build
npm pack --dry-run

真機端到端驗證:

DSH_ORIGIN=http://127.0.0.1:3080 \
DSH_HOST_ID=<settings.yaml 裏的主機 id> \
DSH_REMOTE_PATH=/path/on/remote \
DSH_EXPECT_ENTRY=<該目錄下必然存在的名字> \
  npm run verify:live    # 14 項斷言
羽毛球分组比赛记分
小程序二维码

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

小夜