CONTRIBUTING.zh-CN.md
Rama main · réplica de lectura del repositorio original.
# 贡献 kageos
感谢你愿意改进 kageos。本仓库源码公开,当前采用 Business Source License 1.1,并在各版本发布三年后转为 Apache-2.0。贡献前请阅读 [LICENSE](LICENSE) 和 [LICENSE_FAQ.md](LICENSE_FAQ.md),确认你理解当前授权范围和转换机制。
## 开始之前
- 较大的功能、架构调整或产品方向变化,请先和维护者讨论。
- 保持 PR 聚焦。不要把重构、格式化、依赖升级和产品行为变化混在一个 PR 中。
- 不要提交真实密钥、客户数据、生成的生产文件、license、`namespace/`、`local/` 或运行时数据目录。
- 对外描述请遵循 [源码与授权对外口径](docs/source-available-messaging.md),统一使用“源码公开、可自托管”。
## 贡献流程
1. Fork 仓库,并从最新 `main` 创建分支。
2. 按本文的本地开发流程启动 kageos。
3. 进行小而清晰的修改。
4. 为 bug fix 或新功能补充测试,或在 PR 中说明验证方式。
5. 行为、部署、公开定位有变化时同步更新 README 或 docs。
6. 提交 Pull Request,并说明改了什么、为什么改、如何验证。
所有代码修改都应通过 Pull Request 合并。PR 需要通过 CI,并由维护者审核后合并。
## 贡献者许可协议
Pull Request 合并前,作者必须阅读并接受 [kageos 贡献者许可协议](CONTRIBUTOR_LICENSE_AGREEMENT.zh-CN.md)。同时提供[英文版本](CONTRIBUTOR_LICENSE_AGREEMENT.md)供国际贡献者阅读。
贡献者通过勾选 Pull Request 模板中的 CLA 确认项接受协议,该确认同时适用于接受前后提交的贡献。如果贡献的权利属于雇主或其他组织,贡献者必须有权授予 CLA 中约定的权利;维护者可以要求贡献者另行提供企业授权证明。
## 分支模型
从 `main` 拉分支,推荐命名:
```text
feat/short-feature-name
fix/short-bug-name
docs/short-doc-change
chore/short-maintenance-change
```
提交 PR 前请同步最新 `main`,解决冲突,并确认没有提交本地运行时文件或私有数据。
## Commit 规范
推荐使用 Conventional Commits:
```text
feat: add scheduled agent notification tool
fix: prevent incomplete tool messages after interruption
docs: update production deployment guide
test: cover service tree bundle import
chore: refresh generated API docs
```
常用类型包括 `feat`、`fix`、`docs`、`refactor`、`test`、`chore`、`ci`。提交说明请尽量清晰,说明用户可见行为或维护目的。
## 本地开发
使用 `kagectl` 作为本地开发入口。仓库中仍保留底层 Compose 文件,但新贡献者不需要直接记住历史路径或手工配置环境变量。
只读运行可直接克隆上游仓库;准备提交 PR 时请先 fork:
```bash
git clone https://github.com/kageos/kageos.git
cd kageos
```
最短路径是运行仓库脚本,它会同时启动基础设施、后端和前端:
```bash
./scripts/dev.sh
```
需要分别调试时,再单独启动本地后端:
```bash
go run ./cmd/kagectl bootstrap --dev
```
这个命令会初始化本地 dev 工作区、启动 MySQL / NATS / MinIO、确保本地 user-app base image 存在,并以前台方式运行后端。默认优先使用 Podman;如果想用 Docker:
```bash
go run ./cmd/kagectl bootstrap --dev --engine docker
```
停止后端可按 `Ctrl-C`。停止本地基础设施:
```bash
go run ./cmd/kagectl down
```
另开终端启动前端:
```bash
cd web
npm install
npm run dev
```
启动后访问 `http://localhost:5173`。`kagectl bootstrap --dev` 会打印 `kageos dev initialization summary`;使用用户名 `system` 和其中的 `Admin password` 登录。如果需要重新查看密码,可以执行 `go run ./cmd/kagectl init --dev`,或读取 `.kageos/dev/env/kageos.env` 中的 `SYSTEM_USER_PASSWORD`。
## 常用开发命令
```bash
go run ./cmd/kagectl status
go run ./cmd/kagectl doctor
go run ./cmd/kagectl verify
go run ./cmd/kagectl logs main
go run ./cmd/kagectl logs infra
go run ./cmd/kagectl down
```
## 维护 AI 套件
公共 `skills/` 目录是 Codex 和 Claude Code 使用的五个 kageos Skill 唯一
源码。社区对本地启动、源码导览、工作空间开发、真实验收或 Hub 发布流程的
改进,都应通过普通 Pull Request 提交到这里。
- 先修改 `skills/<skill-name>`,不要手工修改 `plugins/kageos/skills` 下的生成副本。
- 保持 `SKILL.md` 精简;重复且需要确定性的工作放进 `scripts/`,按需加载的详细说明放进 `references/`。
- 使用可用的通用 Skill 校验器检查每个变更,并实际运行配套脚本测试或代表性命令。
- 提交前运行 `python3 scripts/package-kageos-plugin.py`,同一个 PR 同时包含源 Skill 和生成的插件副本。
- 普通 Skill PR 不要自行修改插件版本;只有明确准备发布时才统一升级版本和更新日志。
- Skill、参考、示例和测试夹具中不得加入凭证、访问令牌、私有工作区内容、本地运行态或客户数据。
修改 `kageos-contributor` 时必须保留本地启动安全门禁:优先复用健康的
Docker/Podman 环境;安装系统软件前解释准确动作;未经检查和明确同意,不得
初始化、删除或重置已经存在的 Podman machine。
## 本地验证
按修改范围运行对应检查。
后端:
```bash
bash scripts/test-core-go.sh
```
前端:
```bash
cd web
npm ci
npm run check:architecture
npm run lint
npm run type-check
npm run test:unit -- --run
npm run build
```
仓库治理:
```bash
bash scripts/check-sensitive-files.sh
bash scripts/check-sdk-boundaries.sh
bash scripts/check-doc-links.sh
git diff --check
```
安全依赖检查:
```bash
cd web
npm audit --omit=dev
```
```bash
go run golang.org/x/vuln/cmd/govulncheck@latest ./cmd/... ./core/... ./dto/... ./pkg/...
```
## PR 清单
- 修改有清晰原因,范围尽量小。
- 用户可见行为有测试,或 PR 中解释了验证方式。
- 行为、部署或公开定位变化时同步更新文档。
- 新日志不泄露 secret、token、license key、客户数据或私有工作区路径。
- 新依赖确有必要、仍在维护,并且与项目授权模型兼容。
## 行为准则和安全问题
参与社区请遵守 [CODE_OF_CONDUCT.zh-CN.md](CODE_OF_CONDUCT.zh-CN.md)。安全漏洞请按 [SECURITY.zh-CN.md](SECURITY.zh-CN.md) 私下报告,不要发公开 issue。
提交贡献即表示你同意将贡献按本仓库当前授权条款发布,并接受对应版本未来按 [LICENSE](LICENSE) 中的 Change License 机制转换为 Apache License 2.0,同时受贡献者许可协议所授予附加权利的约束,除非你和维护者另有书面约定。