Files
PMOCrazycoder/README.md

197 lines
6.8 KiB
Markdown
Raw Normal View History

# PMOCrazyCoder
Environnement de développement conteneurisé avec assistance IA intégrée — Go, Rust, Python, TypeScript, R, Ruby — et outillage IA local (LM Studio) ou cloud (Claude Pro).
## Vision
> Un container de développement complet, multi-langages, avec LSP, outils IA et MCP intégrés,
> utilisable depuis Zed, VS Code ou Cursor, avec persistance par projet.
## Ce que contient l'image
### Langages et compilateurs
- **Go** (dernière version stable via script)
- **Rust** (stable + nightly, avec rustfmt, clippy, rust-analyzer, rust-src)
- **Python 3** (avec ruff, fastmcp, ipython, tasklin)
- **Node.js / npm** (avec TypeScript, ESLint, Prettier, Pyright, typescript-language-server)
- **Ruby** (avec github-linguist)
- **R**
- **Clang / LLVM** (clangd inclus)
### Outils de développement
- `jj` (Jujutsu VCS) + `jj-lsp`
- `gopls`, `mcp-language-server`
- `cargo-edit`, `cargo-watch`, `cargo-outdated`, `cargo-make`, `cargo-binstall`
- `sqlite3`, `cmake`, `make`, `git`
- `aichat` (client LLM CLI)
### MCP Servers installés
Le conteneur inclut plusieurs MCP servers pour l'intégration avec les outils de développement :
| MCP Server | Utilisation |
|---|---|
| `mcp-language-server` | LSP pour Go (gopls), Python (pyright-langserver), Rust (rust-analyzer), TypeScript |
| `github-mcp-server` | Intégration GitHub (repos, issues, PR) via `GITHUB_TOKEN` |
| `gitea-mcp` | Intégration Gitea/Forgejo via `GITEA_URL` et `GITEA_TOKEN` |
| `mcp-server-commands` | Exécution de commandes shell depuis l'assistant IA |
### Assistants IA
- **Claude Code** (installé au `postCreateCommand`)
- **opencode** (configuré via l'entrypoint)
- **aichat** (configuré via l'entrypoint, connecté au LLM local)
### Configuration MCP dans les assistants
Les MCP servers sont automatiquement configurés dans opencode et Claude Code via `crazycoder-setup.sh` (exécuté en `postStartCommand`) :
**opencode** (`~/.config/opencode/opencode.json`) :
- LSP pour Go, Python, Rust, TypeScript via `mcp-language-server`
- Commandes shell via `mcp-server-commands`
- GitHub MCP (si `GITHUB_TOKEN` défini)
- Gitea MCP (si `GITEA_URL` et `GITEA_TOKEN` définis)
**Claude Code** (`~/.claude/.claude.json`) :
- Même configuration MCP qu'opencode
Les configurations sont générées dynamiquement au démarrage du conteneur avec les variables d'environnement disponibles.
## Variables d'environnement (.env)
Le fichier `.env` (non versionné, ignoré par git) contient les credentials pour les services externes :
| Variable | Description | Exemple |
|---|---|---|
| `GITHUB_TOKEN` | Personal Access Token GitHub pour l'accès API | `ghp_xxxxxxxxxxxxxxxxxxxx` |
| `GITEA_URL` | URL de votre serveur Gitea/Forgejo | `https://gitea.example.com` |
| `GITEA_TOKEN` | Token d'accès API Gitea | `xxxxxxxxxxxxxxxxxxxx` |
Copiez `.devcontainer/.env.example` vers `.env` et renseignez vos tokens :
```bash
cp .devcontainer/.env.example .env
# Éditer .env avec vos credentials
```
Ces variables sont utilisées par :
- Le MCP Server GitHub (pour les opérations repo/issues/PR)
- Le MCP Server Gitea (intégration avec votre instance)
## Utilisation rapide
### Ajouter l'environnement à un projet existant
```bash
curl -fsSL https://gargoton.petite-maison-orange.fr/eric/PMOCrazycoder/raw/branch/main/setup-devcontainer.sh | bash
```
Ou avec un endpoint LLM personnalisé :
```bash
LOCAL_LLM_API=http://monserveur:1248/v1 bash setup-devcontainer.sh
```
Le script télécharge les fichiers `devcontainer.json` et `docker-compose.yml` directement depuis le dépôt Gitea, crée les répertoires de persistance dans `.devcontainer/config/` et met à jour `.gitignore`.
### Ouvrir dans le container
Ouvrir le projet dans VS Code, Zed ou Cursor et choisir "Reopen in Container". L'image est tirée automatiquement depuis le registry.
### Authentifier Claude Code
Dans le panneau Claude Agent de Zed, lancer `/login` et choisir "Log in with Claude.ai" (abonnement Pro/Max).
## Persistance par projet
Toutes les données et caches sont persistés dans `.devcontainer/config/` (ignoré par git) :
| Répertoire | Contenu |
|---|---|
| `config/claude/` | Sessions et config Claude Code |
| `config/opencode/` | Config opencode |
| `config/aichat/` | Config aichat |
| `config/ai_index/` | Index de code du projet |
| `config/cargo-registry/` | Cache crates.io |
| `config/cargo-git/` | Cache dépendances git Cargo |
| `config/cargo-bin/` | Binaires Rust installés pour le projet |
| `config/go-cache/` | Cache modules Go |
| `config/go-bin/` | Binaires Go installés pour le projet |
| `config/python-local/` | Paquets pip user + gems Ruby |
| `config/npm-cache/` | Cache npm |
| `config/r-libs/` | Paquets R installés |
### Installer des binaires persistants
```bash
# Rust — persiste dans .devcontainer/config/cargo-bin/
cargo install cargo-nextest
# Go — persiste dans .devcontainer/config/go-bin/
GOBIN=~/go/bin go install github.com/some/tool@latest
# Python — persiste dans .devcontainer/config/python-local/
pip install --user monpaquet
# R — persiste dans .devcontainer/config/r-libs/
R -e 'install.packages("tidyverse")'
```
## Configuration MCP détaillée
### opencode
Le fichier `~/.config/opencode/opencode.json` est généré à chaque démarrage avec :
- **LSP servers** : gopls, pyright-langserver, rust-analyzer, typescript-language-server
- **Shell commands** : `mcp-server-commands`
- **GitHub MCP** : activé si `GITHUB_TOKEN` est défini
- **Gitea MCP** : activé si `GITEA_URL` et `GITEA_TOKEN` sont définis
- **Provider LM Studio** : endpoint local configurable
### Claude Code
Le fichier `~/.claude/.claude.json` est mis à jour avec la section `mcpServers` contenant les mêmes serveurs que opencode.
## LLM local
L'entrypoint configure automatiquement opencode et aichat pour pointer sur `LOCAL_LLM_API`
(défaut : `http://host.docker.internal:1248/v1`).
Variables d'environnement disponibles dans le container :
| Variable | Défaut | Description |
|---|---|---|
| `LOCAL_LLM_API` | `http://host.docker.internal:1248/v1` | Endpoint OpenAI-compatible |
| `LLM_MODEL` | `ollama:qwen/qwen3-coder-next@4bit` | Modèle à utiliser |
| `TEMPERATURE` | `0.5` | Température |
| `NUM_CTX` | `32768` | Taille de contexte |
| `MAXTOKEN` | `4096` | Tokens max en sortie |
## Construire et publier l'image
```bash
# Build natif (local)
make build
# Build multi-arch (amd64 + arm64) + push vers le registry
make all
# Push uniquement (si l'archive OCI existe déjà)
make push
# Lister toutes les targets
make help
```
L'image est publiée sur `niepce.petite-maison-orange.fr/public/pmocrazycoder:latest`.
Le push utilise `skopeo` — assurez-vous d'être authentifié sur le registry.
## Sources
- Dépôt git : `https://gargoton.petite-maison-orange.fr/eric/PMOCrazycoder`
- Registry OCI : `niepce.petite-maison-orange.fr/public/pmocrazycoder:latest`
## Licence
CECILL-2.1