Skip to content

贡献指南

感谢你对 AI-SideChat 的关注!我们欢迎各种形式的贡献。

贡献方式

🐛 报告 Bug

发现问题?请在 GitHub 提交 Issue:

  1. 检查是否已有相同的 Issue
  2. 提供详细的复现步骤
  3. 附上浏览器版本和扩展版本
  4. 如有可能,附上截图或错误日志

💡 提出新功能

有好的想法?我们很乐意听取:

  1. 在 Issue 中描述功能需求
  2. 说明使用场景和价值
  3. 讨论可能的实现方案

📝 改进文档

文档永远可以更好:

  • 修复错别字
  • 改进表述
  • 添加示例
  • 翻译文档

💻 提交代码

想要贡献代码?请遵循以下流程。

开发流程

1. Fork 项目

点击 GitHub 页面右上角的 Fork 按钮。

2. 克隆仓库

bash
git clone https://github.com/your-username/AI-SideChat.git
cd AI-SideChat

3. 安装依赖

bash
npm install

4. 创建分支

bash
git checkout -b feature/your-feature-name
# 或
git checkout -b fix/your-bug-fix

分支命名规范:

  • feature/ - 新功能
  • fix/ - Bug 修复
  • docs/ - 文档更新
  • refactor/ - 代码重构
  • perf/ - 性能优化

5. 开发

bash
npm run dev

在浏览器中加载 dist/ 目录进行测试。

6. 测试

确保你的修改:

  • ✅ 功能正常工作
  • ✅ 没有破坏现有功能
  • ✅ 代码风格一致
  • ✅ 没有控制台错误

7. 提交代码

bash
git add .
git commit -m "feat: add new feature"

提交信息格式:

<type>: <subject>

<body>

<footer>

Type 类型

  • feat - 新功能
  • fix - Bug 修复
  • docs - 文档更新
  • style - 代码格式(不影响功能)
  • refactor - 重构
  • perf - 性能优化
  • test - 测试相关
  • chore - 构建/工具相关

示例

feat: add tag auto-complete feature

- Add tag suggestions based on recent usage
- Implement fuzzy search for tags
- Update UI to show tag dropdown

Closes #123

8. 推送到 GitHub

bash
git push origin feature/your-feature-name

9. 创建 Pull Request

  1. 访问你的 Fork 页面
  2. 点击 "New Pull Request"
  3. 填写 PR 描述:
    • 做了什么改动
    • 为什么这样做
    • 如何测试
  4. 提交 PR

代码规范

JavaScript 风格

我们遵循现代 JavaScript 最佳实践:

javascript
// ✅ 使用 const/let,不用 var
const apiUrl = 'https://example.com'
let count = 0

// ✅ 使用箭头函数
const add = (a, b) => a + b

// ✅ 使用模板字符串
const message = `Hello, ${name}!`

// ✅ 使用解构
const { id, name } = user
const [first, ...rest] = array

// ✅ 使用异步/等待
async function fetchData() {
  const data = await getData()
  return data
}

// ✅ 适当的注释
// 计算问题的哈希值用于去重
function simpleHash(text) {
  // ...
}

命名规范

javascript
// 变量和函数:camelCase
const userName = 'John'
function getUserData() { }

// 常量:UPPER_SNAKE_CASE
const MAX_RETRY_COUNT = 3
const API_BASE_URL = 'https://api.example.com'

// 类:PascalCase
class UserManager { }

// 私有属性/方法:_开头
class MyClass {
  _privateMethod() { }
}

文件组织

src/
├── content.js         # 内容脚本主文件
├── drawer.js          # 悬浮坞逻辑
├── background.js      # 后台脚本
├── utils/
│   ├── hash.js       # 哈希工具
│   ├── storage.js    # 存储工具
│   └── platform.js   # 平台适配
├── styles/
│   ├── drawer.css    # 悬浮坞样式
│   └── preview.css   # 预览样式
└── types/
    └── index.js      # 类型定义

HTML/CSS 规范

html
<!-- ✅ 语义化标签 -->
<article>
  <header>
    <h1>Title</h1>
  </header>
  <section>
    <p>Content...</p>
  </section>
</article>

<!-- ✅ BEM 命名 -->
<div class="drawer">
  <div class="drawer__header">
    <h2 class="drawer__title">AI-Clip</h2>
  </div>
  <div class="drawer__content">
    <div class="item">
      <div class="item__title">Title</div>
      <div class="item__meta">Meta</div>
    </div>
  </div>
</div>
css
/* ✅ CSS 变量 */
:root {
  --primary-color: #8850e5;
  --text-color: #333;
  --border-radius: 8px;
}

/* ✅ 模块化样式 */
.drawer {
  background: var(--bg-color);
  border-radius: var(--border-radius);
}

.drawer__header {
  padding: 16px;
}

.drawer__title {
  font-size: 18px;
  font-weight: 600;
}

添加新平台支持

步骤

  1. 研究平台结构

    • 访问平台网站
    • 检查 DOM 结构
    • 找到关键元素的选择器
  2. 更新 manifest.json

json
{
  "host_permissions": [
    "https://new-platform.com/*"
  ]
}
  1. 添加平台配置

content.js 中:

javascript
function detectPlatform() {
  // ... 现有代码

  if (url.includes('new-platform.com')) {
    return {
      name: 'NewPlatform',
      color: '#abc123',
      selectors: {
        userBubble: '.user-message',
        answer: '.ai-response',
        convTitle: '.conversation-title'
      }
    }
  }
}
  1. 测试所有功能

    • 收藏按钮显示
    • 内容提取正确
    • 跳转定位准确
    • 预览显示正常
  2. 更新文档

    • docs/features/platforms.md 添加平台说明
  3. 提交 PR

版本发布

版本号遵循语义化版本 (Semver):MAJOR.MINOR.PATCH

  • MAJOR:不兼容的 API 变更
  • MINOR:向后兼容的新功能
  • PATCH:向后兼容的 Bug 修复

示例:5.2.1

社区

行为准则

  • 尊重他人
  • 友善沟通
  • 接受批评
  • 专注于最佳方案

获取帮助

  • 📖 阅读文档
  • 🔍 搜索已有 Issue
  • 💬 在 Discussion 提问
  • 📧 联系维护者

致谢

感谢所有贡献者的付出!你的名字将出现在:

  • README.md 的贡献者列表
  • GitHub Contributors 页面

License

通过贡献代码,你同意你的贡献将在 MIT License 下发布。

Released under the MIT License.