feat(vwb): câblage 19 blocs, OCR réel, screenshots ancres, configs déploiement
Some checks failed
security-audit / Bandit (scan statique) (push) Successful in 13s
security-audit / pip-audit (CVE dépendances) (push) Successful in 11s
security-audit / Scan secrets (grep) (push) Successful in 8s
tests / Lint (ruff + black) (push) Successful in 13s
tests / Tests unitaires (sans GPU) (push) Failing after 14s
tests / Tests sécurité (critique) (push) Has been skipped
Some checks failed
security-audit / Bandit (scan statique) (push) Successful in 13s
security-audit / pip-audit (CVE dépendances) (push) Successful in 11s
security-audit / Scan secrets (grep) (push) Successful in 8s
tests / Lint (ruff + black) (push) Successful in 13s
tests / Tests unitaires (sans GPU) (push) Failing after 14s
tests / Tests sécurité (critique) (push) Has been skipped
Dispatch execute_action élargi de 12 à 19 blocs opérationnels : - 4 blocs souris (hover, drag_drop, scroll, focus) avec pyautogui - extract_text via Ollama VLM (remplace stub hardcodé) - 5 blocs ai_* redirigés vers execute_ai_analyze avec prompts adaptés - screenshot_evidence (capture + sauvegarde PNG) - verify_element_exists (détection visuelle CLIP) Import workflows Léa enrichi : - Bridge extrait anchor_image_base64 des edges - Import crée VisualAnchor en DB + fichiers thumbnail sur disque - PropertiesPanel affiche automatiquement les screenshots Frontend : - visual_condition et loop_visual masqués (hidden: true) - Filtre dans ToolPalette pour exclure les blocs cachés Déploiement : - 2 configs agent (TIM Pauline + Dev Windows) avec machine_id unique - 2 workflows démo dans la BDD (batch factures + extraction IA) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -27,7 +27,7 @@ export default function ToolPalette() {
|
||||
<div className="tool-categories">
|
||||
{categories.map((catKey) => {
|
||||
const cat = ACTION_CATEGORIES[catKey];
|
||||
const tools = ACTIONS.filter(a => a.category === catKey);
|
||||
const tools = ACTIONS.filter(a => a.category === catKey && !a.hidden);
|
||||
const isExpanded = expandedCategories.includes(catKey);
|
||||
|
||||
if (tools.length === 0) return null;
|
||||
|
||||
@@ -71,6 +71,7 @@ export interface ActionDefinition {
|
||||
category: 'mouse' | 'keyboard' | 'wait' | 'data' | 'logic' | 'ai' | 'llm' | 'validation' | 'files';
|
||||
needsAnchor: boolean;
|
||||
params: { name: string; type: string; description: string }[];
|
||||
hidden?: boolean;
|
||||
}
|
||||
|
||||
export const ACTIONS: ActionDefinition[] = [
|
||||
@@ -116,11 +117,11 @@ export const ACTIONS: ActionDefinition[] = [
|
||||
] },
|
||||
|
||||
// === LOGIQUE ===
|
||||
{ type: 'visual_condition', label: 'Condition visuelle', icon: '🔀', description: 'Branchement conditionnel : si l\'ancre est trouvée, suit la sortie bas ; sinon, la sortie droite.', category: 'logic', needsAnchor: true, params: [
|
||||
{ type: 'visual_condition', label: 'Condition visuelle', icon: '🔀', description: 'Branchement conditionnel : si l\'ancre est trouvée, suit la sortie bas ; sinon, la sortie droite.', category: 'logic', needsAnchor: true, hidden: true, params: [
|
||||
{ name: 'on_found', type: 'string', description: 'ID de l\'étape si l\'élément est trouvé' },
|
||||
{ name: 'on_not_found', type: 'string', description: 'ID de l\'étape si l\'élément n\'est pas trouvé' }
|
||||
] },
|
||||
{ type: 'loop_visual', label: 'Boucle visuelle', icon: '🔁', description: 'Répète les étapes connectées tant que l\'ancre est visible.', category: 'logic', needsAnchor: true, params: [
|
||||
{ type: 'loop_visual', label: 'Boucle visuelle', icon: '🔁', description: 'Répète les étapes connectées tant que l\'ancre est visible.', category: 'logic', needsAnchor: true, hidden: true, params: [
|
||||
{ name: 'max_iterations', type: 'number', description: 'Nombre maximum d\'itérations' }
|
||||
] },
|
||||
|
||||
|
||||
Reference in New Issue
Block a user