Refactor devcontainer and MCP tools for containerized development
Ajout et configuration d’un environnement de développement conteneurisé (devcontainer) avec support multi-langages (Go, Rust, Python), intégration d’outils LLM locaux/cloud (LM Studio, Claude Pro), et refonte des outils MCP : suppression du module sandbox, correction de la gestion des chemins projet dans jj.py, ajout d’une fonction jj_new_tool, et structuration du Makefile pour le build multiplateforme. Mise à jour des scripts (docker-entrypoint.sh, setup-devcontainer.sh), du README.md et de bin/jj-ai-commit.sh pour automatiser la génération de messages de commit à partir des résumés des fichiers modifiés.
This commit is contained in:
140
README.md
140
README.md
@@ -1,19 +1,133 @@
|
||||
# 🧠 PMOCrazyCoder
|
||||
# PMOCrazyCoder
|
||||
|
||||
Un assistant IA **local**, pour coder en Go, Rust et R —
|
||||
sans cloud, sans API key, tout sur votre M3 Max.
|
||||
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
|
||||
## Vision
|
||||
|
||||
> *Un indexeur de code, des graphes de dépendances, et un assistant intelligent —
|
||||
> intégré à Zed, 100 % local.*
|
||||
> 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 qu’on construit
|
||||
## Ce que contient l'image
|
||||
|
||||
- ✅ MCP tools pour Zed (ex : `get_similar_functions`, `explain_imports`)
|
||||
- ✅ Indexeur de code (Go / Rust / R) via Tree-sitter
|
||||
- ✅ Graphe de dépendances & similarité (stocké localement)
|
||||
- ✅ Tout tourne en local : **LM Studio** (`localhost:1248`) + LanceDB + Rust/Python
|
||||
*(hors conteneur — le conteneur y accède via `host.docker.internal:1248`)*
|
||||
### 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)
|
||||
|
||||
### 📦 Structure future (à venir)
|
||||
### 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)
|
||||
|
||||
### Assistants IA
|
||||
- **Claude Code** (installé au `postCreateCommand`)
|
||||
- **opencode** (configuré via l'entrypoint)
|
||||
- **aichat** (configuré via l'entrypoint, connecté au LLM local)
|
||||
|
||||
## 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")'
|
||||
```
|
||||
|
||||
## 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
|
||||
|
||||
Reference in New Issue
Block a user