From 16ff396dbf70d59f9bdc53b7346f4c1f1cbf124d Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 23 Apr 2026 09:14:56 +0200 Subject: [PATCH] =?UTF-8?q?chore:=20sauvegarde=20pr=C3=A9-stabilisation=20?= =?UTF-8?q?=E2=80=94=20audit=2066/66=20tests=20OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Audit qualité : 0 bug critique, 5 points dette technique (post-démo). Boucle ORA fonctionnelle : UI-TARS + pré-vérification + recovery Win+D. Script test_instruction.sh ajouté. Co-Authored-By: Claude Opus 4.6 (1M context) --- tools/test_instruction.sh | 37 ++++++++++++++++++ .../backend/instance/workflows.db | Bin 696320 -> 761856 bytes 2 files changed, 37 insertions(+) create mode 100755 tools/test_instruction.sh diff --git a/tools/test_instruction.sh b/tools/test_instruction.sh new file mode 100755 index 000000000..9432c729c --- /dev/null +++ b/tools/test_instruction.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Test de l'endpoint instruction en langage naturel +# Usage : ./tools/test_instruction.sh "ouvre le dossier Demo sur le bureau" + +INSTRUCTION="${1:-ouvre le dossier Demo sur le bureau}" +API="http://localhost:5002/api/v3" + +echo "🧠 Instruction : $INSTRUCTION" +echo "" + +# Lancer l'instruction +RESULT=$(curl -s -X POST "$API/execute/instruction" \ + -H "Content-Type: application/json" \ + -d "{\"instruction\": \"$INSTRUCTION\"}") + +echo "📤 Réponse : $RESULT" +echo "" + +# Polling du résultat +echo "⏳ En attente du résultat..." +for i in $(seq 1 60); do + sleep 2 + STATUS=$(curl -s "$API/execute/instruction/result") + RUNNING=$(echo "$STATUS" | python3 -c "import json,sys; print(json.load(sys.stdin).get('is_running', False))" 2>/dev/null) + + if [ "$RUNNING" = "False" ]; then + echo "" + echo "✅ Terminé !" + echo "$STATUS" | python3 -m json.tool 2>/dev/null + exit 0 + fi + + echo -n "." +done + +echo "" +echo "⚠️ Timeout après 2 minutes" diff --git a/visual_workflow_builder/backend/instance/workflows.db b/visual_workflow_builder/backend/instance/workflows.db index edcdbb0897a44fd0ea378d35c1a196933b92c19d..7f74e27ffafcd5246448e552a9618f6d9a0fd939 100644 GIT binary patch delta 48554 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 bz==)GoJ8<_(-iqnrPBt7n-+akK;{1fi{N-_ delta 1090 zcmZvae@vBC7{}lDocDdtkN3Rqd*MP7p_Vg_^Fld8pd?+; zD&SsRg<87|^5`044I{YCAAq~B%_7LT8f6fPvgR@=tu{)a4g0}b2ej26ZRh*Xb3W&L zzRz<`<6wH@;633)Ep9-Pq)3ZvJ%}6V4TLwy?*5q#PInTuhQ)^TuJxxiXU$ks)(_UC zb;-J5jatL~%iTw<{&NlYIq()^Y60tMW#N;eoMFK3{d&`E`>V6)AS%sQ;#4)T4Tv{+wQ@XXqyVnSM?qw3+Upd0>vFQb4YdLDE6$}Jo6aM5UWCQ}E&4|Sl+U=_Iz zJM6Il9!CIf76BfEivds-{v&s}GA9{Qy<`PU7rUk(q!&mnc56SWO;SDl0MyAFT8GT7 zw!aV8DNwvH54!O_dpL?KWV6nA$d`oy2*np<`Fz~dOp^GWy*P`v=HV55MVA;ucP~Ed z@VGqQwVpL=y*cULY){U;cE%|@wj^1&F)3RzqeeALp%=*kyivQMb}E}7l$)jO7GGR^ z$nTCV2v!EG0gzEt6eUSveAz8kO+(q6=nW6;H^Hs zJSh&mbBruq=p$FGP?6_l@C(G}U308$KhM{lzY^)9f&-YT+}*hPAq;Peu!3}zX7hGK>Gjy