{"id":48557598,"url":"https://github.com/wellkilo/codemod-pilot","last_synced_at":"2026-04-08T12:00:18.853Z","repository":{"id":349908361,"uuid":"1204443431","full_name":"wellkilo/codemod-pilot","owner":"wellkilo","description":"🛩️ Transform your codebase by example — an intelligent codemod engine that infers AST-level transformation rules from before/after code snippets, then safely applies them across your entire codebase. No AST knowledge required.","archived":false,"fork":false,"pushed_at":"2026-04-08T03:38:28.000Z","size":119,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-08T05:21:35.546Z","etag":null,"topics":["ast","automation","ci-cd","cli","code-migration","code-quality","code-transformation","codemod","developer-tools","javascript","linter","multi-language","open-source","pattern-matching","productivity","refactoring","rust","search-and-replace","tree-sitter","typescript"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wellkilo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/supported-languages.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-08T02:35:11.000Z","updated_at":"2026-04-08T03:38:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wellkilo/codemod-pilot","commit_stats":null,"previous_names":["wellkilo/codemod-pilot"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/wellkilo/codemod-pilot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellkilo%2Fcodemod-pilot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellkilo%2Fcodemod-pilot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellkilo%2Fcodemod-pilot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellkilo%2Fcodemod-pilot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wellkilo","download_url":"https://codeload.github.com/wellkilo/codemod-pilot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wellkilo%2Fcodemod-pilot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31554109,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ast","automation","ci-cd","cli","code-migration","code-quality","code-transformation","codemod","developer-tools","javascript","linter","multi-language","open-source","pattern-matching","productivity","refactoring","rust","search-and-replace","tree-sitter","typescript"],"created_at":"2026-04-08T12:00:17.686Z","updated_at":"2026-04-08T12:00:18.709Z","avatar_url":"https://github.com/wellkilo.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n\n# codemod-pilot 🛩️\n\n**Transform your codebase by example. No AST knowledge required.**\n\n[![CI](https://github.com/wellkilo/codemod-pilot/actions/workflows/ci.yml/badge.svg)](https://github.com/wellkilo/codemod-pilot/actions/workflows/ci.yml)\n[![Crates.io](https://img.shields.io/crates/v/codemod-cli.svg)](https://crates.io/crates/codemod-cli)\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)\n\n**[🇺🇸 English](#-English) · [🇨🇳 简体中文](#-简体中文)**\n\n\u003c/div\u003e\n\n---\n\n# 🇺🇸 English\n\n[Features](#-features) · [Quick Start](#-quick-start) · [How It Works](#-how-it-works) · [Examples](#-examples) · [Rule Format](#-rule-format) · [Roadmap](#-roadmap) · [Contributing](#-contributing)\n\n---\n\n## The Problem\n\nLarge-scale code refactoring is painful. Renaming an API across 300 files, migrating from one library to another, updating deprecated patterns — these tasks are:\n\n- **Manual**: Find-and-replace is dangerous for code; regex can't understand AST structure\n- **Complex**: Writing AST-based codemods with tools like jscodeshift requires deep knowledge of AST manipulation\n- **Risky**: Without proper preview and rollback, batch changes can introduce subtle bugs\n\n## The Solution\n\n**codemod-pilot** lets you describe code transformations **by example**. Show it a \"before\" and \"after\" snippet, and it will:\n\n1. 🧠 **Infer** the structural transformation pattern from your examples\n2. 🔍 **Scan** your entire codebase for matching patterns\n3. 👀 **Preview** all proposed changes as a unified diff\n4. ✅ **Apply** changes safely with automatic rollback support\n\n```bash\n# Show it what you want to change\ncodemod-pilot learn \\\n  --before 'fetchUserInfo({ userId: id })' \\\n  --after  'getUserProfile({ profileId: id })'\n\n# Preview all matches across your codebase\ncodemod-pilot scan --target ./src/\n\n# Apply with confidence\ncodemod-pilot apply --execute\n```\n\n## ✨ Features\n\n- **Example-Driven** — No AST knowledge needed. Just show before → after.\n- **Multi-Example Inference** — Provide multiple examples for complex patterns; the engine finds the common transformation rule.\n- **Safe by Default** — Preview all changes before applying. Automatic rollback patch generated.\n- **Interactive Conflicts** — Ambiguous cases enter interactive mode for human decision.\n- **Reusable Rules** — Export inferred patterns to `.codemod.yaml` files. Share with your team via version control.\n- **Built-in Templates** — Common refactoring patterns ready to use out of the box.\n- **CI/CD Ready** — `--ci` mode outputs machine-readable JSON. Use `--fail-on-match` for automated checks.\n- **Blazing Fast** — Built in Rust with parallel file scanning. Handles 100k+ file codebases in seconds.\n- **Multi-Language** — Powered by tree-sitter. Currently supports TypeScript/JavaScript, with Python and Go coming soon.\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\n# Via cargo\ncargo install codemod-cli\n\n# Via curl (Linux/macOS)\ncurl -fsSL https://raw.githubusercontent.com/wellkilo/codemod-pilot/main/scripts/install.sh | sh\n\n# Via Homebrew (coming soon)\nbrew install codemod-pilot\n```\n\n### Your First Codemod (30 seconds)\n\n```bash\n# 1. Teach it a transformation\ncodemod-pilot learn \\\n  --before 'console.log(msg)' \\\n  --after  'logger.info(msg)'\n\n# 2. See what it found\ncodemod-pilot scan --target ./src/\n\n# 3. Preview the diff\ncodemod-pilot apply --preview\n\n# 4. Apply changes\ncodemod-pilot apply --execute\n\n# 5. Made a mistake? Roll back instantly\ncodemod-pilot apply --rollback\n```\n\n## 🧠 How It Works\n\n```\n┌─────────────┐     ┌──────────────┐     ┌─────────────┐     ┌──────────────┐\n│   Example    │────▶│   Pattern    │────▶│  Codebase   │────▶│    Apply     │\n│ before/after │     │  Inference   │     │   Scanner   │     │  \u0026 Rollback  │\n└─────────────┘     └──────────────┘     └─────────────┘     └──────────────┘\n                          │                     │\n                    ┌─────▼─────┐         ┌─────▼─────┐\n                    │ AST Diff  │         │ Parallel  │\n                    │ Analysis  │         │ Matching  │\n                    └───────────┘         └───────────┘\n```\n\n1. **Parse**: Both \"before\" and \"after\" code snippets are parsed into ASTs using tree-sitter\n2. **Diff**: The engine computes a structural diff between the two ASTs, identifying which nodes changed and how\n3. **Generalize**: Variable parts (identifiers, literals) are detected and converted into pattern variables\n4. **Match**: The generalized pattern is used to scan target files, finding all structurally similar code\n5. **Transform**: Matched code is rewritten according to the inferred transformation rule\n6. **Validate**: Results are presented for review; a rollback patch is always generated before any writes\n\n## 💡 Examples\n\n### Rename a Function and Its Parameters\n\n```bash\ncodemod-pilot learn \\\n  --before 'fetchUserInfo({ userId: id })' \\\n  --after  'getUserProfile({ profileId: id })'\n\ncodemod-pilot apply --target ./src/ --execute\n```\n\n### Migrate from Moment.js to Day.js\n\n```bash\n# Create examples file\ncat \u003e examples.yaml \u003c\u003c 'EOF'\nexamples:\n  - before: \"moment(date).format('YYYY-MM-DD')\"\n    after: \"dayjs(date).format('YYYY-MM-DD')\"\n  - before: \"moment(date).add(1, 'days')\"\n    after: \"dayjs(date).add(1, 'day')\"\n  - before: \"moment(date).diff(other, 'hours')\"\n    after: \"dayjs(date).diff(other, 'hour')\"\nEOF\n\ncodemod-pilot learn --examples examples.yaml\ncodemod-pilot apply --target ./src/ --preview\n```\n\n### Use a Shared Rule File\n\n```bash\n# Apply a team-shared codemod rule\ncodemod-pilot apply --rule ./codemods/replace-deprecated-api.yaml --target ./src/\n\n# Export your codemod for others\ncodemod-pilot export --output ./codemods/my-migration.yaml\n```\n\n### CI/CD Integration\n\n```yaml\n# .github/workflows/codemod-check.yml\nname: Codemod Check\non: [pull_request]\njobs:\n  check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: codemod-pilot/action@v1\n        with:\n          rule: ./codemods/deprecated-apis.yaml\n          fail-on-match: true\n```\n\n## 📐 Rule Format\n\nCodemod rules are stored as `.codemod.yaml` files:\n\n```yaml\nname: replace-fetch-user-info\ndescription: Migrate fetchUserInfo to getUserProfile\nlanguage: typescript\nversion: \"1.0\"\n\npattern:\n  before: |\n    fetchUserInfo({ userId: $id })\n  after: |\n    getUserProfile({ profileId: $id })\n\n# Optional: restrict to specific file patterns\ninclude:\n  - \"src/**/*.ts\"\n  - \"src/**/*.tsx\"\nexclude:\n  - \"**/*.test.ts\"\n  - \"**/*.spec.ts\"\n```\n\nPattern variables (prefixed with `$`) match any expression and are preserved across the transformation.\n\nFor the full rule specification, see [docs/rule-format.md](docs/rule-format.md).\n\n## 🗣️ Supported Languages\n\n| Language | Status | Grammar |\n|:---|:---:|:---|\n| TypeScript | ✅ Stable | tree-sitter-typescript |\n| JavaScript | ✅ Stable | tree-sitter-javascript |\n| Python | 🚧 Coming in v0.2 | tree-sitter-python |\n| Go | 🚧 Coming in v0.3 | tree-sitter-go |\n| Rust | 📋 Planned | tree-sitter-rust |\n| Java | 📋 Planned | tree-sitter-java |\n\nWant to add a new language? See our [Adding a Language Guide](docs/adding-a-language.md).\n\n## 🗺️ Roadmap\n\n### v0.1 — Core Engine (Current)\n- [x] Example-based pattern inference (single example)\n- [x] Codebase scanning with parallel file processing\n- [x] Diff preview and safe apply with rollback\n- [x] TypeScript/JavaScript support\n- [x] Basic CLI (`learn`, `scan`, `apply`)\n\n### v0.2 — Team Ready\n- [ ] Multi-example inference\n- [ ] Rule export/import (`.codemod.yaml`)\n- [ ] Built-in rule templates\n- [ ] Interactive conflict resolution\n- [ ] Python language support\n\n### v0.3 — CI Ready\n- [ ] `--ci` mode with JSON output\n- [ ] GitHub Action\n- [ ] Go language support\n- [ ] Incremental scanning (git-diff based)\n\n### v1.0 — Community Edition\n- [ ] Plugin system for new languages\n- [ ] Community rule marketplace\n- [ ] VS Code extension\n- [ ] Web playground\n\n## 🏗️ Architecture\n\nSee [docs/architecture.md](docs/architecture.md) for a detailed design overview.\n\n```\ncodemod-pilot/\n├── crates/\n│   ├── codemod-core/       # Pattern inference, matching, transformation\n│   ├── codemod-cli/        # CLI commands and user interaction\n│   └── codemod-languages/  # Tree-sitter language adapters\n├── rules/                  # Built-in codemod rules\n├── tests/                  # Integration tests and fixtures\n└── docs/                   # Documentation\n```\n\n## 🤝 Contributing\n\nWe welcome contributions of all kinds! See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\n**Quick ways to contribute:**\n- 🐛 [Report a bug](https://github.com/codemod-pilot/codemod-pilot/issues/new?template=bug_report.md)\n- 💡 [Request a feature](https://github.com/codemod-pilot/codemod-pilot/issues/new?template=feature_request.md)\n- 🌍 [Add a new language](https://github.com/codemod-pilot/codemod-pilot/issues/new?template=new_language.md)\n- 📝 Submit a built-in codemod rule\n- 📖 Improve documentation\n\n## 📄 License\n\nLicensed under [Apache License, Version 2.0](LICENSE).\n\n---\n\n# 🇨🇳 简体中文\n\n[功能特点](#-功能特点) · [快速开始](#-快速开始) · [工作原理](#-工作原理) · [示例](#-示例) · [规则格式](#-规则格式) · [路线图](#-路线图) · [贡献指南](#-贡献指南)\n\n---\n\n## 问题背景\n\n大规模代码重构非常痛苦。跨 300 个文件重命名 API、从一个库迁移到另一个库、更新废弃的模式——这些任务：\n\n- **手动**：查找替换对代码很危险；正则表达式无法理解 AST 结构\n- **复杂**：使用 jscodeshift 等工具编写基于 AST 的 codemod 需要深入的 AST 操作知识\n- **风险高**：没有适当的预览和回滚，批量更改可能引入细微 bug\n\n## 解决方案\n\n**codemod-pilot** 让你通过**示例**描述代码转换。只需展示\"之前\"和\"之后\"的代码片段，它就会：\n\n1. 🧠 **推断**从示例中推断结构性转换模式\n2. 🔍 **扫描**在整个代码库中查找匹配的模式\n3. 👀 **预览**以统一 diff 格式预览所有建议的更改\n4. ✅ **应用**安全地应用更改，支持自动回滚\n\n```bash\n# 展示你想要更改的内容\ncodemod-pilot learn \\\n  --before 'fetchUserInfo({ userId: id })' \\\n  --after  'getUserProfile({ profileId: id })'\n\n# 预览代码库中所有匹配项\ncodemod-pilot scan --target ./src/\n\n# 放心应用更改\ncodemod-pilot apply --execute\n```\n\n## ✨ 功能特点\n\n- **示例驱动** — 无需 AST 知识，只需展示之前 → 之后\n- **多示例推断** — 为复杂模式提供多个示例；引擎会找到通用转换规则\n- **默认安全** — 应用前预览所有更改，自动生成回滚补丁\n- **交互式冲突处理** — 模糊情况进入交互模式由人工决策\n- **可复用规则** — 将推断的模式导出为 `.codemod.yaml` 文件，通过版本控制与团队共享\n- **内置模板** — 开箱即用的常见重构模式\n- **CI/CD 就绪** — `--ci` 模式输出机器可读的 JSON，使用 `--fail-on-match` 进行自动检查\n- **极速** — 使用 Rust 构建，支持并行文件扫描，可在数秒内处理 10 万+文件的代码库\n- **多语言支持** — 由 tree-sitter 提供支持，目前支持 TypeScript/JavaScript，Python 和 Go 即将推出\n\n## 🚀 快速开始\n\n### 安装\n\n```bash\n# 通过 cargo\ncargo install codemod-cli\n\n# 通过 curl (Linux/macOS)\ncurl -fsSL https://raw.githubusercontent.com/wellkilo/codemod-pilot/main/scripts/install.sh | sh\n\n# 通过 Homebrew（即将推出）\nbrew install codemod-pilot\n```\n\n### 你的第一个 Codemod（30 秒）\n\n```bash\n# 1. 教它一个转换\ncodemod-pilot learn \\\n  --before 'console.log(msg)' \\\n  --after  'logger.info(msg)'\n\n# 2. 查看它找到了什么\ncodemod-pilot scan --target ./src/\n\n# 3. 预览 diff\ncodemod-pilot apply --preview\n\n# 4. 应用更改\ncodemod-pilot apply --execute\n\n# 5. 犯了错误？立即回滚\ncodemod-pilot apply --rollback\n```\n\n## 🧠 工作原理\n\n```\n┌─────────────┐     ┌──────────────┐     ┌─────────────┐     ┌──────────────┐\n│   示例       │────▶│   模式        │────▶│  代码库      │────▶│    应用      │\n│ 之前/之后   │     │   推断        │     │   扫描器     │     │  \u0026 回滚      │\n└─────────────┘     └──────────────┘     └─────────────┘     └──────────────┘\n                          │                     │\n                    ┌─────▼─────┐         ┌─────▼─────┐\n                    │  AST Diff │         │  并行     │\n                    │   分析     │         │  匹配     │\n                    └───────────┘         └───────────┘\n```\n\n1. **解析**：使用 tree-sitter 将\"之前\"和\"之后\"的代码片段解析为 AST\n2. **Diff**：引擎计算两个 AST 之间的结构性 diff，识别哪些节点发生了变化以及如何变化\n3. **泛化**：检测变量部分（标识符、字面量）并将其转换为模式变量\n4. **匹配**：使用泛化模式扫描目标文件，查找所有结构相似的代码\n5. **转换**：根据推断的转换规则重写匹配的代码\n6. **验证**：展示结果供审查；在任何写入之前始终生成回滚补丁\n\n## 💡 示例\n\n### 重命名函数及其参数\n\n```bash\ncodemod-pilot learn \\\n  --before 'fetchUserInfo({ userId: id })' \\\n  --after  'getUserProfile({ profileId: id })'\n\ncodemod-pilot apply --target ./src/ --execute\n```\n\n### 从 Moment.js 迁移到 Day.js\n\n```bash\n# 创建示例文件\ncat \u003e examples.yaml \u003c\u003c 'EOF'\nexamples:\n  - before: \"moment(date).format('YYYY-MM-DD')\"\n    after: \"dayjs(date).format('YYYY-MM-DD')\"\n  - before: \"moment(date).add(1, 'days')\"\n    after: \"dayjs(date).add(1, 'day')\"\n  - before: \"moment(date).diff(other, 'hours')\"\n    after: \"dayjs(date).diff(other, 'hour')\"\nEOF\n\ncodemod-pilot learn --examples examples.yaml\ncodemod-pilot apply --target ./src/ --preview\n```\n\n### 使用共享规则文件\n\n```bash\n# 应用团队共享的 codemod 规则\ncodemod-pilot apply --rule ./codemods/replace-deprecated-api.yaml --target ./src/\n\n# 导出你的 codemod 供他人使用\ncodemod-pilot export --output ./codemods/my-migration.yaml\n```\n\n### CI/CD 集成\n\n```yaml\n# .github/workflows/codemod-check.yml\nname: Codemod Check\non: [pull_request]\njobs:\n  check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: codemod-pilot/action@v1\n        with:\n          rule: ./codemods/deprecated-apis.yaml\n          fail-on-match: true\n```\n\n## 📐 规则格式\n\nCodemod 规则存储为 `.codemod.yaml` 文件：\n\n```yaml\nname: replace-fetch-user-info\ndescription: Migrate fetchUserInfo to getUserProfile\nlanguage: typescript\nversion: \"1.0\"\n\npattern:\n  before: |\n    fetchUserInfo({ userId: $id })\n  after: |\n    getUserProfile({ profileId: $id })\n\n# 可选：限制为特定文件模式\ninclude:\n  - \"src/**/*.ts\"\n  - \"src/**/*.tsx\"\nexclude:\n  - \"**/*.test.ts\"\n  - \"**/*.spec.ts\"\n```\n\n模式变量（以 `$` 为前缀）匹配任何表达式，并在转换过程中保留。\n\n完整的规则规范请参见 [docs/rule-format.md](docs/rule-format.md)。\n\n## 🗣️ 支持的语言\n\n| 语言 | 状态 | 语法分析器 |\n|:---|:---:|:---|\n| TypeScript | ✅ 稳定 | tree-sitter-typescript |\n| JavaScript | ✅ 稳定 | tree-sitter-javascript |\n| Python | 🚧 v0.2 推出 | tree-sitter-python |\n| Go | 🚧 v0.3 推出 | tree-sitter-go |\n| Rust | 📋 计划中 | tree-sitter-rust |\n| Java | 📋 计划中 | tree-sitter-java |\n\n想要添加新语言？请参阅我们的[添加语言指南](docs/adding-a-language.md)。\n\n## 🗺️ 路线图\n\n### v0.1 — 核心引擎（当前版本）\n- [x] 基于示例的模式推断（单个示例）\n- [x] 并行文件处理的代码库扫描\n- [x] Diff 预览和安全应用与回滚\n- [x] TypeScript/JavaScript 支持\n- [x] 基本 CLI（`learn`、`scan`、`apply`）\n\n### v0.2 — 团队就绪\n- [ ] 多示例推断\n- [ ] 规则导出/导入（`.codemod.yaml`）\n- [ ] 内置规则模板\n- [ ] 交互式冲突解决\n- [ ] Python 语言支持\n\n### v0.3 — CI 就绪\n- [ ] 带 JSON 输出的 `--ci` 模式\n- [ ] GitHub Action\n- [ ] Go 语言支持\n- [ ] 增量扫描（基于 git-diff）\n\n### v1.0 — 社区版\n- [ ] 新语言插件系统\n- [ ] 社区规则市场\n- [ ] VS Code 扩展\n- [ ] Web playground\n\n## 🏗️ 架构\n\n有关详细设计概述，请参阅 [docs/architecture.md](docs/architecture.md)。\n\n```\ncodemod-pilot/\n├── crates/\n│   ├── codemod-core/       # 模式推断、匹配、转换\n│   ├── codemod-cli/        # CLI 命令和用户交互\n│   └── codemod-languages/  # Tree-sitter 语言适配器\n├── rules/                  # 内置 codemod 规则\n├── tests/                  # 集成测试和测试用例\n└── docs/                   # 文档\n```\n\n## 🤝 贡献指南\n\n欢迎各种形式的贡献！详情请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。\n\n**快速贡献方式：**\n- 🐛 报告 bug\n- 💡 请求新功能\n- 🌍 添加新语言\n- 📝 提交内置 codemod 规则\n- 📖 改进文档\n\n## 📄 许可证\n\n根据 [Apache License, Version 2.0](LICENSE) 获得许可。\n\n---\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwellkilo%2Fcodemod-pilot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwellkilo%2Fcodemod-pilot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwellkilo%2Fcodemod-pilot/lists"}