v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution

- Frontend v4 accessible sur réseau local (192.168.1.40)
- Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard)
- Ollama GPU fonctionnel
- Self-healing interactif
- Dashboard confiance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Dom
2026-01-29 11:23:51 +01:00
parent 21bfa3b337
commit a27b74cf22
1595 changed files with 412691 additions and 400 deletions

View File

@@ -0,0 +1,128 @@
/**
* Test Simple - Logique de Propriétés d'Étapes
* Auteur : Dom, Alice, Kiro - 12 janvier 2026
*
* Ce script teste la logique de base pour identifier le problème.
*/
// Configuration des paramètres (copie simplifiée)
const stepParametersConfig = {
click: [
{ name: 'target', label: 'Élément cible', type: 'visual', required: true },
{ name: 'clickType', label: 'Type de clic', type: 'select', defaultValue: 'left' },
],
type: [
{ name: 'target', label: 'Champ de saisie', type: 'visual', required: true },
{ name: 'text', label: 'Texte à saisir', type: 'text', required: true },
{ name: 'clearFirst', label: 'Vider le champ d\'abord', type: 'boolean', defaultValue: true },
],
wait: [
{ name: 'duration', label: 'Durée (secondes)', type: 'number', required: true, defaultValue: 1 },
],
condition: [
{ name: 'condition', label: 'Condition', type: 'text', required: true },
],
extract: [
{ name: 'target', label: 'Élément source', type: 'visual', required: true },
{ name: 'attribute', label: 'Attribut à extraire', type: 'select', defaultValue: 'text' },
],
scroll: [
{ name: 'direction', label: 'Direction', type: 'select', defaultValue: 'down' },
{ name: 'amount', label: 'Quantité (pixels)', type: 'number', defaultValue: 300 },
],
navigate: [
{ name: 'url', label: 'URL de destination', type: 'text', required: true },
],
screenshot: [
{ name: 'filename', label: 'Nom du fichier', type: 'text' },
],
};
// Fonction de test (copie de PropertiesPanel)
function getParameterConfig(selectedStep) {
console.log('🔍 getParameterConfig appelée avec:', selectedStep);
if (!selectedStep) {
console.log('❌ selectedStep est null/undefined');
return [];
}
console.log('🔍 selectedStep.type:', selectedStep.type);
console.log('🔍 Type de selectedStep.type:', typeof selectedStep.type);
console.log('🔍 Clés disponibles dans stepParametersConfig:', Object.keys(stepParametersConfig));
const config = stepParametersConfig[selectedStep.type];
console.log('🔍 Configuration trouvée:', config);
console.log('🔍 Longueur de la configuration:', config ? config.length : 0);
const result = config || [];
console.log('✅ Résultat final:', result);
return result;
}
// Tests
console.log('🚀 Début des tests de logique de propriétés d\'étapes');
console.log('=' .repeat(60));
const testSteps = [
{ id: 'test1', type: 'click', name: 'Test Click' },
{ id: 'test2', type: 'type', name: 'Test Type' },
{ id: 'test3', type: 'wait', name: 'Test Wait' },
{ id: 'test4', type: 'invalid', name: 'Test Invalid' },
{ id: 'test5', type: 'click_anchor', name: 'Test VWB Click' }, // Action VWB
];
testSteps.forEach((step, index) => {
console.log(`\n🧪 Test ${index + 1}: ${step.name} (type: "${step.type}")`);
const config = getParameterConfig(step);
console.log(`📊 Résultat: ${config.length} paramètres trouvés`);
if (config.length > 0) {
console.log('✅ SUCCÈS - Paramètres disponibles:');
config.forEach(param => {
console.log(` - ${param.name}: ${param.label} (${param.type})`);
});
} else {
console.log('❌ ÉCHEC - Aucun paramètre trouvé');
// Diagnostic
if (stepParametersConfig[step.type]) {
console.log('🚨 PROBLÈME: Configuration existe mais non retournée!');
} else {
console.log(' INFO: Aucune configuration pour ce type (normal pour les actions VWB)');
}
}
});
console.log('\n' + '=' .repeat(60));
console.log('📊 RÉSUMÉ DES TESTS');
console.log('=' .repeat(60));
// Résumé
const results = testSteps.map(step => ({
type: step.type,
configExists: !!stepParametersConfig[step.type],
paramCount: getParameterConfig(step).length,
}));
results.forEach(result => {
const status = result.paramCount > 0 ? '✅' : '❌';
console.log(`${status} ${result.type}: ${result.paramCount} paramètres (config existe: ${result.configExists})`);
});
const successCount = results.filter(r => r.paramCount > 0).length;
const totalCount = results.length;
console.log(`\n📈 Taux de succès: ${successCount}/${totalCount} (${((successCount/totalCount)*100).toFixed(1)}%)`);
if (successCount < totalCount) {
console.log('\n🔧 RECOMMANDATIONS:');
console.log('1. Vérifier que tous les types d\'étapes ont une configuration');
console.log('2. Vérifier la logique de détection des actions VWB');
console.log('3. Ajouter des logs dans le composant React pour déboguer en temps réel');
}
console.log('\n✅ Tests terminés');