--- name: upgrade-packages description: 调研 package.json 所有依赖的最新版本,交叉验证版本差异,给出可升级到最新版的结论 --- 帮我调研当前项目所有依赖的最新版本,深入对比每个库「已安装版本」和「最新版本」之间的内容差异,**交叉验证**后给出结论:哪些库可以安全升级到最新版。 这是一次**调研 + 报告**任务,默认**不要**修改 [package.json](../../../package.json) 或执行安装命令。除非我明确要求,否则只产出结论,不动代码。 ## 工作流 ### 1. 盘点依赖 - 读取 [package.json](../../../package.json),列出全部 `dependencies` 和 `devDependencies`。 - 在终端运行 `pnpm outdated`(项目用 pnpm,不要用 npm/yarn)拿到「Current / Wanted / Latest」三列。 - 如果我在参数里指定了具体库名,只处理这些库;否则处理全部有可升级版本的库。 - 已经是最新版的库直接跳过,不必逐个写说明。 - 不要更新typescript版本。 ### 2. 逐库深入调研 对每个「有更新」的库,调研已安装版本 → 最新版本之间发生了什么: - 优先官方渠道:GitHub Releases / `CHANGELOG.md` / 官方迁移指南 / npm 页面。 - 判断版本跳变性质:patch / minor / major(遵循 semver),跨越多个大版本时要把中间每个 major 的破坏性变更都覆盖到,不能只看最新一版。 - 重点提取:**breaking changes、废弃 API、需要手动迁移的步骤、对等依赖(peerDependencies)要求**。 - 特例 @earendil-works/pi-agent-core / pi-ai:变更日志在 pi monorepo 仓库内,**不在 npm release notes**——看 `packages/ai/CHANGELOG.md` 和 `packages/agent/CHANGELOG.md`(github.com/earendil-works/pi)。二者须锁步升到同一版本;深入调研这两个包时优先使用项目的 `upgrade-pi` workflow。 ### 3. 交叉验证(必做) 每个结论至少要有两类独立来源相互印证,避免只信单一页面: - 来源交叉:GitHub Releases 与 CHANGELOG/官方文档说法是否一致。 - 代码交叉:用代码搜索确认本项目**实际怎么用这个库**(用到的 API、入口、是否只是间接依赖),据此评估破坏性变更对本项目的**真实影响**——别人眼里的 breaking 在我们这儿可能根本没用到。 - 生态交叉:注意 React 19、WXT、Tailwind v4 等关键依赖的 peer 兼容要求,别让单个升级破坏整体。特别地,`typebox` 与 pi(pi-ai / pi-agent-core)内部捆绑的 typebox 必须同版本——本项目精确 pin `typebox`(无 `^`)就是为此,**不要单独升 typebox**,它只能跟随 pi 一起动;升级前后都去 [pnpm-lock.yaml](../../../pnpm-lock.yaml) 核对 pi 解析的 typebox 版本。 - 遇到来源互相矛盾或信息不足,**如实标注「未确认」**,不要猜。 ### 4. 分类结论 把每个库归入下面四类之一,并给出一句话理由: - ✅ **可安全升级**——patch/minor,无破坏性变更,本项目用法不受影响。 - ⚠️ **可升级但需注意**——有废弃项或行为变化,需小改或回归验证。 - ⛔ **破坏性升级**——major 跨越且本项目用到了受影响 API,需要改代码/迁移。 - ❓ **暂不建议 / 待确认**——信息不足、peer 冲突,或收益不明。 ## 输出格式 先给一张总览表: | 库 | 已安装 | 最新 | 跳变 | 结论 | 一句话理由 | |----|--------|------|------|------|-----------| 再按「需要注意」「破坏性」「待确认」分组展开细节(✅ 可安全升级的库列在表里即可,不必逐个展开)。每个展开项写明:关键变更、对本项目的真实影响、升级要做的事、来源链接。 最后用一段话给出整体建议:这一轮优先升哪些、哪些先放着、有没有需要分批进行的。 调研中如果发现某个库的判断把握不大,直接告诉我「这个我没法确认」,并说明卡在哪里——不要给出没有依据的结论。