-
-
Notifications
You must be signed in to change notification settings - Fork 0
Contributing.fr
Merci de vouloir contribuer à WorkPilot AI ! Ce guide résume le processus — la source de référence reste CONTRIBUTING.md dans le dépôt.
- Fork le dépôt
- Créez une branche depuis
develop(pasmain) - Implémentez vos changements
- Lancez tests, lint et typecheck
- Ouvrez une Pull Request ciblant
develop - Attendez la revue CI + humaine
- Après approbation, merge
Avant de toucher au code, gardez ces règles en tête (extraites de CLAUDE.md) :
-
Claude Agent SDK uniquement — ne jamais utiliser
anthropic.Anthropic()directement. Toujourscreate_client()decore.client -
i18n obligatoire — toute chaîne d'UI doit utiliser
react-i18nextet être traduite en français ET en anglais -
Abstraction cross-plateforme — jamais
process.platformdirectement. Utilisez les modulesplatform/ - Pas d'estimations temporelles — utilisez la priorité, pas l'estimation en heures
-
PRs vers
develop— la branche cible par défaut estdevelop, pasmain
- Python 3.12+ avec
uv - Node.js 20+ (24 recommandé) avec
pnpm 8+ - Git
# Cloner votre fork
git clone https://github.com/<votre-user>/WorkPilot-AI.git
cd WorkPilot-AI
# Ajouter le remote upstream
git remote add upstream https://github.com/krovomi/WorkPilot-AI.git
# Installer toutes les dépendances
pnpm run install:all
# Ou séparément
cd apps/backend && uv venv && uv pip install -r requirements.txt
cd ../frontend && pnpm install# À la racine
pnpm run devgit checkout develop
git pull upstream develop
git checkout -b feat/ma-fonctionnalite-
feat/<nom>— nouvelle fonctionnalité -
fix/<nom>— correction de bug -
docs/<nom>— doc uniquement -
refactor/<nom>— refactoring sans changement fonctionnel -
test/<nom>— ajout ou amélioration de tests -
chore/<nom>— tooling, dépendances, CI
<type>(<scope>): <description courte>
<description longue optionnelle>
Exemples :
feat(kanban): add automatic column transitions
fix(auth): resolve OAuth token refresh race condition
docs(wiki): add French translation for Installation page
refactor(agent-queue): extract priority logic to dedicated module
test(qa-fixer): add coverage for 50-iteration limit
cd apps/frontend
pnpm run lint # Biome check
pnpm run lint:fix # Biome auto-fix
pnpm run typecheck # TypeScript strict
pnpm test # Vitest
pnpm test:e2e # Playwright (optionnel)cd apps/backend
.venv/bin/pytest tests/ -v # Tous les tests
ruff check . # Linting
ruff format . # Auto-format# Depuis la racine
pnpm run test:backend
pnpm run test:frontendHusky + lint-staged lancent automatiquement Biome sur les fichiers .ts/.tsx/.js/.jsx/.json stagés au commit. Si ça échoue, corrigez et recommencez.
Toute chaîne UI doit passer par react-i18next :
// ❌ INTERDIT
<span>Tasks</span>
// ✅ OBLIGATOIRE
<span>{t('navigation:items.tasks')}</span>- Ajoutez dans
apps/frontend/src/shared/i18n/locales/en/<namespace>.json - Ajoutez la traduction française dans
apps/frontend/src/shared/i18n/locales/fr/<namespace>.json - Utilisez
namespace:section.keydans le JSX
55 namespaces existent (common, navigation, settings, tasks, kanban, github, insights, etc.). Choisissez le namespace le plus pertinent ou créez-en un nouveau.
// apps/frontend/src/renderer/components/__tests__/MyComponent.test.tsx
import { render, screen } from '@testing-library/react';
import { MyComponent } from '../MyComponent';
describe('MyComponent', () => {
it('should render the title', () => {
render(<MyComponent title="Hello" />);
expect(screen.getByText('Hello')).toBeInTheDocument();
});
});# tests/test_my_feature.py
import pytest
from agents.my_feature import do_something
def test_do_something_returns_expected():
result = do_something(input_value=42)
assert result == 84
@pytest.mark.asyncio
async def test_async_behavior():
result = await async_function()
assert result.status == "ok"- Branche créée depuis
develop - Tests ajoutés ou mis à jour
-
pnpm run lintpasse -
pnpm run typecheckpasse -
pnpm testpasse - i18n : clés ajoutées en EN et FR
- Documentation mise à jour si API publique modifiée
- Message de commit au format Conventional Commits
- PR cible
develop(pasmain)
Comme les commits :
feat(scope): description courte sous 70 chars
Utilisez le template de PR :
- Summary — 1 à 3 bullets sur ce qui change
- Test plan — comment vous avez validé
- Screenshots si changement UI
- Breaking changes s'il y en a
- Biome pour lint + format
- TypeScript strict activé
-
Pas de
anysauf exception justifiée en commentaire - Pas de commentaires redondants — le code doit se suffire
- Ruff pour lint + format
- Type hints systématiques (annotations Python)
- Docstrings sur fonctions publiques
- pytest.mark.asyncio pour les tests async
| Besoin | Emplacement |
|---|---|
| Ajouter un prompt d'agent | apps/backend/prompts/<nom>.md |
| Créer un Zustand store | apps/frontend/src/renderer/stores/<nom>-store.ts |
| Créer un IPC handler | apps/frontend/src/main/ipc-handlers/<domaine>.ts |
| Ajouter une traduction | apps/frontend/src/shared/i18n/locales/{en,fr}/ |
| Ajouter un thème | apps/frontend/src/shared/constants/themes.ts |
| Ajouter un runner CLI | apps/backend/runners/ |
| Ajouter une intégration | apps/backend/integrations/<nom>/ |
- Discord : rejoindre la communauté
- Discussions GitHub : https://github.com/krovomi/WorkPilot-AI/discussions
- Issues : https://github.com/krovomi/WorkPilot-AI/issues
En contribuant, vous acceptez que vos contributions soient licenciées sous AGPL-3.0, la licence du projet.
➡️ Dépannage
Getting started / Pour débuter
- 🏠 Home
- 📘 Introduction · fr
- ⚡ Installation · fr
- 🚀 First project · fr
- 🧠 Key concepts · fr
- ❓ FAQ · fr
Usage
- 🖥 User interface · fr
- 📝 Creating a spec · fr
- 🔁 Multi-agent pipeline · fr
- 🤖 Specialized agents · fr
- 🔌 Integrations · fr
- 💡 AI providers · fr
- 🧩 Memory system · fr
Advanced / Avancé
Community / Communauté