dsh-plugin-archive-reader:在 DSH 裏只讀翻看 asar / zip 歸檔

前言

在 DeepSeek Harness(DSH)裏排查 Electron 應用或本地打包產物時,經常要打開 app.asar 或 .zip 看裏面的 README、配置或源碼片段。常見做法是臨時寫一段解析腳本:自己算 asar 頭部偏移、控制別把上萬條條目全塞進對話,還要避免誤寫磁盤。dsh-plugin-archive-reader 把「列條目、讀單條、按正則搜內容」收成三次模型側工具調用,且聲明爲零依賴、只讀、不聯網。

下面介紹它是什麼、怎麼裝、三個工具怎麼用,以及支持範圍與配置上限。

這是什麼

dsh-plugin-archive-reader 是維護者 XHXnb123 提供的 DSH Host 插件(GitHub 倉庫:XHXnb123/dsh-plugin-archive-reader)。在社區目錄 skillhub.cn 中歸類爲「聯網工具」;插件本體在 README 中明確爲不聯網、只讀,全部在本地用 Node 內置模塊解析歸檔。

插件向會話註冊三個工具:archive_list、archive_read、archive_grep。當前 package.json 版本爲 0.1.0,許可證 MIT,運行時要求 Node >= 20,並聲明 peerDependencies: { "@deepseek-ai/dsh": ">=0.2.0-rc.1" }。

核心功能

三個只讀工具

工具 用途 關鍵參數
archive_list 列條目,支持按正則/子串過濾 path、pattern?、limit?、format?
archive_read 讀單個條目的文本內容 path、entry、maxBytes?、format?
archive_grep 在所有文本條目裏按正則搜內容 path、pattern、maxMatches?、maxEntryBytes?、format?

共性行爲(來自 README):

  • 只打開歸檔讀數據,不寫盤、不修改任何 profile 狀態。
  • pattern 先按不區分大小寫的正則解釋;解析失敗(例如 x(1)自動退回子串匹配,返回值裏的 matcherKind 標明用了哪種方式。
  • archive_read 若檢測到二進制(開頭有 NUL 字節),只報告大小並設 binary: true,不返回內容。
  • entry 須精確匹配(也接受忽略大小寫的完全一致);找不到時會列出相近候選。

典型調用示例

README 給出的動機示例:在 app.asar 裏搜文檔標題,而不手寫偏移腳本:

archive_grep { path: "...\\app.asar", pattern: "版本兼容性與豁免" }
→ dsh/node_modules/@deepseek-ai/dsh-plugin-manager/README.zh.md:61: ### 版本兼容性與豁免

安裝與啓用

官方安裝方式如下(npm 名與本地路徑二選一;npm 尚未發佈時用本地路徑):

dsh plugin --profile web add dsh-plugin-archive-reader   # npm 安裝(尚未發佈時用下面的本地路徑)
dsh plugin --profile web add D:\path\to\dsh-plugin-archive-reader

裝完後完全重啓 dsh(不是僅刷新頁面),三個工具纔會出現在會話裏。

若本機 dsh 版本與 peerDependencies 不一致,Harness 兼容性檢查可能拒絕加載;可用 dsh plugin allow-version 寫精確版本豁免(README 說明插件本身不 import Harness 包,不依賴 dsh 安裝樹裏的包解析)。

支持範圍與限制

  • 支持:.asar(Electron 打包格式)與 .zip(store / deflate)。
  • 不支持:ZIP64、加密條目、tar/gz/7z/rar——遇到會明確報錯,不做靜默降級。
  • zip 條目名未聲明 UTF-8 時(歷史 CP437)按 UTF-8 盡力解碼,可能有亂碼。
  • 截斷按字節切,可能切在多字節字符中間,解碼後會出現替換字符。
  • archive_grep 逐條解壓掃描,受總掃描預算約束(默認 64 MB,觸頂時在 stoppedEarly 裏說明);大歸檔會有可感知的 CPU 佔用。
  • asar 中 unpacked 條目從 <歸檔名>.unpacked/ 目錄讀取。

配置(cordis.patch.yml)

cordis.patch.yml 裏該插件行的 config 支持下列字段(均有常量硬上限):

字段 默認 含義
maxEntries 200 archive_list 默認返回條目數
hardMaxEntries 5000 單次調用可請求的條目上限
maxReadBytes 65536 archive_read 默認返回字節數
hardMaxReadBytes 1048576 單次可請求的字節上限
maxMatches 50 archive_grep 默認命中行數
hardMaxMatches 500 單次可請求的命中上限
maxEntryBytes 4 MB archive_grep 跳過的單條目大小
maxScanBytes 64 MB archive_grep 的總掃描預算
maxLineChars 400 單行匹配文本的最大長度
timeoutMs 30000 三個工具的工具級超時

依賴與安全

  • 零運行時依賴:僅使用 node:fs、node:zlib;無安裝腳本、無 postinstall、無第三方包。
  • 不聯網:全部本地解析。
  • 只讀:README 稱代碼中無寫文件調用(fs.open(..., 'r') 與 fs.readFile)。

插件以當前 dsh 進程權限運行;安裝前建議自行查看倉庫源碼與 MIT 許可證,確認路徑與歸檔來源可信。DSH 社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

不想讀源碼時,倉庫提供 PLAIN.zh.md 一頁紙說明;Windows 可雙擊 verify.bat,或運行 node scripts/verify.mjs 做自測彙總。

適用場景

  1. 在 Harness 會話裏快速列出 Electron app.asar 或 zip 包內路徑,再定點讀 README / 配置。
  2. 用 archive_grep 在大歸檔裏按關鍵詞或正則定位行,避免把整包條目導入對話。
  3. 本地插件或打包產物排查:配合只讀策略,減少臨時腳本與誤寫風險。

不適合:需要 ZIP64、加密 zip、tar/gz/7z/rar,或必須在插件內聯網拉取歸檔的場景——本插件會直接報錯或不提供能力。

結尾

dsh-plugin-archive-reader 把 asar/zip 的列目錄、讀單文件、正則檢索收成三個 DSH 工具,零依賴、只讀、不聯網,並給出條目與掃描字節上限及超時配置。目錄頁:skillhub.cn/plugins/XHXnb123/dsh-plugin-archive-reader;源碼與詳細說明:github.com/XHXnb123/dsh-plugin-archive-reader。

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

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

小夜