用途:为已发布或被外部使用的 TypeScript/TSX API 编写、归档、应用和验证 codemod 迁移配方。codemod 是完整迁移配方,不只是重命名映射,它结合确定性 AST 转换与供代理参考的语义指引,用于改写无法机械替换的调用点。
何时使用:先确认迁移面是否已存在于远程默认分支、发布标签或其他对外使用的 canary。若符号或调用形态只存在于未合并分支或工作区,则直接改源码与仓库内调用点,无需建档。仅在已有兼容性证据或用户明确要求保留迁移配方时使用 codemod。
主要能力:分为两种模式——应用已归档 codemod,先列出归档并读取每个 recipe.json 与 instructions.md;编写 codemod,按 references/recipe-format.md 创建带日期的配方并验证转换与代理步骤。重命名已落地或对外符号须先写配方再应用;未合并的进行中符号直接改源码。
使用方式:列出归档:mise exec -- node .agents/skills/codemod/scripts/list-codemods.mjs。校验全部归档是否已应用:mise exec -- node .agents/skills/codemod/scripts/run-all-codemods.mjs --project path/to/tsconfig.json --target path/to/project --check;按字典序应用全部归档可将 --check 改为 --write。安全应用:先不加 --write 运行,审阅每个报告文件与预期 diff;仅在用户授权修改后再加 --write。
限制与注意:目标根目录与 tsconfig 须精确解析,不得指向主目录、工作区父目录、依赖库或 node_modules。语义站点按 instructions.md 处理,保留所有权、顺序、错误与生命周期不变量,遇到需用户决策处应停下。用 AST 查询枚举残留的旧导入、标识符、属性访问、调用形态、注释与字符串字面量;不要因拼写相似而重命名协议值、持久化数据、fixture 标识、生成的 ABI 名或产物路径。生成文件(JavaScript、声明、摘要、ABI)须由所属工作流重新生成,而非由 codemod 编辑。符号重命名用运行器的 renameSymbol() 辅助,它委托语言服务处理标识符,单独扫描注释 trivia,不改字符串字面量。类型检查通过不代表语义调用点已迁移,仍需满足配方的行为后置条件。归档配方位于 codemods/YYYY-MM-DD-slug/,按日期字典序应用;一旦共享给 canary 用户,不得重写其迁移含义,应追加后续修正配方以形成有序链。归档是重命名与调用点映射的规范来源。