dsh-monaco:爲 DeepSeek Harness 插件提供本地 Monaco 編輯器分發

前言

DeepSeek Harness(DSH)的瀏覽器插件通道將每個插件打包爲單個文件(/plugins/<id>/client.js),且動態打包器不會生成額外的 chunk 或資源。Monaco 編輯器是一種多文件分發——包含 loader、按語言分組的模塊和樣式表——因此無法通過插件 channel 送達。

dsh-monaco 插件掛載其自身的路由來提供這些文件。編輯器保持本地化:運行時無需 CDN,且工具讀取操作員源碼樹時不會出現第三方域名。

安裝與啓用

通過官方命令安裝插件,安裝後重啓 dsh 使分發生效。

dsh plugin --profile web add github:DevViking-Persike/dsh-monaco

安裝完成後,Monaco 編輯器分發將掛載在 /monaco 路徑下。

典型用法

Monaco 通過其自身的 AMD loader 發佈。在客戶端插件中,按以下順序加載並配置:

// 1. 加載 loader 腳本
await loadScript('/monaco/loader.js')

// 2. 配置路徑,指向掛載點
window.require.config({ paths: { vs: '/monaco' } })

// 3. 加載編輯器主模塊並創建實例
window.require(['vs/editor/editor.main'], () => {
  window.monaco.editor.create(host, { value: '', language: 'typescript' })
})

配置

通過 route 字段自定義掛載路徑。默認爲 /monaco。

- id: dsh-monaco
  name: 'dsh-monaco'
  config:
    route: /vendor/monaco

安全性與限制

插件在服務靜態字節時不會註冊工具、提示部分或會話事件,因此不消耗模型上下文。

安全機制包括:
* 路徑遍歷防護: 每個請求路徑均解析到分發根目錄並進行檢查。resolve 會先摺疊 ..,因此包括百分號編碼在內的逃逸嘗試都會被包含性測試捕獲。
* 錯誤處理: 根目錄下讀取失敗返回 404,與未知路徑相同,瀏覽器無法通過錯誤區分文件是否存在。
* 方法限制: 僅支持 GET 和 HEAD,其他方法返回 405。
* 內容類型: 內容類型表中未匹配的擴展名默認返回 application/octet-stream,防止瀏覽器將文件誤判爲腳本。

已知限制:
* Web Workers: 插件不配置 Monaco web workers。想要使用它們的消費者必須提供自己的 worker 入口並設置 MonacoEnvironment。
* 緩存: 響應包含一週不可變的 cache-control。分發由已安裝的包版本固定,但 Monaco 升級需要緩存破壞(更改路由)或硬刷新。
* 分發: 路由服務完整分發,包括頁面可能從不加載的語言模塊。

總結

該插件解決了 DSH 插件在頁面內使用真實代碼編輯器時需要 CDN 的痛點。通過在 host HTTP 路由上提供 Monaco 編輯器分發,它保持了編輯器在本地。

  • 目錄頁: https://www.skillhub.cn/plugins/DevViking-Persike/dsh-monaco
  • GitHub: https://github.com/DevViking-Persike/dsh-monaco
羽毛球分组比赛记分
小程序二维码

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

小夜