前言¶
DSH 的擴展方式圍繞插件展開。科研用戶通常需要在文獻檢索、參考文獻管理、寫作與評審等工具之間做選擇,再把選中的插件安裝到當前使用的 profile。
dsh-research 是一個科研插件市場。它在 DSH 的 Settings sidebar 中提供 Research plugins 頁面,列出用於文獻檢索、參考文獻管理、寫作與評審的精選插件,並提供 Install 按鈕寫入當前運行的 profile。它是獨立維護的目錄站點,不是官方應用商店。
這是什麼¶
dsh-research 的 package.json author 字段爲 ai4scholar,許可證爲 MIT。
它解決的問題是:把科研相關插件集中到一個設置頁面,並讓設置面板和瀏覽器目錄使用同一份 market.json,避免兩處列表漂移。
核心功能¶
- 在 Settings sidebar 提供 Research plugins 頁面,列出用於文獻檢索、參考文獻管理、寫作與評審的精選插件。
- 提供 Install 按鈕,直接寫入當前運行的 profile。
- 目錄位於
dsh-research.com,瀏覽器列表在https://dsh-research.com/plugins/。 - 面板與
https://dsh-research.com/plugins/使用同一份market.json,列表不會漂移。 - 通過 allowlist、same-origin、one at a time 和 profile 參數約束安裝行爲。
- 支持通過
cordis.patch.yml覆蓋 id 爲research-market的配置行。 catalogUrl可指向實現 DSH Community Market provider contract 的端點。
安裝與啓用¶
下面先安裝 dsh-research 本身:
dsh plugin --profile web add dsh-research
該命令把插件裝入 web profile。安裝後重啓 dsh web,然後打開:
Settings → Research plugins
新安裝的插件需要重啓後才能加載。
典型用法¶
瀏覽並安裝目錄中的插件¶
打開 Research plugins 頁面後,選擇目錄中列出的插件並點擊 Install。面板會執行當前 profile 的 dsh plugin add 命令。安裝目標取自該 host 啓動時的 --profile,因此測試 profile 不會修改真實 profile。
將面板設爲只讀¶
如果只想瀏覽,不希望頁面觸發安裝,可以從 profile 的 cordis.patch.yml 覆蓋 id 爲 research-market 的配置:
- id: research-market
config:
allowInstall: false
cordis.patch.yml 的 patch 會替換整個 config。覆蓋時需要重新聲明要保留的每個 key;上面的示例只展示 allowInstall: false。
指向自定義市場¶
將 catalogUrl 指向自定義端點後,面板可以列出自己的市場。該端點需要實現 DSH Community Market provider contract。
安裝行爲約束¶
- allowlist:瀏覽器可以請求任意包名,但只有目錄中列出的包會被啓動;其他包名不會被啓動。
- same-origin:避免 state-changing route 被任意頁面觸發,從而避免從已訪問站點向 profile 安裝包。
- one at a time:避免兩個
dsh plugin add併發運行導致package.json競爭並造成 profile 半寫入。 - profile:安裝目標取自 host 啓動時的
--profile。
安全注意¶
安裝會調用當前 DSH 主機可用的 dsh 命令,並影響當前 profile。插件以當前 dsh 進程權限運行,安裝前應檢查插件源碼與許可證。dsh-research 本身的許可證爲 MIT;目錄中的其他插件需按其目錄條目和許可證單獨判斷。
實現細節¶
進程層改編自 dsh-market(MIT)。其說明中記錄了以下運行環境細節:
ctx.shell無法寫入 profile。- macOS 應用從 Dock 啓動時,可能沒有 Homebrew PATH。
- pnpm v10 在無 TTY 場景下可能需要設置
CI。 - Windows 下
dsh是.cmdshim。
結尾¶
dsh-research 的價值在於把科研插件的瀏覽、安裝和配置收進 DSH 設置,並用同一份目錄文件保持面板與瀏覽器列表一致。
目錄頁:
https://dsh-research.com/plugins/
GitHub:
https://github.com/dsh-research/dsh-research