社区

贡献指南

如何为 Downcity 做贡献

贡献指南

感谢您有兴趣为 Downcity 做贡献!本指南将帮助您开始。

贡献方式

🐛 报告错误

发现了 bug?报告它:

  1. 先搜索现有问题
  2. 创建 bug 报告,包含:
    • 清晰的标题和描述
    • 重现步骤
    • 预期 vs 实际行为
    • 环境详情(操作系统、Node 版本等)
    • 相关截图(如适用)

💡 建议功能

有好主意?提议它:

  1. 检查路线图和现有讨论
  2. 创建功能请求,包含:
    • 问题陈述
    • 建议的解决方案
    • 用例
    • 潜在的实现

📖 改进文档

文档也是代码!您可以:

  • 修正拼写和语法
  • 添加示例
  • 澄清混淆的部分
  • 翻译成其他语言
  • 添加新指南

🔧 代码贡献

准备编码?太好了!

  1. 从标记为 good-first-issue 的问题开始
  2. 遵循下面的贡献指南
  3. 提交拉取请求

开发设置

前提条件

  • Node.js >= 18
  • pnpm(推荐)或 npm
  • Git

Fork 和克隆

# 在 GitHub 上 fork 仓库
# 克隆您的 fork
git clone https://github.com/YOUR_USERNAME/downcity.git
cd downcity

# 添加 upstream 远程
git remote add upstream https://github.com/wangenius/downcity.git

安装依赖

# 安装依赖
pnpm install

# 设置开发环境
pnpm dev:setup

构建和测试

# 构建项目
pnpm build

# 运行测试
pnpm test

# 运行 linter
pnpm lint

# 类型检查
pnpm typecheck

项目结构

downcity/
├── packages/
│   ├── cli/              # CLI 工具
│   ├── core/             # 核心 agent 逻辑
│   ├── llm/              # LLM 提供商实现
│   └── tools/            # 内置工具
├── homepage/             # 文档站点
└── examples/             # 示例配置

进行更改

分支策略

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

# 或修复 bug
git checkout -b fix/issue-123

# 或文档
git checkout -b docs/update-guide

提交消息

遵循约定式提交:

feat: 添加对自定义工具的支持
fix: 解决任务调度器中的竞态条件
docs: 更新安装指南
chore: 升级依赖
test: 为权限系统添加测试
refactor: 改进 LLM 提供商抽象

代码风格

遵循项目的代码风格:

# 运行格式化工具
pnpm format

# 运行 linter
pnpm lint:fix

# 类型检查
pnpm typecheck

拉取请求流程

提交之前

  1. 运行测试pnpm test
  2. 格式化代码pnpm format
  3. 检查类型pnpm typecheck
  4. 更新文档:如适用
  5. 添加测试:针对新功能

提交 PR

  1. 推送到您的 fork
  2. 创建拉取请求到 wangenius/downcity:main
  3. 填写 PR 模板:
    • 更改描述
    • 相关问题
    • 测试步骤
    • 破坏性更改(如有)

审查流程

维护者将审查您的 PR 并提供反馈。解决审查意见并更新您的分支。

合并

一旦批准,您的 PR 将被合并。维护者将:

  • 如需要则压缩提交
  • 更新更新日志
  • 部署到生产环境

编码标准

TypeScript

  • 使用严格模式
  • 避免 any 类型
  • 优先使用 const/let 而不是 var
  • 回调使用箭头函数
  • 为公共 API 编写文档
  • cli/city/src 内可使用 @/ 路径别名(映射到 src),pnpm build 会自动回写为 bin 中可运行的相对路径

测试

  • 为新功能编写单元测试
  • 目标是 >80% 的代码覆盖率
  • 模拟外部依赖
  • 测试边缘情况

文档

  • 为公共 API 编写文档
  • 添加 JSDoc 注释
  • 包含使用示例
  • 如果行为更改,更新指南

开发工作流程

功能开发示例

# 1. 创建分支
git checkout -b feature/add-discord-plugin

# 2. 进行更改
# ... 编辑文件 ...

# 3. 提交更改
git add .
git commit -m "feat: 添加 Discord bot 集成"

# 4. 测试
pnpm test

# 5. 推送到 fork
git push origin feature/add-discord-plugin

# 6. 在 GitHub 上创建 PR
# 访问您的 fork 并创建拉取请求

与上游同步

保持您的 fork 最新:

# 获取上游更新
git fetch upstream

# 合并上游 main
git checkout main
git merge upstream/main

# 推送到您的 fork
git push origin main

社区准则

行为准则

  • 保持尊重和包容
  • 提供建设性反馈
  • 优雅地接受反馈
  • 关注什么对社区最有利

获取帮助

  • 在 Discord 中提问
  • 为复杂主题开始讨论
  • 尽早请求审查(WIP PR)

开发者起源证书

通过贡献,您同意 DCO:

开发者起源证书
版本 1.1

1. 开发者和利益相关者通过贡献和补丁与项目的合作
   是项目的预期合作和协作方法。

2. 开发者保证:
   (a) 贡献全部或部分由我创建,我有权在文件中
       指示的开源许可证下提交;或
   (b) 贡献基于先前的工作,据我所知,涵盖在适当的
       开源许可证下,我有权在该许可证下提交该工作,
       包括对其进行的修改,无论是全部或部分由我创建,
       与该项目相关的同一开源许可证(除非被允许
       在不同许可证下提交),如文件中所示;或
   (c) 贡献直接由我提供的其他一些创建、认证 (a)、(b)
       或 (c) 且我未修改它的人。

   (d) 我理解并同意该项目和贡献是公开的,贡献记录
       (包括我提交的所有个人信息,包括我的签名)
       将无限期维护,并根据该项目或所涉及的开源许可证
       一致地重新分发。

添加到您的提交:

git commit -s -m "feat: 添加新功能"

项目特定指南

核心包更改

对于 packages/city 的更改:

  • 为新功能添加测试
  • 如需要更新架构文档
  • 考虑向后兼容性

CLI 更改

对于 cli/city 的更改:

  • 更新 CLI 帮助文本
  • 添加使用示例
  • 为新命令编写文档

文档更改

对于 homepage/ 的更改:

  • 本地测试:pnpm dev
  • 检查损坏的链接
  • 如需要更新导航

资源

文档

社区


认可

感谢您的贡献!您的帮助让 Downcity 对每个人都更好。

贡献者在以下地方得到认可:


下一步

准备贡献?

  1. 查找 good first issues
  2. 加入 Discord 社区
  3. 开始编码!🚀