Files
rpa_vision_v3/deploy/build_package.sh
Dom 42f571d496 docs(audit): README honnête + STATUS + DEV_SETUP + cleanup build
- README.md : bandeau POC, date 14 avril 2026, retrait claims
  "production-ready 77%" (alignement code/doc post-audit)
- docs/STATUS.md : état réel par module (opérationnel/alpha/en cours)
- docs/DEV_SETUP.md : gestion worktrees Claude
- QUICK_START.md : gemma4:latest au lieu de qwen3-vl:8b
- deploy/build_package.sh : +9 fichiers dans REQUIRED_FILES
  (system_dialog_guard.py, persistent_buffer.py, grounding.py, etc.)
- agent_v0/deploy_windows.py : marqué OBSOLÈTE (legacy)
- .gitignore : ajout data/, .hypothesis, .deps_installed, buffer/,
  instance/*.db, caches SQLite

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:49:29 +02:00

230 lines
8.3 KiB
Bash
Executable File

#!/bin/bash
# ============================================================
# build_package.sh — Assemble le package Lea pour deploiement Windows
#
# Produit : Lea_v<version>.zip (< 5 MB sans venv)
#
# Usage :
# ./deploy/build_package.sh # Package standard
# ./deploy/build_package.sh --clean # Nettoyer avant de builder
#
# Le zip contient tout ce qu'il faut pour un deploiement :
# - install.bat (premiere installation)
# - Lea.bat (lancement quotidien)
# - config.txt (parametres serveur)
# - LISEZMOI.txt (documentation utilisateur)
# - Code Python de l'agent
# ============================================================
set -euo pipefail
# Couleurs pour les messages
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Repertoire racine du projet
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# Version (lue depuis config.py de l'agent)
VERSION=$(grep -oP 'AGENT_VERSION\s*=\s*"([^"]+)"' "$PROJECT_ROOT/agent_v0/agent_v1/config.py" | grep -oP '"[^"]+"' | tr -d '"' || echo "1.0.0")
# Dossier de sortie
BUILD_DIR="$SCRIPT_DIR/build"
PACKAGE_DIR="$BUILD_DIR/Lea"
OUTPUT_ZIP="$SCRIPT_DIR/Lea_v${VERSION}.zip"
echo -e "${GREEN}============================================================${NC}"
echo -e "${GREEN} Build du package Lea v${VERSION}${NC}"
echo -e "${GREEN}============================================================${NC}"
echo ""
# ---------------------------------------------------------------
# Option --clean
# ---------------------------------------------------------------
if [[ "${1:-}" == "--clean" ]]; then
echo -e "${YELLOW}Nettoyage du build precedent...${NC}"
rm -rf "$BUILD_DIR"
rm -f "$SCRIPT_DIR"/Lea_v*.zip
echo " OK"
echo ""
fi
# ---------------------------------------------------------------
# 1. Creer le dossier de build
# ---------------------------------------------------------------
echo "[1/7] Preparation du dossier de build..."
rm -rf "$PACKAGE_DIR"
mkdir -p "$PACKAGE_DIR"
echo " $PACKAGE_DIR cree"
echo ""
# ---------------------------------------------------------------
# 2. Copier les fichiers de deploiement (bat, config, readme)
# ---------------------------------------------------------------
echo "[2/7] Copie des fichiers de deploiement..."
cp "$SCRIPT_DIR/lea_package/Lea.bat" "$PACKAGE_DIR/"
cp "$SCRIPT_DIR/lea_package/install.bat" "$PACKAGE_DIR/"
cp "$SCRIPT_DIR/lea_package/config.txt" "$PACKAGE_DIR/"
cp "$SCRIPT_DIR/lea_package/LISEZMOI.txt" "$PACKAGE_DIR/"
cp "$SCRIPT_DIR/lea_package/requirements_agent.txt" "$PACKAGE_DIR/"
echo " 5 fichiers copies"
echo ""
# ---------------------------------------------------------------
# 3. Copier le point d'entree
# ---------------------------------------------------------------
echo "[3/7] Copie du point d'entree..."
cp "$PROJECT_ROOT/agent_v0/run_agent_v1.py" "$PACKAGE_DIR/"
echo " run_agent_v1.py copie"
echo ""
# ---------------------------------------------------------------
# 4. Copier le package agent_v1 (code Python)
# ---------------------------------------------------------------
echo "[4/7] Copie du code agent_v1..."
# Copier tout le dossier en excluant uniquement les artefacts de build/test.
# IMPORTANT : ne PAS exclure les modules Python ui/ (shared_state, chat_window,
# capture_server) — ils sont requis par main.py et causent un crash au demarrage
# s'ils sont absents.
rsync -a \
--exclude='__pycache__' \
--exclude='*.pyc' \
--exclude='.pytest_cache' \
--exclude='sessions/' \
--exclude='logs/*.log' \
--exclude='.hypothesis' \
--exclude='*.md' \
"$PROJECT_ROOT/agent_v0/agent_v1/" \
"$PACKAGE_DIR/agent_v1/"
# Creer les dossiers necessaires (vides)
mkdir -p "$PACKAGE_DIR/agent_v1/sessions"
mkdir -p "$PACKAGE_DIR/agent_v1/logs"
echo " agent_v1/ copie ($(find "$PACKAGE_DIR/agent_v1" -name "*.py" | wc -l) fichiers Python)"
echo ""
# ---------------------------------------------------------------
# 5. Copier le module lea_ui (client serveur pour le chat)
# ---------------------------------------------------------------
echo "[5/7] Copie du module lea_ui..."
mkdir -p "$PACKAGE_DIR/lea_ui"
cp "$PROJECT_ROOT/agent_v0/lea_ui/__init__.py" "$PACKAGE_DIR/lea_ui/"
cp "$PROJECT_ROOT/agent_v0/lea_ui/server_client.py" "$PACKAGE_DIR/lea_ui/"
echo " lea_ui/ copie (2 fichiers)"
echo ""
# ---------------------------------------------------------------
# 6. Copier le __init__.py racine (pour les imports relatifs)
# ---------------------------------------------------------------
echo "[6/7] Configuration des packages Python..."
# Le __init__.py au niveau racine du package (agent_v0 level)
# n'est PAS necessaire car run_agent_v1.py est au meme niveau que agent_v1/
# Mais lea_ui est importe avec un import relatif depuis agent_v1/main.py
# via `from ..lea_ui.server_client import LeaServerClient`
# Cet import fonctionne uniquement si l'arborescence est un package.
# Or, dans le deploiement, lea_ui est au meme niveau que agent_v1,
# et le fallback dans main.py fait `from lea_ui.server_client import LeaServerClient`
# qui fonctionne car run_agent_v1.py ajoute current_dir au sys.path.
echo " Structure d'imports verifiee"
echo ""
# ---------------------------------------------------------------
# 6b. Verification des modules requis
# ---------------------------------------------------------------
echo "[6b/7] Verification des modules Python requis..."
MISSING=0
REQUIRED_FILES=(
"agent_v1/__init__.py"
"agent_v1/main.py"
"agent_v1/config.py"
"agent_v1/window_info.py"
"agent_v1/window_info_crossplatform.py"
"agent_v1/core/__init__.py"
"agent_v1/core/captor.py"
"agent_v1/core/executor.py"
"agent_v1/core/grounding.py"
"agent_v1/core/policy.py"
"agent_v1/core/recovery.py"
"agent_v1/core/system_dialog_guard.py"
"agent_v1/core/uia_helper.py"
"agent_v1/network/__init__.py"
"agent_v1/network/streamer.py"
"agent_v1/network/persistent_buffer.py"
"agent_v1/session/__init__.py"
"agent_v1/session/storage.py"
"agent_v1/ui/__init__.py"
"agent_v1/ui/shared_state.py"
"agent_v1/ui/smart_tray.py"
"agent_v1/ui/chat_window.py"
"agent_v1/ui/capture_server.py"
"agent_v1/ui/notifications.py"
"agent_v1/ui/activity_panel.py"
"agent_v1/ui/messages.py"
"agent_v1/vision/__init__.py"
"agent_v1/vision/capturer.py"
"agent_v1/vision/blur_sensitive.py"
"agent_v1/vision/system_info.py"
"agent_v1/monitoring/__init__.py"
"lea_ui/__init__.py"
"lea_ui/server_client.py"
"run_agent_v1.py"
)
for req_file in "${REQUIRED_FILES[@]}"; do
if [[ ! -f "$PACKAGE_DIR/$req_file" ]]; then
echo -e " ${RED}MANQUANT : $req_file${NC}"
MISSING=$((MISSING + 1))
fi
done
if [[ $MISSING -gt 0 ]]; then
echo ""
echo -e "${RED} ERREUR : $MISSING fichier(s) requis manquant(s) !${NC}"
echo -e "${RED} Le package est INCOMPLET — corrigez build_package.sh avant de deployer.${NC}"
exit 1
fi
echo -e " ${GREEN}Tous les ${#REQUIRED_FILES[@]} fichiers requis sont presents.${NC}"
echo ""
# ---------------------------------------------------------------
# 7. Creer le zip
# ---------------------------------------------------------------
echo "[7/7] Creation du zip..."
cd "$BUILD_DIR"
rm -f "$OUTPUT_ZIP"
zip -r "$OUTPUT_ZIP" "Lea/" -x "Lea/.venv/*" "Lea/__pycache__/*" "Lea/*/__pycache__/*"
cd "$PROJECT_ROOT"
# Taille du zip
ZIP_SIZE=$(du -h "$OUTPUT_ZIP" | cut -f1)
echo ""
echo -e "${GREEN}============================================================${NC}"
echo -e "${GREEN} Build termine !${NC}"
echo -e "${GREEN}============================================================${NC}"
echo ""
echo " Package : $OUTPUT_ZIP"
echo " Taille : $ZIP_SIZE"
echo " Version : $VERSION"
echo ""
echo " Contenu du package :"
echo " --------------------"
echo ""
# Lister le contenu du zip (structure lisible)
unzip -l "$OUTPUT_ZIP" | tail -n +4 | head -n -2 | awk '{print " " $4}'
echo ""
echo -e "${YELLOW} Deploiement :${NC}"
echo " 1. Copier le zip sur le PC Windows du collaborateur"
echo " 2. Dezipper dans un dossier (ex: C:\\Lea)"
echo " 3. Editer config.txt si besoin (adresse serveur, token)"
echo " 4. Double-cliquer install.bat (une seule fois)"
echo " 5. Double-cliquer Lea.bat pour lancer"
echo ""
echo -e "${GREEN}============================================================${NC}"