feat(repo): add CLA mechanism for external contributors

Introduce a Contributor License Agreement (CLA) so external contributions
can be licensed under AGPL-3.0 and any other terms (incl. closed-source),
keeping the AGPL-3.0 codebase usable in closed-source projects.

- CLA.md: authoritative English CLA (ICLA + employer authorization, v1.0)
- CLA.zh.md: non-binding Chinese reference translation
- CONTRIBUTING.md: bilingual contributing guide, points to CLA
- .github/workflows/cla.yml: self-hosted cla-assistant-action that records
  signatures into cla-signatures/version-1.json; exempts maintainers & bots
  via allowlist; skips when CLA_BOT_TOKEN is unset
- .github/PULL_REQUEST_TEMPLATE.md: guides contributors to sign
- README.{md,en.md,ja.md}: add License & contributing footer
- app/terms: note CLA requirement in the IP section

Enforcement requires repo-level setup (PAT secret + branch protection)
documented in cla.yml; not covered by this commit.
This commit is contained in:
yuanzonghao
2026-06-17 12:23:46 +08:00
parent 98d8e83c92
commit 2b0b9c6f8d
9 changed files with 524 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
## Summary
<!-- Briefly describe what this PR changes, and why. Link any related issues. -->
## CLA
- [ ] I have read and signed the [Contributor License Agreement (CLA)](https://github.com/zonghaoyuan/infiplot/blob/staging/CLA.md).
> If you have not yet signed, read the [CLA](https://github.com/zonghaoyuan/infiplot/blob/staging/CLA.md)
> and reply to this PR with: `I have read the CLA Document and I hereby sign the CLA`
> You only need to sign once.
## Self-check
- [ ] I have read [`CONTRIBUTING.md`](../CONTRIBUTING.md)
- [ ] `pnpm typecheck` passes
- [ ] `pnpm lint` passes
## Type of change
<!-- Check all that apply -->
- [ ] `feat` — new feature
- [ ] `fix` — bug fix
- [ ] `perf` / `refactor` — performance or code-quality change
- [ ] `docs` — documentation only
- [ ] `chore` — build, deps, tooling, etc.
+63
View File
@@ -0,0 +1,63 @@
name: "CLA Assistant"
# Requires the following GitHub repository secret to be configured:
# CLA_BOT_TOKEN — a fine-grained Personal Access Token with
# `Contents: Read and write` (and `Pull requests: Read`) scope on this
# repository. The GITHUB_TOKEN cannot commit to a protected branch, so a PAT
# is needed to record signatures into cla-signatures/version-1.json.
#
# To actually enforce the CLA, add `cla/cla-assistant.yml:CLAAssistant` (the
# status check produced by this job) as a required status check in the branch
# protection rules for `main` and `staging`.
on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, closed, synchronize]
jobs:
CLAAssistant:
runs-on: ubuntu-latest
steps:
- name: "CLA Assistant"
# SKIPPED when no secrets are configured, so forks/renames of this
# repo don't fail CI out of the box.
if: >
${{ secrets.CLA_BOT_TOKEN != '' }} &&
(
(github.event.comment.body == 'recheckcla' ||
github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') ||
github.event_name == 'pull_request_target'
)
uses: contributor-assistant/cla-assistant-action@v2.6.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_BOT_TOKEN }}
with:
# Signatures are stored in-repo (self-hosted mode); version-N lets us
# roll the CLA text forward by bumping the path and re-collecting.
path-to-signatures: "cla-signatures/version-1.json"
branch: "main"
# Link to the authoritative English CLA. Chinese reference:
# https://github.com/zonghaoyuan/infiplot/blob/staging/CLA.zh.md
path-to-cla-document: "https://github.com/zonghaoyuan/infiplot/blob/staging/CLA.md"
allowlist: "github-actions[bot],dependabot[bot],zonghaoyuan,*bot,web-flow"
block-sharing-crucial-repositories: true
create-file-commit-message: "docs(cla): record signature for @"
custom-notsigned-prcomment: >
感谢你的 PR!在合并之前,请先签署我们的《贡献者许可协议》(CLA)。阅读
[CLA.md](https://github.com/zonghaoyuan/infiplot/blob/staging/CLA.md)
[中文参考译文](https://github.com/zonghaoyuan/infiplot/blob/staging/CLA.zh.md))后,
在本 PR 中回复以下内容即视为签署:
```
I have read the CLA Document and I hereby sign the CLA
```
你只需签署一次,之后对 InfiPlot 的所有贡献都受同一协议约束。
custom-pr-sign-comment: "The pull request signer accepted the CLA."
custom-allsigned-prcomment: "🎉 All contributors have signed the CLA."
+145
View File
@@ -0,0 +1,145 @@
# Contributor License Agreement — InfiPlot
Thank you for your interest in contributing to InfiPlot ("the Project"). This
Contributor License Agreement ("CLA") governs the rights you grant to the
Project maintainers for your Contributions. **By signing this CLA, you confirm
that you have read and agree to its terms.** A non-binding Chinese translation
is available in [`CLA.zh.md`](./CLA.zh.md); in the event of any conflict, this
English version controls.
This CLA is version **1.0**.
## 1. Definitions
- **"You"** (or **"Contributor"**) means the individual who submits a
Contribution to the Project and signs this CLA. If You are submitting a
Contribution on behalf of Your employer, the terms of Section 4 (Employer
Authorization) also apply.
- **"We"** (or **"the Project maintainers"**) means the maintainers of the
InfiPlot project — the individuals and entities authorized to administer the
Project, including the right to use Contributions as described in this CLA.
- **"Contribution"** means any original work of authorship, including any
modification or addition to the existing source code, documentation, assets,
or other materials, that is intentionally submitted by You to the Project.
For the avoidance of doubt, this includes submissions made electronically
(via pull request, commit, issue, comment, or any other channel) as well as
any code, text, or other content submitted for inclusion in the Project.
- **"Project"** means the InfiPlot software and all related repositories and
materials maintained by Us.
## 2. Copyright License
Subject to the terms of this CLA, You hereby grant to Us and to the recipients
of software distributed by Us a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
derivative works of, publicly display, publicly perform, sublicense, and
distribute Your Contributions and such derivative works.
Without limiting the foregoing, this license expressly permits Us to use,
modify, and distribute Your Contributions under the terms of the
[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html)
(under which the Project is currently distributed) **and** under any other
license terms of Our choosing, including proprietary, closed-source, or
commercial license terms. This is the primary purpose of this CLA.
## 3. Patent License
Subject to the terms of this CLA, You hereby grant to Us and to the recipients
of software distributed by Us a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in Section 6) patent
license to make, have made, use, offer to sell, sell, import, and otherwise
transfer the Contribution, where such license applies only to those patent
claims licensable by You that are necessarily infringed by Your
Contribution(s) alone or by combination of Your Contribution(s) with the
Project to which such Contribution(s) was submitted.
## 4. Employer Authorization
You represent that, if Your Contribution was created in the course of Your
employment, or if Your employer (or any entity other than You) might have any
rights, title, or interest in Your Contribution (for example, because You used
employer-owned equipment, resources, or time), then one of the following is
true:
1. Your employer (or such other entity) has authorized You to submit the
Contribution and to grant the licenses in Sections 2 and 3; **or**
2. Your Contribution is not subject to the intellectual property rights of
Your employer (or any such other entity) — for example, because the work
was done entirely on Your own time, using only Your own resources, and
outside the scope of Your employment.
If We request it, You agree to provide written confirmation of the applicable
authorization from Your employer (or such other entity) in a form acceptable
to Us. You acknowledge that, where an employer (or any entity other than You)
may have rights in a Contribution, We may decline to accept it until suitable
authorization is provided.
## 5. Your Representations and Warranties
You represent that:
1. Each of Your Contributions is entirely Your original work (or, if not, has
been submitted to the Project with appropriate attribution and under a
license compatible with this CLA), and You have the right to submit it.
2. To the best of Your knowledge, each Contribution does not infringe the
intellectual property rights (including, without limitation, copyright and
patent rights) of any third party.
3. You are legally entitled to grant the licenses set out in Sections 2 and 3,
and no other agreement, obligation, or restriction (including, without
limitation, any employment agreement or open-source license) prevents You
from doing so.
You provide Your Contributions **"as is"** and, except for the express
representations and warranties in this CLA, You make no other representations
or warranties of any kind, whether express or implied.
## 6. Withdrawal and Revocation
You may revoke this CLA, or the patent license granted in Section 3, by giving
Us written notice (by email to **hi@infiplot.com**). Any such revocation takes
effect **only as to Contributions You submit after** the date We receive Your
notice, and does not affect any Contribution You submitted before that date or
the rights already granted in any such Contribution.
## 7. Disclaimer
EXCEPT FOR THE EXPRESS REPRESENTATIONS AND WARRANTIES IN THIS CLA, YOUR
CONTRIBUTIONS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT WILL YOU BE
LIABLE TO US OR TO ANY OTHER PARTY FOR ANY DAMAGES, WHETHER DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL, ARISING OUT OF OR RELATED TO THIS CLA
OR YOUR CONTRIBUTIONS.
## 8. Miscellaneous
1. **No obligation.** Nothing in this CLA obligates Us to accept or use any
Contribution, or to distribute any version of the Project that includes
Your Contribution.
2. **Retention of rights.** This CLA grants Us a license to Your
Contributions; it does not transfer ownership of Your copyright or patent
rights to Us. You retain all right, title, and interest in and to Your
Contributions, subject to the licenses granted here.
3. **Entire agreement.** This CLA, together with any terms referenced herein,
constitutes the entire agreement between You and Us regarding the subject
matter hereof and supersedes any prior agreements on that subject.
4. **Modifications.** We may publish a new version of this CLA from time to
time (for example, `version-2`). When We do, the new version will apply to
Contributions You submit after it takes effect; Contributions You submitted
under a prior version remain governed by that prior version.
5. **Severability.** If any provision of this CLA is held to be unenforceable
or invalid, that provision will be limited or eliminated to the minimum
extent necessary, and the remaining provisions will remain in full force.
6. **Governing law.** This CLA is governed by the laws applicable to the
Project maintainers' jurisdiction, without regard to its conflict-of-laws
principles.
## 9. Contact
If You have any questions about this CLA, contact Us at **hi@infiplot.com**.
---
_By signing this CLA (for example, by replying to a pull request with the
phrase "I have read the CLA Document and I hereby sign the CLA"), You confirm
that You have read, understood, and agree to be bound by its terms._
+66
View File
@@ -0,0 +1,66 @@
# 贡献者许可协议(CLA)— InfiPlot
> **免责声明:本中文版本仅供参考,不具法律约束力。如中英文有任何不一致,以 [`CLA.md`](./CLA.md) 英文版本为准。**
感谢你有兴趣为 InfiPlot(以下简称"本项目")做贡献。本《贡献者许可协议》(以下简称"本 CLA")规定了你就你所提交的贡献授予项目维护者的权利。**一旦你签署本 CLA,即表示你已阅读并同意其全部条款。** 本 CLA 的版本号为 **1.0**
## 1. 定义
- **"你"(或"贡献者"**:指提交贡献并签署本 CLA 的个人。若你代表雇主提交贡献,则第 4 条(雇主授权)的规定一并适用。
- **"我们"(或"项目维护者"**:指 InfiPlot 项目的维护者——经授权管理本项目的个人与实体,包括依本 CLA 使用贡献的权利。
- **"贡献"**:指由你有意提交给本项目的任何原创作品,包括对现有源代码、文档、素材或其他资料的任何修改或新增。为避免歧义,这包括以电子方式(通过 pull request、commit、issue、评论或任何其他渠道)提交的内容,以及任何为本项目提交的代码、文字或其他内容。
- **"本项目"**:指由我们维护的 InfiPlot 软件及其所有相关仓库与资料。
## 2. 版权许可
在本 CLA 条款的前提下,你在此授予我们以及我们分发软件的接收者一项永久的、全球范围的、非独占的、免费的、免版税的、不可撤销的版权许可,允许其复制、制作衍生作品、公开展示、公开表演、再许可(sublicense)及分发你的贡献及其衍生作品。
前述许可明确允许我们依据 [GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html)(本项目当前所采用的开源协议)**以及**我们自行选择的任何其他许可条款——包括专有、闭源或商业许可条款——来使用、修改和分发你的贡献。这是本 CLA 的核心目的。
## 3. 专利许可
在本 CLA 条款的前提下,你在此授予我们以及我们分发软件的接收者一项永久的、全球范围的、非独占的、免费的、免版税的、不可撤销的(除第 6 条另有规定外)专利许可,允许其制造、委托他人制造、使用、许诺销售、销售、进口或以其他方式转让该贡献;该许可仅限于你有权许可的、且仅因你的贡献单独存在或你的贡献与提交该贡献的本项目结合而必然侵权的那些专利权利要求。
## 4. 雇主授权
你声明:如果你的贡献是在受雇期间创作的,或者你的雇主(或你以外的任何实体)可能对该贡献享有任何权利、所有权或利益(例如因为你使用了雇主所有的设备、资源或工作时间),则下列任一情形成立:
1. 你的雇主(或该其他实体)已授权你提交该贡献,并授予第 2 条与第 3 条中的许可;**或**
2. 你的贡献不受你的雇主(或任何该等其他实体)的知识产权约束——例如,该工作完全在你的个人时间内、仅使用你自己的资源完成,且不在你的雇佣职责范围之内。
如果我们提出要求,你同意以我们认可的形式提供来自你的雇主(或该等其他实体)的书面授权确认。你知悉:当雇主(或你以外的任何实体)可能对某一贡献享有权利时,在获得适当授权之前,我们可拒绝接受该贡献。
## 5. 你的陈述与保证
你声明并保证:
1. 你的每一项贡献均为你完全的原创作品(若非如此,则已在适当署名且在一种与本 CLA 兼容的许可下提交给本项目),且你有权提交该贡献;
2. 据你所知,每一项贡献均不侵犯任何第三方的知识产权(包括但不限于版权与专利权);
3. 你在法律上有权授予第 2 条与第 3 条中的许可,且不存在任何其他协议、义务或限制(包括但不限于任何雇佣协议或开源协议)阻止你这样做。
你按"现状"提供你的贡献。除本 CLA 中明示的陈述与保证外,你不作任何其他明示或暗示的陈述与保证。
## 6. 撤回与撤销
你可以通过向我们发出书面通知(发送电子邮件至 **hi@infiplot.com**)来撤销本 CLA 或第 3 条授予的专利许可。任何此类撤销**仅对你在我们收到通知之后提交的贡献生效**,不影响你在该日期之前提交的贡献或在该等贡献中已授予的权利。
## 7. 免责声明
除本 CLA 中明示的陈述与保证外,你的贡献按"现状"提供,不附带任何种类的保证,无论是明示还是暗示,包括但不限于对适销性、特定用途适用性或不侵权的任何保证。在任何情况下,你均不对我们或任何其他方因本 CLA 或你的贡献而产生或与之相关的任何直接、间接、特殊、附带或后果性损害承担责任。
## 8. 其他
1. **无义务。** 本 CLA 中的任何内容均不要求我们必须接受或使用任何贡献,也不要求我们必须分发包含你贡献的任何项目版本。
2. **权利保留。** 本 CLA 仅授予我们对你贡献的许可,并不将你版权或专利权的所有权转让给我们。在本协议授予的许可前提下,你保留对你贡献的全部权利、所有权与利益。
3. **完整协议。** 本 CLA 连同其中援引的任何条款,构成你与我们之间关于本协议标的事项的完整协议,并取代此前关于该标的事项的任何协议。
4. **修改。** 我们可能会不时发布本 CLA 的新版本(例如 `version-2`)。当我们发布新版本时,该新版本将适用于你在其生效之后提交的贡献;你在先前版本下提交的贡献仍受该先前版本约束。
5. **可分性。** 若本 CLA 的任何条款被裁定为不可执行或无效,该条款将被在必要的最小范围内予以限制或排除,其余条款继续完全有效。
6. **适用法律。** 本 CLA 受项目维护者所在司法管辖区适用的法律管辖,不适用其法律冲突原则。
## 9. 联系方式
如对本 CLA 有任何疑问,请通过 **hi@infiplot.com** 联系我们。
---
_一旦你签署本 CLA(例如在 pull request 中回复"I have read the CLA Document and I hereby sign the CLA"),即表示你已阅读、理解并同意受其条款约束。_
+181
View File
@@ -0,0 +1,181 @@
# Contributing to InfiPlot
Thanks for your interest in contributing to InfiPlot! 🎉 We welcome bug
reports, feature ideas, code, docs, and everything in between.
[English](#contributing-to-infiplot) · [中文](#贡献指南)
---
## Contributing
### Sign the CLA
InfiPlot is open-sourced under
[AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html). To let us use external
contributions alongside the project's other (including closed-source)
licensing, **every external contributor must sign our Contributor License
Agreement (CLA)** before a pull request can be merged:
1. Read the [CLA](./CLA.md). A non-binding Chinese reference translation is in
[CLA.zh.md](./CLA.zh.md).
2. Open your pull request.
3. Reply to the PR with exactly:
```
I have read the CLA Document and I hereby sign the CLA
```
You only need to sign **once**. The CLA bot will record your signature and
update the PR status. Project maintainers and bots are exempt automatically.
> By signing, you grant the project maintainers a license to use your
> contribution under AGPL-3.0 **and** any other terms (including proprietary /
> closed-source). See [CLA.md §2](./CLA.md) for the full terms.
### Development setup
You'll need **Node.js ≥ 22** and **pnpm**.
```bash
git clone https://github.com/<your-fork>/infiplot.git
cd infiplot
pnpm install
cp .env.example .env.local # fill in your provider keys
pnpm dev # http://localhost:3000
```
For provider configuration, see the Configuration guide in
[README.md](./README.md).
### Making changes
1. Fork the repo and create a branch from `staging` (or `main`).
2. Make your changes. Keep them focused — one concern per PR.
3. Validate before pushing:
```bash
pnpm typecheck # tsc --noEmit
pnpm lint # next lint
```
(There's no test suite, so typecheck + lint are the primary gates.)
4. Write a clear PR description and reference any related issues.
### Commit messages
Follow [Conventional Commits](https://www.conventionalcommits.org/), scoped
where it helps. Match the style you see in `git log`:
```
feat(web): add login button to header
fix(play): restore voice retention after prefetch
perf(engine): overlap writer phase B with painting
chore(engine): bump runware timeout default
docs(readme): clarify provider configuration
```
Common scopes: `web`, `play`, `engine`, `api`, `image`, `tts`, `docs`.
### Where to look
- [`AGENTS.md`](./AGENTS.md) — the primary architectural guide; read the
section relevant to your change before editing.
- [`lib/types/index.ts`](./lib/types/index.ts) — shared domain contracts.
- [`lib/engine/`](./lib/engine/) — core story engine.
- [`app/api/`](./app/api/) — serverless API routes.
### Reporting bugs & ideas
Open an [issue](https://github.com/zonghaoyuan/infiplot/issues). Include
reproduction steps, what you expected, and what you saw.
### Contact
hi@infiplot.com
---
## 贡献指南
### 签署 CLA
InfiPlot 以
[AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) 协议开源。为了让我们
可以将外部贡献同时用于项目的其他(含闭源)授权,**每位外部贡献者在 PR 合并
前都必须签署《贡献者许可协议》(CLA)**:
1. 阅读 [CLA](./CLA.md)(中文参考译文见 [CLA.zh.md](./CLA.zh.md))。
2. 提交你的 pull request。
3. 在该 PR 中回复以下内容(一字不差):
```
I have read the CLA Document and I hereby sign the CLA
```
你只需签署**一次**。CLA bot 会记录你的签名并更新 PR 状态。项目维护者与
bot 账户会自动豁免。
> 签署即表示你授予项目维护者一项许可:可依 AGPL-3.0 **及任何其他条款**
> (含专有 / 闭源条款)使用你的贡献。完整条款见 [CLA.md §2](./CLA.md)。
### 开发环境
需要 **Node.js ≥ 22** 和 **pnpm**。
```bash
git clone https://github.com/<你的 fork>/infiplot.git
cd infiplot
pnpm install
cp .env.example .env.local # 填入你的供应商密钥
pnpm dev # http://localhost:3000
```
供应商配置请参阅 [README.md](./README.md) 中的配置教程。
### 修改流程
1. fork 仓库,从 `staging`(或 `main`)创建分支。
2. 修改代码。保持聚焦——一个 PR 只解决一个问题。
3. 推送前自检:
```bash
pnpm typecheck # tsc --noEmit
pnpm lint # next lint
```
(本项目没有测试套件,typecheck 与 lint 是主要校验手段。)
4. 写清楚 PR 描述,关联相关 issue。
### 提交信息
遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范,
必要时带上 scope。参考 `git log` 中的现有风格:
```
feat(web): 给页头加登录按钮
fix(play): 修复预取后语音丢失的问题
perf(engine): 让 writer phase B 与绘画重叠
chore(engine): 提高 runware 超时默认值
docs(readme): 补充供应商配置说明
```
常用 scope`web`、`play`、`engine`、`api`、`image`、`tts`、`docs`。
### 哪里看代码
- [`AGENTS.md`](./AGENTS.md)——主要的架构指南,改代码前请先读相关章节。
- [`lib/types/index.ts`](./lib/types/index.ts)——共享领域契约。
- [`lib/engine/`](./lib/engine/)——核心剧情引擎。
- [`app/api/`](./app/api/)——serverless API 路由。
### 反馈 Bug 与想法
欢迎开 [issue](https://github.com/zonghaoyuan/infiplot/issues),请附复现
步骤、期望行为与实际现象。
### 联系方式
hi@infiplot.com
+8
View File
@@ -221,3 +221,11 @@ See the [Bring-your-own voice Key guide](docs/xiaomi-tts-key.md) for how to obta
## Star history
[![Star History Chart](https://api.star-history.com/svg?repos=zonghaoyuan/infiplot&type=Date)](https://star-history.com/#zonghaoyuan/infiplot&Date)
---
## License & contributing
This project is open-sourced under [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html).
Contributions are welcome! External contributors must sign our Contributor License Agreement (CLA) once before a PR can be merged — see [CONTRIBUTING.md](CONTRIBUTING.md) and [CLA.md](CLA.md).
+8
View File
@@ -220,3 +220,11 @@ Xiaomi は TTS モデルに RPM/TPM 制限を設けています。公開デプ
## スター推移
[![Star History Chart](https://api.star-history.com/svg?repos=zonghaoyuan/infiplot&type=Date)](https://star-history.com/#zonghaoyuan/infiplot&Date)
---
## ライセンスとコントリビュート
本プロジェクトは [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) で公開されています。
コントリビューションを歓迎します!外部コントリビュータは、PR をマージする前に一度だけ《貢献者ライセンス契約》(CLA)に署名する必要があります —— [CONTRIBUTING.md](CONTRIBUTING.md) および [CLA.md](CLA.md) を参照してください。
+8
View File
@@ -232,3 +232,11 @@ InfiPlot 会与四类模型供应商通信。**文本(Text)和视觉(Visio
## Star 趋势
[![Star History Chart](https://api.star-history.com/svg?repos=zonghaoyuan/infiplot&type=Date)](https://star-history.com/#zonghaoyuan/infiplot&Date)
---
## 协议与贡献
本项目基于 [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) 协议开源。
欢迎贡献!外部贡献者在提交 PR 前,需要先签署一次我们的《贡献者许可协议》(CLA)——详见 [CONTRIBUTING.md](CONTRIBUTING.md) 与 [CLA.md](CLA.md)[中文参考译文](CLA.zh.md))。
+18
View File
@@ -97,6 +97,24 @@ export default function TermsPage() {
<p className="mt-3">
</p>
<p className="mt-3">
CLA GitHub {" "}
<a
href="https://github.com/zonghaoyuan/infiplot/blob/staging/CLA.md"
target="_blank"
rel="noopener noreferrer"
className="text-ember-500 hover:text-ember-400 transition-colors underline decoration-clay-900/20 underline-offset-2"
>
CLA.md
</a>
<a
href="https://github.com/zonghaoyuan/infiplot/blob/staging/CLA.zh.md"
target="_blank"
rel="noopener noreferrer"
className="text-ember-500 hover:text-ember-400 transition-colors underline decoration-clay-900/20 underline-offset-2"
>
</a>
</p>
</section>
<section>