关于 npm-publish
npm-publish 是引导 Agent 发布 npm 包的技能,涵盖预检、更新变更日志、发布和验证。它通过脚本处理发布与令牌设置,并规定了如何向用户传达认证状态。
主要功能
- 01检查注册表版本并递增
- 02构建与变更日志流程
- 03通过脚本提交和发布
- 04基于浏览器设置令牌
- 05后台验证发布结果
适用场景
- 01准备带版本更新的软件包发布
- 02记录提交变更后发布
- 03处理认证失败并恢复发布
- 04确认已发布的软件包可用
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ b-open-io/ prompts --skill npm-publish安装后在 Claude Code 中输入/npm-publish确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.md.clawnet/unsigned-skill.jsonscripts/preflight.shpublish.shrelease.shsetup-token.shverify.sh详细介绍
npm-publish
必须 — 开始前请阅读
绝不要向用户索要 OTP 代码。 身份验证由脚本和 agent-browser 处理。
绝不要手动运行 npm/bun 命令,例如 npm whoami、npm view、bun publish 或 npm publish。
必须运行这些脚本。不要跳过步骤。
第 1 步:预检
bash ${CLAUDE_SKILL_DIR}/scripts/preflight.sh
确定性地处理:与 npm 注册表核对版本,必要时升级(重置间隔),构建,并输出提交日志。传入 minor 或 major 可覆盖默认的 patch 升级。
第 2 步:编写变更日志
读取预检输出中的提交日志。如果存在 CHANGELOG.md,请按现有格式在顶部添加条目;如果不存在,则创建该文件。使用预检输出中的版本。分类如下:重大变更、新增、变更、修复、安全、弃用。
第 3 步:发布(提交 + 推送 + 发布)
bash ${CLAUDE_SKILL_DIR}/scripts/release.sh [--access public]
先提交,再推送,然后调用 publish.sh。如果 publish.sh 输出 PUBLISH_SUCCESS,则发布完成,前往第 4 步。
如果 publish.sh 输出 AUTH_FAILED
Agent 必须协调令牌设置。不要将 setup-token.sh 作为一条长命令调用。 分两个阶段运行,并在两阶段之间与用户沟通。
阶段 1 — 填写表单:
bash ${CLAUDE_SKILL_DIR}/scripts/setup-token.sh fill
状态代码:
FORM_READY:<username>— Chrome 中的表单已填写,告知用户后继续NOT_LOGGED_IN— 告知用户:“请在 Chrome 中登录 npmjs.com,然后我会重试”FORM_NOT_FOUND— 告知用户:“找不到令牌表单。页面可能已更改。”
收到 FORM_READY 后,直接告知用户(不要放在 bash 命令中):
我已在 Chrome 中打开 npm 令牌创建表单并填写完毕(cli-publish、7 天、读写权限、所有软件包)。准备好后,请向下滚动并点击 Generate token。
阶段 2 — 获取令牌:
bash ${CLAUDE_SKILL_DIR}/scripts/setup-token.sh capture
此脚本会轮询,直到令牌出现在页面上,然后点击 Copy 按钮,从剪贴板读取令牌,将其写入 ~/.npmrc,并清空剪贴板。令牌不会出现在终端输出中。
状态代码:
TOKEN_SAVED— 成功,重试发布CAPTURE_TIMEOUT— 告知用户:“无法获取令牌。请从 Chrome 中复制令牌,我会将其写入 ~/.npmrc”
收到 TOKEN_SAVED 后,重试发布:
bash ${CLAUDE_SKILL_DIR}/scripts/publish.sh [--access public]
告知用户:“如果浏览器提示,请完成 OTP 复选框验证。”
第 4 步:验证(后台)
bash ${CLAUDE_SKILL_DIR}/scripts/verify.sh <package-name> <version>
使用 run_in_background: true 运行。采用指数退避(5 秒、10 秒、20 秒、40 秒、60 秒)。
核心架构原则
脚本输出状态代码,Agent 负责解读并与用户沟通。 脚本输出隐藏在折叠的 bash 命令中,用户看不到。所有面向用户的沟通都必须由 Agent 直接发送,且在 bash 调用之外。