npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@perrylink/dsh-skill-pack-security-provider

v2.1.4

Published

Provider plugin for dsh-skill-pack-security: registers the pack's skills/ (zh) or skills-en/ (en) edition on ctx.skills AND the plugin_vet supply-chain gate tool on ctx.tools (license/SBOM/commit-lock/malware scans + five-dimension risk card). Ships both

Downloads

1,119

Readme

可选 provider 插件(npm bundle)/ Optional provider plugin (npm bundle)

English | 中文

本目录是一个可选的 DSH 插件:把包内技能目录注册进 ctx.skills,免去把技能复制到扫描根目录的步骤。技能包本体不依赖它。默认发布中文版 skills/language: 'en' 发布英文版 skills-en/。包已声明 dsh.bundle 并发布在 npm:dsh plugin add @perrylink/dsh-skill-pack-security-provider 一键挂载。

English

This directory is an optional DSH plugin: it registers the pack's skill directory on ctx.skills, so the skills do not need to be copied into a scanned root. The pack itself does not depend on it. It publishes the Chinese edition skills/ by default; language: 'en' publishes the English edition skills-en/. The package declares dsh.bundle and is published on npm: dsh plugin add @perrylink/dsh-skill-pack-security-provider mounts it in one command.

Design

  • Reuses the official FileSystemSkillProvider (the provider class exported by @deepseek-ai/dsh-skill-filesystem): frontmatter parsing semantics are byte-identical with the official local provider (same fail-closed rules, kebab-case naming, invocation policy) — zero copied parsing logic.
  • Configuration { includeDefaultRoots: false, customSkillDirs: [pack skills], watch: false }: exposes only the pack's skills and never conflicts with user/project skill roots; static content needs no watcher.
  • Registration is an effect: ctx.effect(function* () { yield ctx.skills.registerProvider(...) }) — the returned disposer is the registry's effect disposer; the provider lifecycle (signal abort → dispose) is owned by the official class.
  • Misconfiguration fails loud: an empty or nonexistent skillsDir (or a default resolution that finds neither layout) throws at apply() time instead of silently mounting zero skills.
  • Root resolution supports two layouts: the repository layout (skills/ beside provider/) and the published layout (pack/skills embedded beside lib/ by prepack).

Configuration

| Key | Type | Default | Meaning | |---|---|---|---| | language | 'zh' \| 'en' | 'zh' | Which edition to publish: the Chinese skills/ or the English skills-en/. Ignored when skillsDir is set. | | skillsDir | string | — | Explicit skills root; overrides the language-derived default. Must exist and contain at least one <skill>/SKILL.md bundle, otherwise the plugin refuses to load. | | watch | boolean | false | Whether to watch the packaged directory; packaged content is static. | | vet.dataResponsibility | boolean | true | Run the plugin_vet data-responsibility review (ungated sensitive-seam hooks, undisclosed outbound endpoints, description-behavior coverage, embedded instruction-override payloads). Full vet.* documentation lives in the root README. |

Mounting (any one)

  1. npm bundle (recommended): dsh plugin add @perrylink/dsh-skill-pack-security-provider. The dsh.bundle manifest applies cordis.patch.yml, which mounts the Chinese edition; edit the patch row's config.language for English.
  2. Copy this directory into a project plugin directory and load it by local path in cordis.yml:
plugins:
  - name: ./provider
  1. During development, source-launch: the dsh CLI source launch runs through the tsx ESM hook, so point it directly at provider/src/index.ts.

Dependencies, build, and packaging

  • peerDependencies: @deepseek-ai/cordis@^4.0.1, @deepseek-ai/dsh-skill-filesystem@>=0.1.0-rc.8 <0.2.0, @deepseek-ai/schemastery@^3.18.1 (all published on the npm registry — the provider installs and builds standalone).
  • Build: pnpm install --frozen-lockfile && pnpm run build (tsc emits lib/index.js + lib/types/index.d.ts; the committed pnpm-lock.yaml keeps the build reproducible).
  • Packaging: prepack runs scripts/copy-skills.mjs, which embeds both editions into pack/; files then ships lib/, pack/, and cordis.patch.yml, so pnpm pack produces a self-contained tarball (npm files cannot reach outside the package directory, which is why the copy exists).
  • Contract notes: name + inject: ['skills'] + apply(ctx, config); the configuration is a Schemastery schema (no plain objects); providerName is unique within the registry layer ('skill-pack-security').
  • Publishing: published on npm as @perrylink/dsh-skill-pack-security-provider — the @dsh-skill-pack-security scope was not owned by this publisher, so the package was renamed; cordis.patch.yml's name row and every README reference carry the published name. Publish new versions with npm publish --access public (see docs/release-checklist.md step 9).

Verification

Check 8 of ../verify/verify-skill-pack.mts exercises this plugin: mounting the default config lists the 8 Chinese skills (provider === 'skill-pack-security'), language: 'en' lists the English edition, an explicit skillsDir mounts that root, empty/nonexistent skillsDir values are rejected, and after dispose the registries are empty. CI additionally builds the plugin standalone, packs it, and asserts the tarball carries lib/, both embedded editions in pack/, and cordis.patch.yml (provider job in .github/workflows/verify.yml).

中文

本目录是可选的 DSH 插件:把包内技能目录注册进 ctx.skills,免去复制技能到扫描根目录。技能包本体不依赖它。默认发布中文版 skills/language: 'en' 发布英文版 skills-en/。包已声明 dsh.bundle 并发布在 npm:dsh plugin add @perrylink/dsh-skill-pack-security-provider 一键挂载。

设计

  • 复用官方 FileSystemSkillProvider@deepseek-ai/dsh-skill-filesystem 导出的 provider 类):frontmatter 解析语义与官方本地提供方逐字节一致(同样的 fail-closed 规则、kebab-case 命名、invocation 策略),零复制解析逻辑。
  • 配置 { includeDefaultRoots: false, customSkillDirs: [包内技能目录], watch: false }:只暴露本包技能,不与用户/项目技能根冲突;静态内容不启用 watcher。
  • 注册即 effect:ctx.effect(function* () { yield ctx.skills.registerProvider(...) }),返回的 disposer 就是注册表提供的 effect disposer;provider 生命周期(signal abort → dispose)由官方类接管。
  • 错误配置响亮失败:skillsDir 为空、不存在或默认解析找不到任何布局时,apply() 直接抛错,绝不静默挂载零技能。
  • 根目录解析支持两种布局:仓库布局(skills/provider/ 并列)与发布布局(prepack 把双语言版嵌入包内 pack/skills,与 lib/ 并列)。

配置

| 键 | 类型 | 默认 | 含义 | |---|---|---|---| | language | 'zh' \| 'en' | 'zh' | 发布哪个语言版:中文 skills/ 或英文 skills-en/;设置了 skillsDir 时忽略 | | skillsDir | string | — | 显式指定技能根目录,覆盖 language 推导的默认值;必须存在且含至少一个 <skill>/SKILL.md 包,否则插件拒绝加载 | | watch | boolean | false | 是否监听包内技能目录;静态内容无需监听 | | vet.dataResponsibility | boolean | true | 运行 plugin_vet 数据责任审查(无门控敏感监听、未披露出站端点、描述-行为覆盖率、随包文本中的指令覆盖类注入载荷);完整 vet.* 文档见根 README |

挂载方式(任选)

  1. npm bundle(推荐):执行 dsh plugin add @perrylink/dsh-skill-pack-security-providerdsh.bundle 清单应用 cordis.patch.yml,默认挂载中文版;要英文版改 patch 行里的 config.language
  2. 复制本目录进项目插件目录,在 cordis.yml 里以本地路径加载:
plugins:
  - name: ./provider
  1. 开发期 source-launch:dsh CLI 源码启动走 tsx ESM hook,直接指到 provider/src/index.ts

依赖、构建与打包

  • peerDependencies:@deepseek-ai/cordis@^4.0.1@deepseek-ai/dsh-skill-filesystem@>=0.1.0-rc.8 <0.2.0@deepseek-ai/schemastery@^3.18.1(均已发布在 npm registry,插件可独立安装构建)。
  • 构建:pnpm install --frozen-lockfile && pnpm run buildtsc 输出 lib/index.js + lib/types/index.d.ts;提交的 pnpm-lock.yaml 保证构建可复现)。
  • 打包:prepack 执行 scripts/copy-skills.mjs 把双语言版嵌入 pack/files 随包发布 lib/pack/cordis.patch.yml,因此 pnpm pack 产出即自包含 tarball(npm files 不能包含包外路径,这是拷贝步骤存在的原因)。
  • 契约要点:name + inject: ['skills'] + apply(ctx, config);配置为 Schemastery schema(禁止普通对象);providerName 在注册表层内唯一('skill-pack-security')。
  • 发布:已发布在 npm,包名 @perrylink/dsh-skill-pack-security-provider——scope @dsh-skill-pack-security 不为本发布者所有,故改名;cordis.patch.ymlname 行与全部 README 引用均已同步为发布名。新版本用 npm publish --access public 发布(见 docs/release-checklist.md 第 9 步)。

验证

../verify/verify-skill-pack.mts 第 8 项实测本插件:默认配置挂载列出 8 个中文技能(provider === 'skill-pack-security'),language: 'en' 列出英文版,显式 skillsDir 挂载指定根目录,空/不存在的 skillsDir 被拒绝,dispose 后注册表为空。CI 另有 provider job(.github/workflows/verify.yml)独立构建并打包,断言 tarball 含 lib/pack/ 双语言版与 cordis.patch.yml