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。

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

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

Xiaoye