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:
157
Makefile
157
Makefile
@@ -1,28 +1,120 @@
|
||||
# Makefile pour dev container AI + MCP bootstrap
|
||||
# =============================================================================
|
||||
# Image identity
|
||||
# =============================================================================
|
||||
|
||||
# Variables
|
||||
PROJECT_DIR := $(shell pwd)
|
||||
IMAGE_NAME := pmocrazycoder
|
||||
IMAGE_TAG := latest
|
||||
|
||||
# =============================================================================
|
||||
# Registry
|
||||
# =============================================================================
|
||||
|
||||
REGISTRY := niepce.petite-maison-orange.fr/public
|
||||
|
||||
# =============================================================================
|
||||
# Build platforms
|
||||
# =============================================================================
|
||||
|
||||
PLATFORMS := linux/amd64,linux/arm64
|
||||
|
||||
# =============================================================================
|
||||
# Derived image identifiers
|
||||
# =============================================================================
|
||||
|
||||
FULL_IMAGE := $(REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)
|
||||
OCI_ARCHIVE := $(IMAGE_NAME)-$(IMAGE_TAG).oci.tar
|
||||
|
||||
# =============================================================================
|
||||
# Docker buildx builder
|
||||
# =============================================================================
|
||||
|
||||
BUILDER := $(IMAGE_NAME)-builder
|
||||
|
||||
# =============================================================================
|
||||
# OCI image annotations (injected via --build-arg)
|
||||
# =============================================================================
|
||||
|
||||
OCI_VERSION := $(IMAGE_TAG)
|
||||
OCI_CREATED := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
||||
OCI_REVISION := $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
||||
|
||||
# =============================================================================
|
||||
# Build context
|
||||
# =============================================================================
|
||||
|
||||
PROJECT_DIR := $(shell pwd)
|
||||
BUILD_CONTEXT := .
|
||||
DOCKERFILE := Dockerfile
|
||||
|
||||
BUILD_ARGS := \
|
||||
--build-arg OCI_VERSION=$(OCI_VERSION) \
|
||||
--build-arg OCI_CREATED=$(OCI_CREATED) \
|
||||
--build-arg OCI_REVISION=$(OCI_REVISION)
|
||||
|
||||
# =============================================================================
|
||||
# Dev container
|
||||
# =============================================================================
|
||||
|
||||
WORKSPACE := /workspace
|
||||
CONTAINER_NAME := ai-dev-container
|
||||
WORKSPACE := /workspace
|
||||
MCP_LOG := $(WORKSPACE)/.ai_index/mcp.log
|
||||
MCP_LOG := $(WORKSPACE)/.ai_index/mcp.log
|
||||
|
||||
# --- Dev Container Management ---
|
||||
# =============================================================================
|
||||
# Targets
|
||||
# =============================================================================
|
||||
|
||||
# Build the container
|
||||
.PHONY: all build build-multiplatform push run run-mcp \
|
||||
init-index mcp-list embeddings update-graph \
|
||||
restart-mcp bootstrap clean clean-builder help
|
||||
|
||||
## all : Build multi-platform image, push to registry
|
||||
all: build-multiplatform push
|
||||
|
||||
## build : Build for the native platform and load into the local Docker daemon
|
||||
build:
|
||||
docker build -t $(CONTAINER_NAME) .
|
||||
docker build $(BUILD_ARGS) \
|
||||
--tag $(FULL_IMAGE) \
|
||||
--file $(DOCKERFILE) \
|
||||
$(BUILD_CONTEXT)
|
||||
|
||||
# Run interactive container with mounted project
|
||||
## build-multiplatform : Build for $(PLATFORMS) and export as a local OCI archive
|
||||
build-multiplatform: .builder-ready
|
||||
docker buildx build $(BUILD_ARGS) \
|
||||
--builder $(BUILDER) \
|
||||
--platform $(PLATFORMS) \
|
||||
--tag $(FULL_IMAGE) \
|
||||
--file $(DOCKERFILE) \
|
||||
--provenance=false \
|
||||
--output type=oci,dest=$(OCI_ARCHIVE) \
|
||||
$(BUILD_CONTEXT)
|
||||
|
||||
# Create the buildx builder with docker-container driver (once)
|
||||
.builder-ready:
|
||||
docker buildx inspect $(BUILDER) > /dev/null 2>&1 \
|
||||
|| docker buildx create --name $(BUILDER) --driver docker-container --bootstrap
|
||||
touch .builder-ready
|
||||
|
||||
## push : Push the OCI archive to the registry using skopeo
|
||||
push: $(OCI_ARCHIVE)
|
||||
skopeo copy \
|
||||
--dest-tls-verify=true \
|
||||
--multi-arch all \
|
||||
oci-archive:$(OCI_ARCHIVE) \
|
||||
docker://$(FULL_IMAGE)
|
||||
|
||||
# Ensure the OCI archive exists before pushing
|
||||
$(OCI_ARCHIVE):
|
||||
$(MAKE) build-multiplatform
|
||||
|
||||
## run : Run interactive container with mounted project
|
||||
run:
|
||||
docker run -v $(PROJECT_DIR):$(WORKSPACE) -it --rm $(CONTAINER_NAME)
|
||||
docker run -v $(PROJECT_DIR):$(WORKSPACE) -it --rm $(FULL_IMAGE)
|
||||
|
||||
# Run container with MCP server in background
|
||||
## run-mcp : Run container with MCP server in background
|
||||
run-mcp:
|
||||
docker run -v $(PROJECT_DIR):$(WORKSPACE) -it --rm $(CONTAINER_NAME) bash
|
||||
docker run -v $(PROJECT_DIR):$(WORKSPACE) -it --rm $(FULL_IMAGE) bash
|
||||
|
||||
# --- MCP / Index Management ---
|
||||
|
||||
# Initialize .ai_index
|
||||
## init-index : Initialize .ai_index directory structure
|
||||
init-index:
|
||||
@echo "[MAKE] Initializing .ai_index..."
|
||||
mkdir -p $(PROJECT_DIR)/.ai_index/ast
|
||||
@@ -31,36 +123,45 @@ init-index:
|
||||
sqlite3 $(PROJECT_DIR)/.ai_index/graph.db "VACUUM;"; \
|
||||
fi
|
||||
|
||||
# Run MCP tool (list imports)
|
||||
## mcp-list : Run MCP list_imports tool
|
||||
mcp-list:
|
||||
@echo "[MAKE] Running MCP list_imports.py..."
|
||||
python3 $(PROJECT_DIR)/opt/dev-tools/list_imports.py --project $(WORKSPACE)
|
||||
|
||||
# Update embeddings (example)
|
||||
## embeddings : Generate embeddings
|
||||
embeddings:
|
||||
@echo "[MAKE] Generating embeddings..."
|
||||
python3 $(PROJECT_DIR)/opt/dev-tools/generate_embeddings.py --project $(WORKSPACE)
|
||||
|
||||
# Update graph (example)
|
||||
## update-graph : Update dependency graph
|
||||
update-graph:
|
||||
@echo "[MAKE] Updating dependency graph..."
|
||||
python3 $(PROJECT_DIR)/opt/dev-tools/update_graph.py --project $(WORKSPACE)
|
||||
|
||||
# Clean logs and temporary files
|
||||
clean:
|
||||
@echo "[MAKE] Cleaning .ai_index..."
|
||||
rm -f $(PROJECT_DIR)/.ai_index/*.log
|
||||
rm -rf $(PROJECT_DIR)/.ai_index/ast/*
|
||||
rm -rf $(PROJECT_DIR)/.ai_index/embeddings/*
|
||||
|
||||
# Restart MCP server inside container
|
||||
## restart-mcp : Restart MCP server inside running container
|
||||
restart-mcp:
|
||||
docker exec -it $(CONTAINER_NAME) bash -c "\
|
||||
pkill -f mcp-server; \
|
||||
/opt/bin/mcp-server --project $(WORKSPACE) > $(MCP_LOG) 2>&1 & \
|
||||
"
|
||||
|
||||
# --- Bootstrap for new project ---
|
||||
# Build container, init index
|
||||
## bootstrap : Build container and init index
|
||||
bootstrap: build init-index
|
||||
@echo "[MAKE] Bootstrap complete. Run 'make run' to start the container."
|
||||
|
||||
## clean : Remove OCI archive, local image and generated files
|
||||
clean: clean-builder
|
||||
docker rmi --force $(FULL_IMAGE) 2>/dev/null || true
|
||||
rm -f $(OCI_ARCHIVE)
|
||||
rm -f $(PROJECT_DIR)/.ai_index/*.log
|
||||
rm -rf $(PROJECT_DIR)/.ai_index/ast/*
|
||||
rm -rf $(PROJECT_DIR)/.ai_index/embeddings/*
|
||||
|
||||
## clean-builder : Remove the buildx builder
|
||||
clean-builder:
|
||||
docker buildx rm $(BUILDER) 2>/dev/null || true
|
||||
rm -f .builder-ready
|
||||
|
||||
## help : Show this help
|
||||
help:
|
||||
@grep -E '^## ' $(MAKEFILE_LIST) | sed 's/^## //'
|
||||
|
||||
Reference in New Issue
Block a user