感谢您对 aster 的关注!我们欢迎所有形式的贡献。
修复 Bug
发现并修复代码中的问题
新功能
实现路线图中的功能
性能优化
提升代码性能和效率
测试
增加测试覆盖率
讨论
参与技术讨论
答疑
帮助其他开发者
推广
传播项目影响力
| 工具 | 版本 | 说明 |
|---|---|---|
| Go | 1.23+ | 需要泛型和 stream.Reader 支持 |
| Git | 2.0+ | 版本控制 |
| Make | 任意 | 构建工具 |
| Docker | 可选 | 沙箱测试 |
# 克隆主仓库
git clone https://github.com/astercloud/aster.git
cd aster
# 或者 Fork 后克隆
git clone https://github.com/YOUR_USERNAME/aster.git
cd aster
git remote add upstream https://github.com/astercloud/aster.git
# 下载 Go 依赖
go mod download
# 运行测试确认环境
go test ./...
# 设置 API Key
export ANTHROPIC_API_KEY=your_key_here
# 运行基础示例
cd examples/agent
go run main.go
# 运行其他示例
cd examples/mcp
go run main.go
在开始编码前,建议先创建或认领 Issue:
代码规范:
// ✅ 好的代码
// FetchUser retrieves user information from the database.
// Returns ErrUserNotFound if the user doesn't exist.
func FetchUser(ctx context.Context, userID string) (*User, error) {
if userID == "" {
return nil, fmt.Errorf("userID cannot be empty")
}
// Implementation...
return user, nil
}
// ❌ 不好的代码
func fetch(id string) *User {
// 缺少注释、错误处理、类型清晰度
return db.Get(id)
}
注意事项:
// 单元测试示例
func TestFetchUser(t *testing.T) {
ctx := context.Background()
// 测试正常情况
user, err := FetchUser(ctx, "user-123")
if err != nil {
t.Fatalf("FetchUser failed: %v", err)
}
if user.ID != "user-123" {
t.Errorf("user.ID = %s, want user-123", user.ID)
}
// 测试错误情况
_, err = FetchUser(ctx, "")
if err == nil {
t.Error("FetchUser should return error for empty userID")
}
}
运行测试:
# 运行所有测试
go test ./...
# 运行特定包的测试
go test ./pkg/agent
# 带覆盖率
go test -cover ./...
# 详细输出
go test -v ./...
Commit 规范:
# 格式: <type>: <subject>
# Type 类型:
# feat: 新功能
# fix: Bug 修复
# docs: 文档更新
# refactor: 代码重构
# test: 测试相关
# chore: 构建/工具相关
# 示例:
git commit -m "feat: add support for Gemini provider"
git commit -m "fix: resolve memory leak in event bus"
git commit -m "docs: update quickstart guide"
Commit 要求:
go fmt 和测试# 推送到你的 Fork
git push origin feature/your-feature-name
# 在 GitHub 上创建 Pull Request
# 1. 访问你的 Fork 仓库
# 2. 点击 "Compare & pull request"
# 3. 填写 PR 描述
PR 描述模板:
## 描述
简要说明这个 PR 做了什么
## 相关 Issue
Closes #123
## 改动类型
- [ ] Bug 修复
- [ ] 新功能
- [ ] 破坏性变更
- [ ] 文档更新
## 测试
描述如何测试这些改动
## 检查清单
- [ ] 代码遵循项目规范
- [ ] 添加了必要的测试
- [ ] 测试全部通过
- [ ] 更新了相关文档
- [ ] Commit 信息清晰
| 检查项 | 要求 |
|---|---|
| 功能 | 符合需求,没有 bug |
| 测试 | 完善的测试覆盖 |
| 代码质量 | 清晰、简洁、可维护 |
| 文档 | 必要的注释和文档更新 |
| 性能 | 没有性能退化 |
| 兼容性 | 向后兼容(除非标注破坏性变更) |
收到 Code Review 反馈后:
# 修改代码
git add .
git commit -m "fix: address review comments"
git push origin feature/your-feature-name
# PR 会自动更新
理解项目结构有助于贡献:
aster/
├── pkg/ # 核心包
│ ├── agent/ # Agent 运行时
│ ├── context/ # Context Engineering
│ ├── memory/ # 记忆系统
│ ├── middleware/ # 中间件
│ ├── provider/ # LLM Provider
│ ├── tools/ # 工具系统
│ └── types/ # 类型定义
├── examples/ # 示例代码
├── docs/ # 文档
│ └── content/ # Nuxt Content
├── client-sdks/ # 客户端 SDK
│ └── client-js/ # JavaScript SDK
└── tests/ # 集成测试
推荐从以下开始:
good first issue 的 Issue不要气馁!这很正常:
go test ./...我们努力在 48 小时内进行首次审查,但具体时间取决于:
如果超过 1 周没有响应,可以在 PR 中 @ 维护者
核心原则:
不可接受的行为:
违反行为准则可能导致警告或禁止参与。
如有任何问题,欢迎:
Discussions
Issues
文档
::
再次感谢您的贡献!每一个 PR、每一条反馈都让 aster 变得更好 ✨