dsh-android-portability:发布前静态检查 DSH 插件能否在 DSHA 上运行

前言

DeepSeek Harness(DSH)生态里,很多插件在桌面 Linux 或 Windows 上开发、调试通过后就会上架或分享给他人。DeepSeek Harness for Android(DSHA)的运行环境却是手机里的 Linux arm64 + glibc proot 容器,不是开发机上的路径、Shell 或 CPU 架构。常见结果是:依赖里带了要编译的原生模块、源码写死 C:\Users\... 或只下载 x64 二进制,在电脑上一切正常,装到 DSHA 后直接起不来。

在真正安装之前做一轮只读源码的静态体检,可以把这类问题提前标出来。下面介绍社区插件 dsh-android-portability(维护者 Liaoyun666):用 17 条规则扫描插件目录,给出 文件:行、原文片段和改法建议,不执行代码、不 npm install、不联网。

这是什么

dsh-android-portability 是 DSH 体系下的静态可移植性检查工具,面向「插件能否在 DSHA(Linux arm64 + glibc,proot 容器)上跑起来」这一问题。它只读 package.json 与源码文本,对照规则表输出阻断、警告或提示,并支持在 DSH 会话里通过工具调用,或在 CI 里单独用 Node 跑 CLI。

插件在 SkillHub 目录中的分类为 admin-security;仓库 package.json 里 DSH Hub 展示分类为「开发工具」「质量检查」,提供表面为 tool。许可证 MIT,运行时要求 Node >= 20,当前资料中版本为 1.0.0。DeepSeek Harness 社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

它查哪三类常见问题

README 归纳了搬到手机上最常见的三类「死法」,也是规则设计的背景:

  1. 原生模块依赖:如 sharp、better-sqlite3、node-pty 等,arm64 预编译包常缺失,容器内又往往没有完整编译工具链。
  2. Windows 专用路径与环境:写死 C:\...、%APPDATA%、powershell.exe 等,在安卓 proot 容器里不存在。
  3. 架构写错:下载或分支逻辑只认 x64,在 arm64 上装错二进制导致崩溃。

静态扫描不能覆盖运行时 API 行为差异;边界在 README「它不做什么」一节已说明。

核心功能

DSH 工具

安装后可在任意会话里让模型协助检查,或显式调用:

  • dsh_check_android_portability:检查单个插件目录。
  • dsh_scan_profile_android:批量扫描 /root/.dsh/profiles/*/node_modules 下已安装的插件。

工具声明为只读插件目录下的 package.json 与源码文本,不执行插件代码,network 能力为空。

17 条规则(概要)

规则分 D 组(依赖与清单) 与 S 组(源码)。注释行不参与匹配,避免把「不要用 C:\ 路径」这类说明误报。

D 组

号 查什么 级别
D1 dependencies 中的原生模块(sharp、better-sqlite3、node-pty 等) 阻断
D2 optionalDependencies 仅有 win32/darwin 二进制,缺 linux-arm64 阻断
D3 安装脚本使用 node-gyp / node-pre-gyp / prebuild-install / cmake-js 阻断
D4 包内带 binding.gyp 或 .node(.wasm 仅提示) 阻断
D5 os / cpu 排除 linux 或 arm64 阻断
D6 files 白名单漏掉入口文件 阻断
D7 engines.node 高于容器 Node 版本 阻断
D8 开发依赖中含原生模块 提示

S 组

号 查什么 级别
S1 Windows 绝对路径(C:\、E:\ 等) 阻断
S2 Windows 环境变量(如 %APPDATA%) 阻断
S3 调用 cmd.exe / powershell 阻断
S4 引用 .bat / .ps1 / .exe 警告
S5 仅 win32/darwin 分支,其它平台走 else 警告
S6 下载逻辑中出现 x64 警告
S7 写死 /bin/bash(容器内多为 sh) 警告
S8 直接 require('./x.node') 阻断
S9 child_process 调用外部程序(PATH 很短) 提示

完整说明可在 CLI 中列出:

node tools/cli.js --list-rules

误报与忽略

规则定义、测试样本里会故意包含坏例子。可用 .portabilityignore(精确路径、目录前缀、通配符)或在 package.json 中配置,两处叠加生效:

{
  "dsh": {
    "androidPortability": {
      "ignore": ["generated/"]
    }
  }
}

安装与启用

官方安装命令如下(来自仓库 README,注意命令前缀为 dsha-plugin):

dsha-plugin install Liaoyun666/dsh-android-portability

装完后即可在会话中使用上述两个工具。插件随当前 DSH 进程权限运行;安装前应自行审阅仓库源码与 MIT 许可证,确认符合你的安全策略。本工具本身不联网、不执行被检插件,适合对陌生仓库做只读扫描,但仍建议在可信来源安装本检查插件。

兼容性(来自 package.json):dsh >= 0.1.5-rc.1,node >= 20。

典型用法

在 DSH 里

安装完成后,可直接在对话中说明「帮我查一下某个插件目录能不能装到手机上」,或调用 dsh_check_android_portability / dsh_scan_profile_android。

命令行与 CI

可脱离 DSH 单独运行,便于发布前或 GitHub Actions 集成:

node tools/cli.js ./my-plugin              # 人类可读报告
node tools/cli.js ./my-plugin --json       # JSON 输出
node tools/cli.js ./my-plugin --github     # GitHub Actions 注解(标到对应行)
node tools/cli.js . --verbose              # 每组列出全部命中(默认每组 3 处)
node tools/cli.js . --strict               # 警告也视为失败

退出码:0 表示可装,1 表示有问题,2 表示用法错误。

对本插件目录自检(开发文档中的惯例):

node tools/cli.js .

适用场景与注意

适合谁:编写或维护 DSH 插件、计划在 DSHA 上分发的开发者;需要在 CI 里门禁「安卓可移植性」的仓库维护者。

它不做的:不自动改代码;不替代真机或容器内联调;扫不到纯运行时才会暴露的问题。

权限与安全:作为 DSH 插件安装时,遵循 DSH「一切皆插件」的模型——以当前 harness 进程权限读取你指定的插件路径。对第三方插件做体检前,建议先确认目标目录来源与许可证;本工具设计为静态读文本,但不改变「只安装你信任的工具」这一基本原则。

结尾

经过上面的步骤,你可以在发布或安装前用 dsh-android-portability 对 DSHA 环境(Linux arm64 + glibc proot)做一次静态对齐:17 条规则、可忽略的误报路径、CLI 与 DSH 双入口。目录页与源码分别以 SkillHub 与 GitHub 为准:

  • 目录页:https://www.skillhub.cn/plugins/Liaoyun666/dsh-android-portability
  • GitHub:https://github.com/Liaoyun666/dsh-android-portability
羽毛球分组比赛记分
小程序二维码

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

Xiaoye