【免费下载链接】free-claude-code
Use Claude Code for free in the terminal, VSCode extension, or via Discord
free-claude-code 是一个把 Claude Code 的 API 请求免费路由到 NVIDIA NIM、OpenRouter 或 LM Studio 的轻量代理项目,支持终端、VSCode 插件和 Discord 三种使用方式。想给它贡献代码却不知从何下手?本文带你从零搭建开发环境,吃透pytest 测试规范与CI 检查流程,让你的第一个 PR 一次通过。
项目为什么适合新手贡献
在写第一行代码之前,先了解这个项目的特点——它对新人非常友好:
| 优势 | 说明 |
|---|---|
| 📦 结构清晰 | 每个模块职责单一:api/负责路由与请求检测,providers/负责各家模型适配,messaging/负责 Discord/Telegram 机器人 |
| 🧪 测试覆盖完整 | tests/ 目录下有 50+ 个测试文件,几乎每个模块都有对应测试,照着写即可 |
| 🤖 规范文档齐全 | CLAUDE.md 明确了编码环境与检查顺序,AGENTS.md 与它内容一致 |
| 🔌 扩展点明确 | 官方鼓励的贡献方向:新增 LLM Provider、新增消息平台、提升测试覆盖率 |
贡献方向的完整说明见 README.md 的 Contributing 部分。
开发环境一键搭建:三步就绪
环境搭建只依赖一个工具:uv(astral 出品的 Python 包与虚拟环境管理器)。
第 1 步:克隆仓库
git clone https://gitcode.com/gh_mirrors/fre/free-claude-code cd free-claude-code第 2 步:同步依赖(自动安装 Python 3.14 与全部 dev 依赖)
uv sync项目要求Python ≥ 3.14(见 pyproject.toml),uv会根据 .python-version 自动处理,无需手动装 Python。
第 3 步:跑一遍测试验证环境
uv run pytest看到一片绿(PASSED)就说明环境就绪。项目所有命令都通过uv run执行,这是 CLAUDE.md 中的硬性约定——不要用全局python命令。
上面就是本项目运行后的效果:Claude Code 无需 Anthropic API Key 即可工作
项目结构快速导航
动手前花两分钟熟悉目录,修改代码时能少走弯路:
free-claude-code/ ├── server.py # 服务入口 ├── api/ # FastAPI 路由、请求检测、优化处理器 ├── providers/ # 各家模型 Provider(NIM / OpenRouter / LM Studio) │ └── common/ # 共享工具:SSE 构建器、消息转换器、解析器 ├── messaging/ # Discord / Telegram 机器人、会话管理 ├── config/ # 配置与日志 ├── cli/ # CLI 会话与进程管理 └── tests/ # Pytest 测试套件(与源码目录一一对应)两个高频文件值得先看:
- config/settings.py:全部配置项的集中定义,环境变量的"说明书"(.env.example 也同步了这些变量)
- providers/base.py:所有 Provider 的抽象基类,写新 Provider 时从这里继承
测试规范详解:pytest + conftest 夹具
测试如何组织
测试目录与源码目录一一对应,例如:
- tests/providers/ → 测试
providers/下的模型适配与消息转换 - tests/api/ → 测试 API 路由与请求优化逻辑
- tests/messaging/ → 测试 Discord/Telegram 平台与树状会话
conftest.py:测试的"公共工具箱"
tests/conftest.py 定义了全套可复用夹具(fixtures),写新测试时优先复用而不是重复造轮子:
| 夹具 | 用途 |
|---|---|
provider_config/nim_provider/open_router_provider/lmstudio_provider | 三家 Provider 的现成测试实例 |
mock_cli_session/mock_cli_manager | 模拟 CLI 会话,避免真实启动 Claude |
mock_platform | 模拟消息平台,不真正调用 Discord/Telegram API |
incoming_message_factory | 工厂函数,快速构造入站消息对象 |
_isolate_from_dotenv(autouse) | 自动生效:测试中屏蔽.env文件干扰,保证隔离性 |
两个值得学习的细节:
- 异步测试:项目使用
pytest-asyncio,测试异步函数时直接async def即可 - 日志断言:
_propagate_loguru_to_caplog夹具把 loguru 日志桥接到 pytest 的caplog,你可以断言日志输出
写测试的三条铁律
来自 CLAUDE.md 的明确要求:
- ✅ 新功能必须补测试,包括边界情况,然后运行
uv run pytest - ✅ 测试必须不依赖真实 API Key(conftest 已注入
test_key) - ❌ 禁止用
# type: ignore或# ty: ignore掩盖类型问题——必须修复根源
CI 流程全解:5 道关卡逐一拆解
CI 配置在 .github/workflows/tests.yml,触发条件很简单:推送到main/master分支,或提交 PR 时自动运行(见 tests.yml)。
任何一道关卡失败都会阻止合并,本地先跑一遍是最快的调试方式:
| 顺序 | 关卡 | CI 中的命令 | 作用 |
|---|---|---|---|
| 1️⃣ | 禁止类型压制 | 全仓库 grep# type: ignore | 出现即直接失败(tests.yml) |
| 2️⃣ | 格式检查 | uv run ruff format --check | 检查代码格式是否符合规范 |
| 3️⃣ | 风格检查 | uv run ruff check | 检查未用导入、常见 bug 等(规则见 pyproject.toml) |
| 4️⃣ | 类型检查 | uv run ty check | 静态类型检查,目标 Python 3.14 |
| 5️⃣ | 运行测试 | uv run pytest -v --tb=short | 跑完整测试套件 |
💡小技巧:本地执行顺序与 CI 完全一致,建议直接按此顺序执行——先ruff format自动修复格式,再ruff check,然后ty check,最后pytest。这套顺序同样写在 README.md 的 Development 部分。
几个容易踩的坑:
- 行宽 88:ruff 的
line-length设为 88(pyproject.toml),超长行交给ruff format自动处理 - 引号风格:统一双引号
quote-style = "double" - CI 超时 15 分钟:测试跑得异常慢时要留意,避免阻塞 CI
贡献四步走:从分支到 PR
完整流程如下,每一步都有对应检查点:
- 建分支:
git checkout -b my-feature,分支名用短横线小写(如add-groq-provider) - 写代码 + 补测试:改动尽量小而聚焦;新逻辑在 tests/ 对应子目录补测试
- 本地全绿:按 CI 顺序执行
uv run ruff format && uv run ruff check && uv run ty check && uv run pytest - 提交 PR:描述中说明 [改动的文件]、[修改的逻辑]、[验证方式] 与 [剩余风险]——这是 CLAUDE.md 总结标准的要求
值得优先做的贡献方向
| 方向 | 说明 | 参考位置 |
|---|---|---|
| ➕ 新增 Provider | 继承OpenAICompatibleProvider适配 Groq、Together AI 等 OpenAI 兼容接口 | providers/openai_compat.py |
| ➕ 新增消息平台 | 实现MessagingPlatform抽象类即可接入 Slack 等平台 | messaging/platforms/base.py |
| 🧪 提升测试覆盖 | 为尚未覆盖的边界分支补测试用例 | tests/conftest.py |
架构层面的原则(共享逻辑下沉到providers/common/、避免硬编码、封装优于直接属性赋值等)都写在 CLAUDE.md,动手前读一遍能避免返工。
常见问题 FAQ
Q:本地测试通过但 CI 失败,为什么?最常见原因是漏跑了ruff format(CI 用--check模式只检查不修改),或代码中出现了# type: ignore注释。按 CI 的 5 道关卡顺序在本地复现一次即可定位。
Q:需要配置 API Key 才能开发吗?不需要。conftest 会注入测试用的假 key(test_key)并屏蔽.env文件,所有测试离线运行。
Q:语音转写相关的依赖很大,必须安装吗?不用。语音功能是可选依赖组(voice/voice_local,见 pyproject.toml),普通开发uv sync默认不包含它们。
写在最后
参与 free-claude-code 开发的核心心法就一句话:先读 CLAUDE.md,按 CI 的 5 道关卡在本地跑绿,再提 PR。项目结构清晰、测试夹具齐全、规范文档明确,新手完全可以在一天内从克隆仓库走到提交第一个 PR。祝你顺利,期待你的第一个贡献! 🎉
【免费下载链接】free-claude-code
Use Claude Code for free in the terminal, VSCode extension, or via Discord
相关推荐
如何参与Drawbridge开发:项目结构、代码规范、测试流程与贡献指南
如何参与Drawbridge开发:项目结构、代码规范、测试流程与贡献指南 Drawbridge 是一款面向 Claude Code 和 Cursor 的浏览器可
如何参与Sunnify开发?测试体系、代码规范与PR工作流完整教程
如何参与Sunnify开发?测试体系、代码规范与PR工作流完整教程 想为 Sunnify 这个开源 Spotify 下载器贡献代码吗?Sunnify 是一款支持
Dendrite 贡献开发全指南:DCO 签名、代码规范、测试与 CI 流程
Dendrite 贡献开发全指南:DCO 签名、代码规范、测试与 CI 流程 Dendrite 是由 Matrix.org 基金会维护、使用 Go 语言编写的第
后端即时通讯
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考