publish-kit
github.com/EternalNight996/publish-kit
v0.5.2
市场与管理
写入文件运行时改写自身配置R013 清单可疑
⭐ 如果你发过包又曾因「忘了打 tag」而丢了版本, 给个 Star。 安装: npx skills add https://github.com/EternalNight996/publish-kit 或 npm i -g @eternalnight/publish-kit
作者原文(英文)
Release playbook for AI agents. npm-installable CLI + DSH plugin + skill bundle. Covers npm, GitHub+Gitee dual remote, DSH marketplace, cargo crates.io, PyPI, PyInstaller exe, Go single-binary, Rust single-binary, Electron/Tauri desktop. Bilingual EN/ZH.
中文简介由 DeepSeek 模型翻译,仅供参考。
publishingreleasenpmcargopypipyinstallerdsh-plugindsh-skill
检测报告
有一定能力。命中了若干能力模式,大多是插件正常工作时会用到的。
3需留意3一般18未命中
高关注需留意一般
能力清单
- 写入文件
writes-files需留意6 处命中scripts/postinstall.js:46if (FORCE) { fs.unlinkSync(dest); } else { skipped.push(dest); continue; }scripts/postinstall.js:57try { fs.unlinkSync(dest); } catch { /* may still fail; re-link will try */ }scripts/postinstall.js:68try { fs.rmSync(dest, { recursive: true, force: true }); }scripts/postinstall.js:81fs.mkdirSync(dir, { recursive: true });- 看写入位置。写自己的配置目录是正常的,写系统目录不是。
- 运行时改写自身配置
modifies-own-manifest需留意1 处命中scripts/bootstrap-release.sh:86node -e "const p=require('./package.json');p.version=process.argv[1];require('fs').writeFileSync('package.json',JSON.str…- 运行时改写自身配置会让下次启动的行为和你看过的源码不一致。
- R013 清单可疑
manifest-obfuscation需留意1 处命中- 安装脚本: postinstall
- 清单被刻意写乱时,加载行为会难以预测。看原文而不是看渲染结果。
- 接触凭据或密钥
credentials一般10 处命中…s/skills/publish-kit/EXAMPLES.md:38- Gitee API POST `/user/repos` returned HTTP 400 with an HTML body (no JSON error). Workaround: create the Gitee repo ma……s/skills/publish-kit/EXAMPLES.md:154| Windows code signing fails (`signtool` exit non-zero) | the cert EV pass is required; add `secrets.WINDOWS_CERT_BASE64……s/skills/publish-kit/EXAMPLES.md:155| macOS Gatekeeper rejects unsigned binary | add `xcrun notarytool` step; needs Apple Developer ID + `secrets.APPLE_ID` ……s/skills/publish-kit/TEMPLATE.md:225NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}- 看它读取哪些凭据、发往哪里。用于登录自己的服务是正常的。
- 读取环境变量
reads-env一般4 处命中scripts/postinstall.js:12const FORCE = process.env.PUBLISH_KIT_FORCE === '1'scripts/postinstall.js:13|| (Array.isArray(process.env.npm_config_force) ? process.env.npm_config_force.includes('true') : process.env.npm_config…- 环境变量里常混有密钥。看它是否把整个 env 都读走。
- 读取文件
reads-files一般2 处命中scripts/postinstall.js:24if (!fs.existsSync(PACKAGE_SKILL_SRC)) {scripts/postinstall.js:42if (fs.existsSync(dest)) {- 读文件是绝大多数插件的正常工作方式,本身不构成顾虑。
逐条扫描明细
| 能力 | 标识 | 关注度 | 命中次数 |
|---|---|---|---|
| 写入文件 | writes-files | 需留意 | 6 |
| 运行时改写自身配置 | modifies-own-manifest | 需留意 | 1 |
| R013 清单可疑 | manifest-obfuscation | 需留意 | 1 |
| 接触凭据或密钥 | credentials | 一般 | 10 |
| 读取环境变量 | reads-env | 一般 | 4 |
| 读取文件 | reads-files | 一般 | 2 |
这份报告的口径
扫描读的是包里的源码,全程不执行第三方代码。 本次读了 18 个文件,扫描于 2026-10-14。 命中次数只说明源码里出现过这类调用,不说明行为好坏——一个插件读写文件 500 次和 1 次 都会被记为「读取文件」。这是能力清单,不是信任评分,也不是安全结论: 没扫出来的能力可能只是写法没被规则覆盖。
依赖安全公告
已查询这个插件声明的全部依赖,没有匹配到已公开的安全公告。(含 DSH 框架包在内的 @deepseek-ai/* 不作查询——那是运行时自己的问题,不是插件的。)