dsh-main-file-tabs:把側邊欄文件抬到主工作區頁籤編輯

前言

在 DeepSeek Harness(DSH)裏,右側邊欄適合快速打開、預覽項目文件;主工作區通常留給會話與對話。長文檔、寬表格或複雜代碼在窄欄裏編輯會喫力,若把主工作區整塊換成編輯器,又容易丟掉會話頭部和邊欄上下文。

DSH Main File Tabs(npm 包名 dsh-main-file-tabs)是社區維護者 l741589 提供的客戶端插件:把邊欄裏已在預覽的文件以頁籤形式打開到主工作區,並與側邊欄共用同一份文檔與同一套 TextEditor,實現約 45ms 量級的雙向文本同步,以及 Markdown 分屏編輯/預覽。插件通過 DSH 的 Conversation View 承載「文件」工作區,不替換整個會話界面。

這是什麼

  • 定位:面向 DSH Web / Desktop 的純 JavaScript 客戶端插件,零構建,安裝後無需編譯步驟。
  • 分類:客戶端(Client 端註冊 UI 與 mainFileTabs 服務;Host 半端爲空實現)。
  • 許可證:MIT(見倉庫 LICENSE)。
  • 生態說明:插件可在 SkillHub 目錄頁 查閱簡介;社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。DSH 本身遵循「一切皆插件」的擴展方式。

核心功能

下面介紹 README 中已明確列出的能力(衝突處以倉庫文檔爲準)。

打開與頁籤

  • 一鍵打開:右側邊欄文件工具欄右上角、頁籤「…」菜單,或原生預覽工具欄。
  • 主工作區支持頁籤切換、關閉、中鍵關閉;右鍵可關閉當前、全部、左側全部、右側全部;文件圖標與側邊欄一致。

編輯與渲染

  • 實時雙向同步:側邊欄與主工作區各掛一個 CodeMirror 視圖,通過 view.dispatch 轉發變更;Markdown 預覽隨編輯刷新。
  • 與側邊欄一致:複用 dsh-better-sidebar 註冊的 TextEditor 與 viewer 註冊表,保留語法高亮、Markdown 預覽、Mermaid、TOC、圖片解析等。
  • Markdown / HTML / JSONL 支持「編輯 / 預覽 / 分屏」。
  • 圖片、PDF、HTML 等可從側邊欄以只讀預覽方式打開到主工作區;Office 文檔仍在側邊欄預覽。

會話佈局

  • 會話頭部新增 「文件」 View;點 「對話」 可回到聊天,右側邊欄與會話頭部保留。

擴展

  • Client 服務 mainFileTabs:其他插件可 openFile、監聽 onDidChange / onDidOpen / onDidClose 等,並查詢 getOpenFiles、getText(詳見 GitHub README)。
  • 界面文案跟隨 DSH locale,支持中英雙語。

環境要求

安裝前請覈對版本依賴(來自 README Requirements):

  • DSH 0.2.1-rc.2 或更高,且 profile 帶有 Web UI(例如 desktop)。
  • dsh-better-sidebar 0.28.x(本插件複用其 TextEditor 與 viewer 註冊表)。
  • 平臺:DSH Desktop 支持的操作系統(Windows / macOS / Linux);Web 端 badge 標明 Web / Desktop。

安裝與啓用

從 npm 安裝(推薦)

把 desktop 換成你實際使用的 profile 名稱:

dsh plugin --profile desktop add dsh-main-file-tabs

安裝完成後完全退出並重新打開 DSH(桌面版若縮到托盤,需從托盤退出)。重新打開後按 Ctrl+R / Cmd+R 刷新頁面。README 說明:安裝通常不會執行構建腳本,一般不會出現 approve-builds 提示。

從 GitHub 安裝(備選)

dsh plugin --profile desktop add github:l741589/dsh-main-file-tabs

適合固定到某個 commit、或尚未有 npm 版本的場景。

確認是否生效

重啓後在右側邊欄打開一個 .md 文件,工具欄右上角應出現 「在主工作區打開」。若未出現:

  1. 確認 dsh-better-sidebar 已安裝並在當前 profile 啓用;
  2. 使用頁籤「…」菜單中的「主工作區打開」;
  3. 在 DevTools Console 查看是否有 [dsh-main-file-tabs] 前綴日誌。

安全與權限:插件以當前 DSH 進程權限運行,安裝前建議閱讀 源碼倉庫 與 MIT 許可證,自行評估是否納入工作環境。

典型用法

經過上面的安裝步驟後,可按 README 使用 一節操作:

  1. 在右側邊欄打開文本類文件(.md、.txt、代碼文件等)。
  2. 點擊 「在主工作區打開」,或頁籤菜單中的同名項。
  3. 會話頭部切換到 「文件」 View,文件以頁簽出現在主工作區。
  4. 在任一側編輯,另一側同步;Markdown 預覽隨輸入更新。
  5. 對 Markdown / HTML / JSONL 可使用工具欄 「分屏」:左側編輯、右側預覽。
  6. 需要回到對話時,點文件工作區右上角 「對話」;邊欄與會話頭部仍在。

其他 Client 插件可通過服務 API 編程打開文件,例如:

const api = ctx.get('mainFileTabs')
const handle = api.openFile({
  path: 'docs/design.md',
  line: 12,
})
await handle.ready

openFile 若目標文件已在側邊欄打開且含未保存文本,會優先採用側邊欄實時文本而非磁盤舊內容。完整字段與事件說明見倉庫 插件 API 章節。

工作原理(簡要)

插件不復制編輯器實現,而是:

  • 在 conversation.view 註冊文件工作區,避免佔用全局 main panel;
  • 對兩側 CodeMirror 做最小差異同步,並同步 TextEditor 的 Markdown draft state,使遠程更新時預覽也能刷新而不重掛編輯器。

適用場景與注意

適合

  • 在 DSH 會話裏邊聊邊看/改項目文檔或代碼,又希望主區域有足夠寬度;
  • 需要 Markdown 分屏預覽,且希望與側邊欄能力一致;
  • 編寫 Client 插件,需要監聽主工作區/側邊欄同一文件的文本變化。

已知限制(摘自 README)

  • 可編輯頁籤主要針對 fsRead 文本格式;圖片、PDF、HTML 在主工作區爲只讀預覽。
  • 主工作區與側邊欄交替保存同一文件時,可能出現保存衝突;側邊欄可 重新加載。
  • 同步實現依賴 dsh-better-sidebar 內部結構,其大版本變更可能導致同步退化,但不影響側邊欄原有功能。
  • 未保存草稿僅在瀏覽器內存;刷新頁面會丟失;關閉髒頁籤會確認。
  • 通過 API 爲非當前 sessionId 打開文件時,頁籤歸屬該會話,但不會自動切換會話。

結尾

dsh-main-file-tabs 解決的是「邊欄夠用、主區不夠寬」與「佔滿主區又丟會話佈局」之間的矛盾:同一份文檔、同一套編輯器,在主工作區以頁籤繼續編輯,並保留 DSH 會話與右側邊欄。

羽毛球分组比赛记分
小程序二维码

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

小夜