SuperAPI AI 工具集

bumpgen

bumpgen 是一个 AI 智能体,用于自动升级 npm 包,并在升级导致代码破坏时自动修改 TypeScript/TSX 代码。它通过构建项目来识别依赖升级后出现的问题,使用 ts-morph 生成抽象语法树(AST)理解代码结构和类型定义,并创建计划图 DAG 来按正确顺序传播修复。目前仅支持 TypeScript 和 TSX,需要 OpenAI API 密钥,仅支持 gpt-4-turbo-preview 模型。可通过命令行或 GitHub Action 使用。

访问官网

工具介绍

bumpgen 是一个 AI 智能体,专门用于升级 npm 包,并在升级导致代码破坏时自动修改 TypeScript/TSX 代码。它旨在解决开发者手动升级依赖时遇到的常见问题:升级后代码出现大量错误,修复耗时费力。

用途 bumpgen 的主要用途是自动化 npm 包升级过程。当开发者想要升级某个依赖包到新版本时,bumpgen 可以自动完成升级,并检测和修复因升级导致的代码破坏。

主要能力

  • 自动升级 npm 包:可以指定包名和目标版本,也可以无参数运行并从菜单中选择要升级的包。
  • 自动修复破坏性变更:通过构建项目来了解依赖升级后哪些地方出错,并自动修改代码。
  • 理解代码结构:使用 ts-morph 生成抽象语法树(AST),理解语句之间的关系,并获取外部方法的类型定义,以了解如何使用新版本的包。
  • 计划图执行:创建计划图 DAG 来按正确顺序执行操作,处理传播性变更(参考 arXiv 2309.12499)。
  • GitHub Action 集成:可以创建 GitHub Action,在 dependabot 或 renovatebot 的 PR 上触发,检测到破坏性变更时自动提交到 PR 分支。

使用方式

  1. 需要 OpenAI API 密钥,目前仅支持 gpt-4-turbo-preview 模型。
  2. 运行命令升级指定包,例如:bumpgen @tanstack/react-query 5.28.14,其中 @tanstack/react-query 是要升级的包,5.28.14 是目标版本。
  3. 也可以无参数运行 bumpgen,从菜单中选择要升级的包。使用 bumpgen --help 查看完整选项。
  4. 使用 GitHub Action 时,在 dependabot 或 renovatebot PR 上触发。Action 会提交更改到触发分支。如果希望这些提交触发其他 CI 工作流,需要使用 GitHub Personal Access Token。

适用场景

  • 需要升级 TypeScript/TSX 项目的 npm 依赖,但担心破坏代码时。
  • 与 dependabot 或 renovatebot 配合,自动修复依赖升级 PR 中的破坏性变更。

限制

  • 目前仅支持 TypeScript 和 TSX,其他强类型语言(Java、Golang、C#、Python)正在计划中。
  • 仅支持 gpt-4-turbo-preview 模型。
  • 依赖构建错误来确定需要修复的内容。如果问题由行为变更引起,bumpgen 无法检测。
  • 无法同时处理多个包。对于需要同时更新 peer 依赖的包(如 @octokit/core 和 @octokit/plugin-retry),升级会失败。
  • 对大型框架(如 Vue)效果不佳,尤其是 Vue 2 到 3 的升级,即使对人类来说也很困难。

架构

  • AST 由 ts-morph 生成,使 bumpgen 能理解代码库中节点之间的关系。
  • 计划图概念来自 Microsoft 的 codeplan。计划图不仅修复某个点的问题,还能修复由修复本身引起的二级破坏性变更,从而将修复传播到整个代码库。
  • 将计划图、错误和包含破坏性变更的实际文件作为上下文传递给 LLM,以最大化修复能力。

其他信息 bumpgen 提供了评估基准,使用 GPT-4 Turbo 对一系列包含破坏性变更的版本升级进行测试。项目欢迎贡献,有开发设置指南。未来计划包括 TypeScript/TSX 支持、bumpgen GitHub App、不同包版本的嵌入、使用测试运行器作为 oracle。