04 贡献流程与风格规范 本节摘要:这是全书正文的最后一节,把「读懂」推向「能改」。当你想给 OpenCode 贡献代码——加 Provider、加工具、改内核——该遵循什么?本节讲贡献流程与风格规范:加 Provider 走哪几步、加工具符合什么契约、改内核守哪些依赖铁律、测试要求。读完本节,你就能从读者变成参与者。 一、贡献的前提:先读懂 贡献的第一步不是写代码,而是确保你读懂了相关部分。具体说: 加 Provider → 读懂第 6 章(LLM 抽象层) 加工具 → 读懂第 5 章(工具系统) 改会话核心 → 读懂第 7、8 章 改权限 → 读懂第 4 章 改客户端 → 读懂第 13 章前三节 读懂的标准是「能向别人讲清楚现状」。
本节摘要:这是全书正文的最后一节,把「读懂」推向「能改」。当你想给 OpenCode 贡献代码——加 Provider、加工具、改内核——该遵循什么?本节讲贡献流程与风格规范:加 Provider 走哪几步、加工具符合什么契约、改内核守哪些依赖铁律、测试要求。读完本节,你就能从读者变成参与者。
贡献的第一步不是写代码,而是确保你读懂了相关部分。具体说:
读懂的标准是「能向别人讲清楚现状」。因为贡献是「在现有架构上加东西」,不理解现状就加,容易破坏一致性。
加一个新 Provider(模型厂商)是常见贡献。流程大致:
1. 确认该 Provider 用哪种协议(已有 or 新建) │ ├─ 已有协议(如 openai-compatible-chat) │ └─ 只需加 Route(端点+认证),5-15 行 │ └─ 新协议 └─ 写新协议模块(构造请求体 + 解析流) │ 2. 加 Provider 配置(门面) │ 3. 加测试(provider fixture + 录像带测试) │ 4. 提交
大多数 Provider 用已有协议(很多家用 openai-compatible-chat),只需加 Route,很简单。只有真正新协议的 Provider 才需要写协议模块。
💡 加 Provider 的「5-15 行」:第 6 章说的「加一个新部署只要 5-15 行」不是夸张——如果用已有协议,真的就是这么少。这是 LLM 抽象层分层带来的红利。
加一个新工具(内置或自定义):
1. 决定工具类型 ├─ 内置工具(进内核) ──► 改内核,符合工具定义抽象(第 5 章) └─ 自定义工具(项目级) ──► 放项目目录,动态导入(第 11 章) │ 2. 定义工具(标识 + 参数 Schema + 执行函数) │ 3. 处理横切(参数校验、截断、追踪会被自动加,你只写 execute) │ 4. 配权限默认规则(第 4 章) │ 5. 加测试
关键点:你只写业务逻辑(execute 函数),横切关注点(校验/截断/追踪)系统自动加(第 5 章 01 节)。不要自己 reimplement 这些。
改内核(领域核心层)时,第 2 章的依赖铁律是硬约束:
提交内核改动的 PR,如果违反依赖方向,基本会被要求改到合规。代码评审里这是一票否决项。
⚠️ 别图方便反向依赖:改内核时可能觉得「这里 import 上层方便」,但这是病毒——一次反向依赖会污染整个依赖图。宁可多写点,也别违反铁律。
OpenCode 有浓厚的测试文化。贡献代码通常要求带测试:
| 测试类型 | 作用 |
|---|---|
| 单元测试 | 测单个模块/函数的正确性 |
| 录像带测试(recorded) | 录一次真实调用,之后重放(尤其 Provider 测试) |
| 端到端测试 | 测完整流程 |
特别说录像带测试——它录一次真实的模型调用(或工具执行),保存响应,之后测试时重放这个响应(不再真调)。这让你能稳定测试「涉及外部依赖」的逻辑,不依赖网络和真实模型。
除了架构铁律,还有些代码风格规范:
最稳的做法是先读几段相关现有代码,模仿其风格——不要把别处的风格带进来。
写完代码、加完测试后,提交 PR。评审会看:
评审反馈后迭代,直到合并。这是开源协作的标准流程。
读完第 13 章四节,你完成了从「读懂」到「能改」的转变:
| 节 | 讲了什么 |
|---|---|
| 01 契约 IR + 双发射器 | codegen 从服务端 API 生成两种客户端 |
| 02 Promise vs 效应客户端 | 两种客户端的取舍 |
| 03 嵌入式 SDK | 进程内复用,同一客户端不同传输 |
| 04 贡献流程 | 加 Provider/工具/改内核的规范 |
这是全书正文的终点。从第 1 章「跑起来」,到第 2 章「看懂架构」,到第 3~12 章「逐子系统拆解」,到第 13 章「能改」——你走完了从使用者到参与者的完整旅程。
全书十三章正文到此结束。附录 A 是检索型参考,可随时查阅术语、命令、报错排查。