About

贡献指南

如何为 aster 做出贡献

贡献指南

感谢您对 aster 的关注!我们欢迎所有形式的贡献。

贡献方式

1. 代码贡献

修复 Bug

发现并修复代码中的问题

  • 查看 Issues
  • 提交 PR 修复 ::

新功能

实现路线图中的功能

  • 查看 Roadmap
  • 在 Issue 中讨论设计
  • 提交 PR 实现 ::

性能优化

提升代码性能和效率

  • 基准测试分析
  • 优化关键路径
  • 提供性能数据 ::

测试

增加测试覆盖率

  • 单元测试
  • 集成测试
  • 性能测试 :: ::

2. 文档贡献

  • API 文档:完善函数、类型的注释和说明
  • 教程:编写使用场景的详细教程
  • 示例:提供真实应用的示例代码
  • 翻译:翻译文档到其他语言 ::

3. 社区贡献

讨论

参与技术讨论

答疑

帮助其他开发者

  • 回答 Issues
  • Code Review
  • 技术支持 ::

推广

传播项目影响力

  • 撰写博客文章
  • 制作视频教程
  • 社交媒体分享 :: ::

4. 反馈建议

  • 功能建议:提出新功能想法
  • 体验反馈:分享使用体验
  • Bug 报告:提交发现的问题
  • 性能反馈:报告性能问题 ::

开发环境

环境要求

工具版本说明
Go1.23+需要泛型和 stream.Reader 支持
Git2.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

开发流程

1. 创建 Issue

在开始编码前,建议先创建或认领 Issue:

  1. 搜索是否已有相关 Issue
  2. 如果没有,创建新 Issue 描述问题或功能
  3. 等待维护者反馈,确认方向
  4. 开始开发 ::

2. 分支管理

# 创建功能分支
git checkout -b feature/your-feature-name

# 或者修复分支
git checkout -b fix/bug-description

分支命名规范

  • feature/ - 新功能
  • fix/ - Bug 修复
  • docs/ - 文档更新
  • refactor/ - 代码重构
  • test/ - 测试相关

3. 代码开发

请遵循项目的代码规范和最佳实践

代码规范

// ✅ 好的代码
// 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)
}

注意事项

  • 添加清晰的注释
  • 处理所有错误
  • 使用有意义的变量名
  • 遵循 Go 官方代码风格

4. 编写测试

所有新功能和 Bug 修复都必须包含测试
// 单元测试示例
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 ./...

5. 提交代码

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 要求

  • 简洁明了的提交信息
  • 一个 commit 做一件事
  • 提交前运行 go fmt 和测试

6. 推送并创建 PR

# 推送到你的 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 信息清晰

Code Review

PR 审查流程

  1. 自动检查:CI/CD 运行测试和 lint
  2. 维护者审查:检查代码质量、设计、测试
  3. 讨论和修改:根据反馈修改代码
  4. 合并:审查通过后合并到主分支 ::

审查标准

检查项要求
功能符合需求,没有 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/                # 集成测试

常见问题

行为准则

参与项目请遵守我们的行为准则

核心原则

  • 尊重:尊重所有贡献者,无论经验水平
  • 包容:欢迎不同背景和观点
  • 协作:建设性地沟通和反馈
  • 专业:保持专业和友好的态度 ::

不可接受的行为

  • 骚扰、歧视、侮辱性言论
  • 人身攻击或政治攻击
  • 公开或私下的骚扰
  • 未经许可发布他人隐私信息

违反行为准则可能导致警告或禁止参与。

获取帮助

如有任何问题,欢迎:

::


再次感谢您的贡献!每一个 PR、每一条反馈都让 aster 变得更好 ✨