mcpField
N
npm

npm

github.com/steipete开发7.5k87 次安装1 周前更新
代码仓库

关于 npm

npm 是用于 npm Registry 账户与包发布任务的技能,面向处理身份验证、包预留和发布的开发者。它通过共享认证脚本管理临时 npm 配置,并规定凭据异常或包目标不符时停止操作。

主要功能

  1. 01检查 Registry 身份与包可用性
  2. 02处理认证与账户问题
  3. 03发布本地包并验证可见性
  4. 04预留包名并处理逐包失败
  5. 05运行离线回归测试

适用场景

  1. 01检查当前 npm Registry 账户
  2. 02发布仓库对应的包版本
  3. 03为包名发布占位包
  4. 04在合成环境中运行回归测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/steipete/agent-scripts --skill npm

安装后在 Claude Code 中输入/npm确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
npm-auth-cache.mjs
npm-auth-cache.test.mjs
npm-auth-login.mjs
npm-auth-login.test.mjs
npm-auth.sh
npm-auth.test.sh
npm-cli-test-helpers.mjs
npm-service.sh
publish-package.sh
publish-package.test.sh
reserve-packages.sh

详细介绍

npm

用于 npm 注册表/账户任务:npm whoami、检查软件包可用性、预留软件包、发布、检查组织以及排查身份验证问题。

身份验证

  • 首先使用 one-password 了解密钥规则。
  • 切勿直接在 shell 工具中运行 op。
  • 主要条目:Molty 中的 npm Registry - steipete - Release Automation。
  • 默认使用 OP_SERVICE_ACCOUNT_TOKEN;无需解锁桌面应用。该条目包含可用的注册表会话(registry_token),以及用户名/密码/TOTP 备用凭据。
  • 仅在明确指定时使用桌面端 npmjs 备用方式:当 Molty 不可用且用户希望使用备用方式时,传入 --account my.1password.com。明确提出 release/publish 请求即表示同意解锁提示。
  • 如果条目缺失、账户/保险库不明确、凭据格式错误、npm 拒绝访问软件包,或请求的软件包/版本与仓库发布目标不符,请停止并询问。
  • 在共享的 op-work tmux 会话(clawdbot-op.sock;参见 one-password)中的一个任务窗口内执行 npm 身份验证操作。失败时重用该窗口;npm 任务完成后将其关闭。切勿创建专用于 npm 的 socket 或会话。
  • 在临时 npmrc 中保存 npm 身份验证信息;命令执行后将其删除。
  • 所有辅助脚本共用 scripts/npm-auth.sh:优先使用已保存的 registry_token 会话,然后使用 scripts/npm-auth-login.mjs 和新生成的六位 OTP 登录注册表;成功的备用会话会缓存回同一条目。不要自行编写字段提取、注册表登录或缓存写入逻辑。
  • 支持已安装技能目录的符号链接。Shell 入口会解析物理路径中的同级文件;被 source 的 npm-auth.sh 会管理 NPM_AUTH_SCRIPT_DIR,但不会更改调用方的 SCRIPT_DIR 或工作目录。Node 辅助脚本也支持文件符号链接,包括 --preserve-symlinks-main。
  • 凭据选择优先使用规范字段 id,其次是 purpose,然后是唯一标签;如果仅按标签匹配到重复项,则拒绝使用(旧版 npmjs 可能保留同标签字段)。
  • 对于临时的、需要身份验证的注册表命令,使用 scripts/npm-service.sh -- <npm args...>;对于本地软件包,使用 publish-package.sh。
  • npm 11 的提示符管道方式不可靠;避免使用 printf ... | npm login --auth-type=legacy。
  • 除非必要,否则避免使用 expect 执行 npm 登录;日志可能会回显提示内容,而且很容易出错。
  • 自动化时优先使用辅助脚本的注册表 API 登录路径(npm-profile loginCouch)。
  • 如果身份验证格式不明确,或 npm whoami 失败,请停止并询问确切的字段标签/凭据修正方式。不要继续探查其他 1Password 条目,也不要打开其他 tmux 窗口/会话。

发布软件包

在软件包根目录中,于同一个身份验证 tmux 窗口内执行:

/Users/steipete/Projects/agent-scripts/skills/npm/scripts/publish-package.sh

辅助脚本会验证身份、拒绝已存在的软件包版本、使用新 OTP 发布、在 OTP 过期时重试一次、使用同一个临时 npmrc 验证注册表可见性(包括受限软件包),并清理身份验证文件。

预留软件包

在同一个 tmux 窗口内使用 scripts/reserve-packages.sh:

/Users/steipete/Projects/agent-scripts/skills/npm/scripts/reserve-packages.sh package-one package-two

它的功能:

  • 通过 op 读取一次 Molty 发布自动化条目
  • 重用已保存的注册表会话,或使用用户名/密码/TOTP 创建会话
  • 发布带有通用 README 的 0.0.0 占位软件包
  • 单个软件包发布失败后继续处理
  • 在日志中隐藏令牌/OTP
  • 清理临时 npmrc/工作目录

注意:

  • npm 可能会因名称与已发布名称过于相似而拒绝该名称。将其视为注册表策略结果,而不是身份验证失败。
  • npm CLI 提示符管道方式在 npm 11 中不可靠。优先使用辅助脚本的注册表 API 登录路径,而不是脚本化的 npm login。
  • 对于带作用域的软件包,即使软件包存在,npm view 也可能延迟显示或返回 404。请检查 npm access get status <pkg>;public 或提示 previously published versions 的发布失败信息,表示该名称已被预留。

离线回归测试

从仓库根目录运行;仅使用合成测试数据,不使用真实的 1Password/npm 身份验证。务必使用空环境(Shell 模拟程序会检查其环境中是否泄露令牌):

test_home="$(mktemp -d)"
(
  set -e
  trap 'rm -rf "$test_home"' EXIT
  env -i HOME="$test_home" PATH="$PATH" node --test skills/npm/scripts/*.test.mjs </dev/null
  env -i HOME="$test_home" PATH="$PATH" /bin/bash skills/npm/scripts/npm-auth.test.sh </dev/null
)

评论

支持 Markdown