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:
@@ -1,16 +1,48 @@
|
||||
#!/bin/bash
|
||||
|
||||
LOCAL_LLM_API=${LOCAL_LLM_API:-http://host.docker.internal:1248/v1}
|
||||
MODEL="${LLM_MODEL:-qwen3-coder}"
|
||||
|
||||
DIFF=$(jj diff)
|
||||
PROMPT='Analyse ce diff et réponds UNIQUEMENT avec un objet JSON valide contenant "title" (string) et "message" (string) pour le message de commit. Pas de texte avant ou après le JSON.'
|
||||
llm_query() {
|
||||
local content="$1"
|
||||
jq -n --arg content "$content" --arg model "$MODEL" \
|
||||
'{"model": $model, "messages": [{"role": "user", "content": $content}]}' \
|
||||
| curl -s -X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-d @- \
|
||||
"$LOCAL_LLM_API/chat/completions" \
|
||||
| jq -r '.choices[0].message.content'
|
||||
}
|
||||
|
||||
CONTENT="${PROMPT}
|
||||
${DIFF}"
|
||||
# Get list of modified files
|
||||
FILES=$(jj diff --summary | awk '{print $2}')
|
||||
|
||||
REQUEST=$(jq -n --arg content "$CONTENT" '{"model": "qwen3-coder", "messages": [{"role": "user", "content": $content}]}')
|
||||
if [[ -z "$FILES" ]]; then
|
||||
echo "No changes to commit." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
curl -s -X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$REQUEST" \
|
||||
"$LOCAL_LLM_API/chat/completions" | jq -r '.choices[0].message.content' | jq -r '.title + "\n\n" + .message'
|
||||
# Pass 1: summarize each file diff individually
|
||||
SUMMARIES=""
|
||||
while IFS= read -r file; do
|
||||
FILE_DIFF=$(jj diff "$file" 2>/dev/null)
|
||||
if [[ -z "$FILE_DIFF" ]]; then
|
||||
continue
|
||||
fi
|
||||
PROMPT="Résume en 2-3 phrases les changements apportés dans ce diff pour le fichier '$file'. Sois concis et factuel.
|
||||
|
||||
$FILE_DIFF"
|
||||
SUMMARY=$(llm_query "$PROMPT")
|
||||
SUMMARIES="${SUMMARIES}### $file
|
||||
$SUMMARY
|
||||
|
||||
"
|
||||
done <<< "$FILES"
|
||||
|
||||
# Pass 2: generate commit message from summaries
|
||||
COMMIT_PROMPT="À partir des résumés suivants de fichiers modifiés, génère un message de commit git.
|
||||
Réponds UNIQUEMENT avec un objet JSON valide contenant \"title\" (string, max 72 chars, en anglais, style imperative) et \"message\" (string, détails en français). Pas de texte avant ou après le JSON.
|
||||
|
||||
$SUMMARIES"
|
||||
|
||||
llm_query "$COMMIT_PROMPT" | jq -r '.title + "\n\n" + .message'
|
||||
|
||||
Reference in New Issue
Block a user