关于 prisma-next-extension-upgrade
供扩展作者升级使用 Prisma Next 框架 SPI 的扩展。它涵盖依赖精确版本固定、迁移步骤、固定值检查、验证及逐步提交。
主要功能
- 01识别扩展作者角色
- 02构建逐个次版本的升级链
- 03精确固定 Prisma Next 依赖版本
- 04检查依赖版本固定值
- 05逐步验证并提交
适用场景
- 01升级外部 Prisma Next 扩展
- 02升级后验证扩展依赖版本固定值
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ prisma/ prisma-next --skill prisma-next-extension-upgrade安装后在 Claude Code 中输入/prisma-next-extension-upgrade确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdupgrades/0.10-to-0.11/instructions.mdupgrades/0.11-to-0.12/instructions.mdmigrate-contract-testing-imports.tsregenerate-extension-public-baseline.tsstrip-migration-labels-hints.tsupgrades/0.12-to-0.13/instructions.mdupgrades/0.13-to-0.14/instructions.mdmigration-op-factories-to-methods.tsuuid-preset-rename.tsupgrades/0.14-to-0.15/instructions.mdupgrades/0.15-to-0.16/instructions.mdupgrades/0.16-to-0.17/instructions.mdstrip-sha256-hash-prefixes.tsupgrades/0.7-to-0.8/instructions.mdupgrades/0.8-to-0.9/instructions.mdstrip-inline-contracts.tsupgrades/0.9-to-0.10/instructions.mdstamp-storage-types-kind.ts详细介绍
升级 Prisma Next(扩展)
此技能用于升级本身就是 Prisma Next 扩展的项目 — 这类包会使用框架 SPI(@prisma-next/contract、@prisma-next/framework-components、@prisma-next/migration-tools 等),并公开契约 / 中间件 / 编解码器 / 迁移接口,供下游应用通过 prisma-next.config.ts 安装。
如果要升级的项目是使用方应用(它在应用代码中导入 @prisma-next/postgres 或 @prisma-next/mongo),请改用 prisma-next-upgrade 技能 — 如果代码仓库同时包含使用方应用和扩展包,也可以两者都用;此时请先运行用户流程,再在同一会话中运行扩展流程。
步骤 0 — 确保技能已更新
在执行其他操作之前,请确保此技能已安装为 @latest 并重新加载。针对旧版升级说明的错误修复会随最新技能版本一并发布,并纳入累积指令集;使用过时的技能可能会应用已知有问题的转换。
具体来说:如果 Agent 运行时支持在会话中刷新,请立即执行。否则,请退出并让用户重新安装:
pnpm dlx skills add prisma/prisma-next/skills/extension-author --all
扩展作者技能的子路径有意不固定版本(始终为 main)— 累积指令集是唯一可信来源,最新版本中的修复适用于所有先前的转换。
然后重新调用此技能,再继续操作。
角色检测
当项目本身就是 Prisma Next 扩展时,适用此技能。判断依据:
package.json在dependencies或peerDependencies中声明了@prisma-next/contract(或其他 SPI 包),并且- 包的
name符合^@.*/extension-(这是@prisma-next/extension-pgvector等包采用的仓库内约定),或者 - 同一单体仓库中某个相邻应用的
prisma-next.config.ts将此包列为extensions条目。
如果项目还在自身的应用代码中使用 Prisma Next,请安装 prisma-next-upgrade 技能(pnpm dlx skills add prisma/prisma-next/skills/upgrade --all),然后先运行用户流程,再在同一会话中运行此流程。
如果无法明确判断,请询问用户要按哪种角色操作。
版本检测
- 起始版本。 从
pnpm-lock.yaml(或package-lock.json/yarn.lock)读取当前安装的 Prisma Next 版本,检查任一@prisma-next/*条目的解析版本。如果锁文件中存在多个次版本不同的@prisma-next/*包,则以最低的次版本作为起始版本。 - 目标版本。 用户指定的版本,或通过
npm view @prisma-next/contract dist-tags.latest获取的最新稳定版。
继续之前,请向用户报告这两个版本。
转换链
如果起始版本与目标版本之间跨越多个次版本(例如 0.6 → 0.8),请构建由多个单次版本升级组成的链:
0.6 → 0.7 → 0.8
按顺序完整应用每个步骤:升级版本、安装、执行说明、检查固定版本、验证、提交 — 完成当前步骤后再进入下一步。任一步骤失败,都要停止后续升级。
每一步的流程
此流程假设你是外部扩展作者——你的扩展位于独立仓库中,并从 npm 使用 @prisma-next/*。(prisma/prisma-next 单体仓库内的扩展通过 pnpm bump-minor / scripts/set-version.ts 升级版本,该脚本会将所有 workspace:<X.Y.Z> 规格统一改写为根版本;这些扩展不会运行此技能。)
对于链中的每个 (from, to) 步骤:
-
升级
@prisma-next/*依赖项。 将扩展package.json中的每个@prisma-next/*条目改写为精确的<to>版本(例如"0.8.0"——不带 caret、波浪号、范围或workspace:规格;下文的精确固定规则会说明原因)。所有条目都应升级到相同版本。涵盖扩展当前使用的依赖字段——dependencies和/或peerDependencies——以及任何optionalDependencies。扩展升级技能本身通过pnpm dlx skills add发布(参见步骤 0);无需升级@prisma-next/extension-upgrade-skillnpm 条目。配套 CLI 工具是@prisma-next/extension-author-tools——保持其固定版本与扩展 CI 当前使用的版本一致;升级它与框架升级相互独立,通常无需更改。 -
安装。 运行
pnpm install(或项目用于管理 lockfile 的命令)。此时扩展源代码与新的 SPI 不兼容——<from> → <to>的升级说明用于修复此问题。 -
检查版本固定。 运行
pnpm exec prisma-next-check-pins(由@prisma-next/extension-author-tools提供)。此健全性检查会断言dependencies、peerDependencies和optionalDependencies中的每个@prisma-next/*条目都是单个精确版本字符串,并且所有条目使用相同版本。如果检查失败,说明升级步骤未改写所有规格——修复有问题的条目,然后重新运行检查,再继续操作。 -
阅读升级说明。 从此技能包中加载
upgrades/<from>-to-<to>/instructions.md。解析 YAML frontmatter,并特别留意其中的changes[]数组。 -
应用每项更改。 对于
changes[]中的每个条目:- 如果条目包含
detection块(glob + 内容谓词),则运行该检测。如果没有文件匹配,则跳过此更改。 - 如果条目不包含
detection,则无条件应用此更改。 - 如果条目指定了
script:(相对于instructions.md的路径),则从项目根目录调用:*.ts→pnpm exec tsx <skill>/upgrades/<from>-to-<to>/<script>*.sh→bash <skill>/upgrades/<from>-to-<to>/<script>- codemod → 按照脚本自身的
instructions.md说明调用。
- 如果条目没有
script,则直接按照instructions.md正文中的说明操作。
如果
changes[]为空(适用于没有扩展端破坏性更改的版本转换的占位结构),此子步骤无需操作——继续验证。 - 如果条目包含
-
验证。 运行
pnpm build && pnpm test(或项目中的等效命令——扩展package.json的scripts字段用于查找这些命令)。如果有任何检查失败,则停止升级链。不要自动回滚;向用户报告失败,并提供 frontmatter 中失败更改的id、该更改操作过的文件路径,以及推断出的修复方法。 -
提交。 创建一个提交,包含此步骤的更改:
package.json的版本升级、pnpm install造成的 lockfile 变更,以及应用更改后产生的任何源文件改写。使用以下提交信息:chore: upgrade @prisma-next/* to <to-version>(如果扩展有自己的提交信息约定,则遵循该约定。)每一步单独提交——绝不合并多个步骤的提交。
继续下一步。重复上述流程。
精确固定规则
Prisma Next 扩展会将每个 @prisma-next/* 依赖固定为同一个精确版本(发布的 package.json 中不使用 ^、~、版本范围、通配符或 workspace: 说明符)。所有 @prisma-next/* 条目使用相同版本。只有针对新次要版本的升级成功运行后,才会更新固定版本。
prisma-next-check-pins(由 @prisma-next/extension-author-tools 提供 — 使用 pnpm add -D @prisma-next/extension-author-tools 安装)会强制执行此规则。在本地运行:
pnpm exec prisma-next-check-pins
将其与构建/测试步骤一起接入扩展的 CI,这样意外使用版本范围固定依赖时,PR 就会在合并前失败。
链条完成时
向用户报告:已应用的步骤数量、你创建的提交 SHA,以及任何尚待处理的后续事项。
失败情况
步骤失败时:
- 提供结构化错误,其中包含代码
PN-UPGRADE-NNNN、失败变更的id、该变更涉及的文件路径(或锁文件、固定版本检查或验证命令),以及推断出的解决方法。 - 不要自动重试。
- 不要自动回滚提交。用户可以按需自行回退,以恢复干净状态。