前言¶
在 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 文件,工具欄右上角應出現 「在主工作區打開」。若未出現:
- 確認
dsh-better-sidebar已安裝並在當前 profile 啓用; - 使用頁籤「…」菜單中的「主工作區打開」;
- 在 DevTools Console 查看是否有
[dsh-main-file-tabs]前綴日誌。
安全與權限:插件以當前 DSH 進程權限運行,安裝前建議閱讀 源碼倉庫 與 MIT 許可證,自行評估是否納入工作環境。
典型用法¶
經過上面的安裝步驟後,可按 README 使用 一節操作:
- 在右側邊欄打開文本類文件(
.md、.txt、代碼文件等)。 - 點擊 「在主工作區打開」,或頁籤菜單中的同名項。
- 會話頭部切換到 「文件」 View,文件以頁簽出現在主工作區。
- 在任一側編輯,另一側同步;Markdown 預覽隨輸入更新。
- 對 Markdown / HTML / JSONL 可使用工具欄 「分屏」:左側編輯、右側預覽。
- 需要回到對話時,點文件工作區右上角 「對話」;邊欄與會話頭部仍在。
其他 Client 插件可通過服務 API 編程打開文件,例如:
const api = ctx.get('mainFileTabs')
const handle = api.openFile({
path: 'docs/design.md',
line: 12,
})
await handle.ready
openFile 若目標文件已在側邊欄打開且含未保存文本,會優先採用側邊欄實時文本而非磁盤舊內容。完整字段與事件說明見倉庫 插件 API 章節。
工作原理(簡要)¶
插件不復制編輯器實現,而是:
- 在
conversation.view註冊文件工作區,避免佔用全局mainpanel; - 對兩側 CodeMirror 做最小差異同步,並同步
TextEditor的 Markdowndraftstate,使遠程更新時預覽也能刷新而不重掛編輯器。
適用場景與注意¶
適合
- 在 DSH 會話裏邊聊邊看/改項目文檔或代碼,又希望主區域有足夠寬度;
- 需要 Markdown 分屏預覽,且希望與側邊欄能力一致;
- 編寫 Client 插件,需要監聽主工作區/側邊欄同一文件的文本變化。
已知限制(摘自 README)
- 可編輯頁籤主要針對
fsRead文本格式;圖片、PDF、HTML 在主工作區爲只讀預覽。 - 主工作區與側邊欄交替保存同一文件時,可能出現保存衝突;側邊欄可 重新加載。
- 同步實現依賴
dsh-better-sidebar內部結構,其大版本變更可能導致同步退化,但不影響側邊欄原有功能。 - 未保存草稿僅在瀏覽器內存;刷新頁面會丟失;關閉髒頁籤會確認。
- 通過 API 爲非當前
sessionId打開文件時,頁籤歸屬該會話,但不會自動切換會話。
結尾¶
dsh-main-file-tabs 解決的是「邊欄夠用、主區不夠寬」與「佔滿主區又丟會話佈局」之間的矛盾:同一份文檔、同一套編輯器,在主工作區以頁籤繼續編輯,並保留 DSH 會話與右側邊欄。