贡献指南
感谢你对 AI-SideChat 的关注!我们欢迎各种形式的贡献。
贡献方式
🐛 报告 Bug
发现问题?请在 GitHub 提交 Issue:
- 检查是否已有相同的 Issue
- 提供详细的复现步骤
- 附上浏览器版本和扩展版本
- 如有可能,附上截图或错误日志
💡 提出新功能
有好的想法?我们很乐意听取:
- 在 Issue 中描述功能需求
- 说明使用场景和价值
- 讨论可能的实现方案
📝 改进文档
文档永远可以更好:
- 修复错别字
- 改进表述
- 添加示例
- 翻译文档
💻 提交代码
想要贡献代码?请遵循以下流程。
开发流程
1. Fork 项目
点击 GitHub 页面右上角的 Fork 按钮。
2. 克隆仓库
bash
git clone https://github.com/your-username/AI-SideChat.git
cd AI-SideChat3. 安装依赖
bash
npm install4. 创建分支
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 #1238. 推送到 GitHub
bash
git push origin feature/your-feature-name9. 创建 Pull Request
- 访问你的 Fork 页面
- 点击 "New Pull Request"
- 填写 PR 描述:
- 做了什么改动
- 为什么这样做
- 如何测试
- 提交 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;
}添加新平台支持
步骤
研究平台结构
- 访问平台网站
- 检查 DOM 结构
- 找到关键元素的选择器
更新 manifest.json
json
{
"host_permissions": [
"https://new-platform.com/*"
]
}- 添加平台配置
在 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'
}
}
}
}测试所有功能
- 收藏按钮显示
- 内容提取正确
- 跳转定位准确
- 预览显示正常
更新文档
- 在
docs/features/platforms.md添加平台说明
- 在
提交 PR
版本发布
版本号遵循语义化版本 (Semver):MAJOR.MINOR.PATCH
- MAJOR:不兼容的 API 变更
- MINOR:向后兼容的新功能
- PATCH:向后兼容的 Bug 修复
示例:5.2.1
社区
行为准则
- 尊重他人
- 友善沟通
- 接受批评
- 专注于最佳方案
获取帮助
- 📖 阅读文档
- 🔍 搜索已有 Issue
- 💬 在 Discussion 提问
- 📧 联系维护者
致谢
感谢所有贡献者的付出!你的名字将出现在:
- README.md 的贡献者列表
- GitHub Contributors 页面
License
通过贡献代码,你同意你的贡献将在 MIT License 下发布。
