dsh-plugin-ipynb:在 DSH 裏讀、導出並側邊欄預覽 Jupyter Notebook

前言

在 DeepSeek Harness(DSH)裏做數據分析或機器學習相關對話時,工作區裏常見 .ipynb。默認打開往往是整份 nbformat JSON,模型側若沒有專用工具,也只能靠通用讀文件把結構拆碎。下面介紹社區插件 dsh-plugin-ipynb(維護者 jcy0chenyuan0):Host 側給模型三個 notebook 工具,Client 側在右側邊欄把 .ipynb 渲染成可讀視圖,併兼容 nbformat 3 與 4。

這是什麼

一句話:DSH plugin: read/export Jupyter notebooks and preview .ipynb in the sidebar (nbformat 3/4).

插件分兩半協同:

半邊 作用
Client(側邊欄) 打開 .ipynb 時默認用 Notebook 渲染器,而不是原始 JSON。
Host(模型工具) 註冊 ipynb_read、ipynb_summary、ipynb_export 三個工具。

分類爲客戶端插件;源碼與說明見 GitHub 倉庫,社區目錄頁:skillhub.cn/plugins/jcy0chenyuan0/dsh-plugin-ipynb。DSH 生態是「一切皆插件」;社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

當前 package 版本爲 1.2.1,許可證 MIT。

側邊欄預覽

從文件樹、引用鏈接或 @ 引用打開任意 .ipynb,默認渲染器即爲 Notebook,無需額外點擊。工具欄「渲染器」下拉還可選 Code(語法高亮的 JSON)和 Plain text(原文)。

渲染要點(與 README 一致):

  • Markdown 單元格:使用平臺 MarkdownText(@deepseek-ai/dsh-client-ui-primitives),標題、列表、表格、鏈接等與聊天區一致;$…$ / $$…$$ 及 \(...\) / \[...\] 由 KaTeX 排版。
  • 代碼單元格:等寬字體,並顯示 In [n] 執行序號。
  • 輸出:stream 會剝 ANSI、處理 \r 覆蓋式輸出;text/html 中表格轉爲 DOM 表格,非表格 HTML 走 sandbox="" iframe;常見圖片 MIME 內聯;error 按錯誤色顯示 traceback;未支持的 MIME 會列出類型說明,而非空白。
  • 單條輸出超過 30000 字符會截斷並標註;非法 JSON 或無法 UTF-8 解碼時顯示說明卡,並提示改用 Plain text。
  • 樣式僅使用主題 token(--dsw-alias-*),明暗主題跟隨 DSH。

掛載通過 documentPreviews.register 註冊擴展名 ipynb,loading: "bytes-complete"(整文件讀入後再渲染)。純文本兜底 extensions: [],因此默認選中的是 Notebook 而非 Plain text。

Host 側三個工具

相對路徑按會話工作目錄解析,也接受絕對路徑。

// ipynb_read
{ "path": "analysis/eda.ipynb", "include": ["code", "markdown"], "limit": 20 }
{ "path": "eda.ipynb", "includeSource": false }

// ipynb_summary
{ "path": "eda.ipynb", "previewChars": 120 }

// ipynb_export
{ "path": "eda.ipynb", "format": "markdown", "out": "exports/eda.md" }

ipynb_export 的 out 須落在會話工作目錄內(拒絕 .. 逃逸);read-only 沙箱下一律拒絕寫盤。Host 側以讀 notebook 爲主,唯一寫盤能力是顯式指定 out 的導出。

兼容性方面:nbformat 4 與 3 並存(含 worksheets[].cells、v3 字段歸一化);source 字符串與行數組兩種形態;UTF-8 BOM 剝離;未知 output_type 降級並在 warnings 說明;JSON 非法、路徑不存在、超過體積上限(默認 32 MB)等分別報錯,不返回半成品。lib/index.js 僅依賴 Node 內置模塊,不依賴 Jupyter 內核。

安裝與啓用

倉庫不包含本機絕對路徑:cordis.patch.yml 由安裝腳本按當前目錄生成(已在 .gitignore)。

  1. 將倉庫放到本機任意目錄(目錄頁與 GitHub 提供源碼地址,換機器時按 README 自行獲取副本)。
  2. 在該目錄首次運行安裝腳本:Windows 用 install.ps1,macOS / Linux 用 node install.mjs。
  3. 在 DSH 中執行 bundle 安裝(路徑替換爲本目錄絕對路徑):
plugin_manager install_bundle  file:<本目錄的絕對路徑>

裝完後在 GUI「設置 → 插件」中可見,可整體啓用或停用。修改 lib/index.js 或 client.js 立即生效;僅改 cordis.patch.yml 時需重新執行安裝流程。

運行環境:Windows / macOS / Linux;Node 20+(DSH 自帶);無需 npm install。

可選 Host 配置(寫入生成的 cordis.patch.yml,省略則用默認):

- insert:
    - id: plugin-ipynb-readonly-1
      name: '<本目錄>\\lib\\host.js'
      config:
        maxBytes: 33554432
        maxSourceChars: 20000
        maxOutputChars: 4000
        cwd: '<可選:工作區絕對路徑>'

維護者 README 中強調:bundle 補丁應掛載 lib/host.js 而非 lib/index.js,否則 ClientModuleRegistry 可能永久緩存錯誤的包元數據,側邊欄渲染器會靜默消失,需重啓 DSH 才恢復。

自測(零依賴):

node test/smoke.mjs
node test/client-smoke.mjs

README 記載 Host 自測 103 項、Client 自測 65 項。

適用場景與注意

適合:在 DSH 會話裏讓模型結構化讀取 notebook 單元格與輸出、快速概覽目錄、導出 Markdown / Python / 純文本;同時在側邊欄人工覈對 Markdown、表格輸出與圖片,而不必盯 JSON。

安全與權限:插件以當前 DSH 進程權限運行;Client 側 HTML 輸出表格轉 DOM 或沙箱 iframe,不聯網、不起子進程。安裝前請自行審閱源碼與 MIT 許可證。ipynb_export 寫文件受會話沙箱與工作目錄圍欄約束。

Client 側只 require 平臺種子模塊表中的 react 與 @deepseek-ai/dsh-client-ui-primitives;若 Markdown 組件降級,notebook 頭部會出現「公式未渲染」告警 chip,而不再靜默退回極簡渲染。

結尾

dsh-plugin-ipynb 把「模型讀 notebook」和「人在側邊欄看 notebook」放在同一插件裏,並覆蓋 nbformat 3/4 與常見輸出類型。需要安裝步驟與工具參數時,以 GitHub README 爲準;瀏覽與收藏插件見 SkillHub 目錄頁。

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

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

小夜