dsh-plugin-observatory:DSH 插件安装前审计与有界 Loader 观察

前言

DSH 的插件模型强调「一切皆插件」。社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,不应理解为官方应用商店。

对 DSH 插件作者、维护者和工具链建设者来说,安装前最关心的问题通常很具体:这个本地插件是否声明了 package.jsondsh.bundle.patch?DSH、Cordis、Node 版本范围是否兼容?运行时依赖是否声明?patch 是否会带来重复 id、路径包含问题或未求值的 !!js 表达式?

dsh-plugin-observatory 为这类问题提供一个只读检查点:先做安装前静态审计,再看激活后的有界 Loader 生命周期观察。

这是什么

dsh-plugin-observatoryCMSKL 维护,许可证为 MIT。当前首个 stable release 是 0.1.0

它提供两个只读工具:

  • plugin_audit:检查本地插件包的 package.json 与声明的 dsh.bundle.patch
  • plugin_observe:投影当前非 group Loader 条目,并展示自该插件激活后观察到的有界 root-Fiber 转换。

它解决的核心问题是:在插件进入 DSH profile 之前,先给出一个确定性、机器可读的兼容性信号;激活后,也保留一个有限的观察入口,而不是让插件状态完全不可见。

核心功能

plugin_audit:静态兼容性审计

plugin_audit 检查一个本地包的 package.json 和声明的 dsh.bundle.patch

它覆盖以下检查项:

1、manifest 完整性
2、DSH、Cordis、Node 版本范围
3、运行时依赖声明
4、安装生命周期脚本
5、patch 行
6、重复 id
7、路径包含关系
8、未求值 !!js 表达式

审计结果返回确定性、机器可读报告。结论可以是:

  • compatible
  • needs-review
  • incompatible

plugin_audit 只读取 package 元数据和声明的 patch。它不导入目标 JavaScript,也不求值 patch 表达式。因此它适合作为安装前信号,而不是目标插件的完整运行时测试。

plugin_observe:有界 Loader 生命周期观察

plugin_observe 投影当前非 group Loader 条目,并展示自该插件激活后观察到的有界 root-Fiber 转换。

它是进程本地的、有界的。用于查看当前过程中的 Loader 状态和保留的转换,不作为 Loader 当前状态的第二个权威来源。

PluginObservatoryService

PluginObservatoryService.audit 将同一静态审计暴露给可信插件。

snapshot 返回脱离的即时生命周期报告。

assertObservedTransition 支持 invariant companion。

读取与解析边界

package 与 patch 读取为字节有界,要求有效 UTF-8,解析符号链接,并保持在允许列表根下。

解析后的 patch 图也受嵌套深度和对象/数组访问上限约束。循环 YAML 别名会生成 incompatible 报告,而不是进入递归耗尽路径。

报告不带时间戳,并按确定性顺序排序 findings。

安装与启用

未指定版本安装只解析到 stable release:

dsh plugin --profile demo add dsh-plugin-observatory

如果要固定到首个 stable release:

dsh plugin --profile demo add dsh-plugin-observatory@0.1.0

安装后可以查看组合配置:

dsh --profile demo --dump-config

如需移除:

dsh plugin --profile demo remove dsh-plugin-observatory

版本策略上,0.1.0 是首个 stable release,并作为 npm latest dist-tag 发布。未来 release candidates 保留在 next。未指定版本安装只解析到 stable release。

典型用法

先安装:

dsh plugin --profile demo add dsh-plugin-observatory@0.1.0

然后让模型审计一个本地插件包:

Use plugin_audit on the local package at /path/to/my-plugin. Return the verdict, issues, and inserted bundle entries.

这一步会返回审计结论、问题项,以及插入的 bundle entries。

如果要查看当前运行时中的 Loader 状态:

Use plugin_observe and list the non-group Loader entries and their retained transitions.

检查组合配置:

dsh --profile demo --dump-config

移除插件:

dsh plugin --profile demo remove dsh-plugin-observatory

配置与限制

默认配置包含以下项:

  • allowedRoots:包目录必须解析到允许列表根下。
  • maxManifestBytes:默认 262144,最大接受值为 32 MiB
  • maxPatchBytes:默认 1048576,最大接受值为 32 MiB
  • maxPatchDepth:默认 64,最大接受值为 256
  • maxPatchNodes:默认 10000,最大接受值为 100000
  • maxObservedEntries:默认 256,保留 Loader entry 历史上限。
  • maxTransitionsPerEntry:默认 64,单个 Loader entry 保留的近期转换上限。

这些限制的目标是保持审计和观察过程可预测:读取有边界,解析有深度和节点上限,观察条目和转换也有保留上限。

环境与发布

package.jsonengines 要求:

node ^22.19.0 || >=24.0.0

所需兼容性矩阵在 Node 22.19.0 和 Node 24 上运行 DSH 0.1.0-rc.6

运行时 DSH 和 Cordis 包是 peer dependencies。开发使用已发布版本,而不是官方 Harness 仓库 workspace links。

从 Git checkout 安装需要 pnpm build authorization,因为 source package 使用 prepare 编译 TypeScript。npm package 和 attached GitHub Release tarball 包含预构建 lib/ 文件。

适用场景与注意

适合以下使用者:

  • DSH 插件作者
  • DSH 插件维护者
  • 构建 DSH 工具链的人
  • 需要在 profile 安装前检查本地插件声明的开发者

需要注意:

1、plugin_audit 是静态检查,只读取声明的 package 元数据和 patch,不导入目标 JavaScript,也不求值 patch 表达式。
2、plugin_observe 是有界的、进程本地的观察,不是 Loader 当前状态的权威来源。
3、插件以当前 dsh 进程权限运行,安装前应检查源码、依赖和 MIT 许可证。
4、报告确定性地排序 findings,不带时间戳,适合作为可比较的机器可读输出。

结尾

dsh-plugin-observatory 把两件事放在同一个 DSH 插件里:安装前给出静态兼容性结论,激活后保留有界的 Loader 生命周期观察。对于需要在 profile 启动前判断插件是否声明正确、又想查看当前非 group Loader 条目的人,这是一个比较直接的入口。

GitHub 仓库:https://github.com/CMSKL/dsh-plugin-observatory

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

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

小夜