{ "blockSetId": "control-flow", "name": "Control Flow", "description": "Logic blocks for conditionals, loops, timing, and experiment flow control", "version": "1.0.0", "pluginApiVersion": "1.0", "hriStudioVersion": ">=0.1.0", "trustLevel": "official", "category": "control-flow", "author": { "name": "HRIStudio Team", "email": "support@hristudio.com", "organization": "HRIStudio" }, "documentation": { "mainUrl": "https://docs.hristudio.org/blocks/control-flow", "description": "Control flow blocks manage the execution sequence of experiments. They provide timing, conditionals, loops, and logical operations to create sophisticated experimental protocols." }, "blocks": [ { "id": "wait", "name": "wait", "description": "Pause execution for a specified duration", "category": "control", "shape": "action", "icon": "Clock", "color": "#f97316", "nestable": false, "parameters": [ { "id": "seconds", "name": "Duration (s)", "type": "number", "value": 1, "min": 0.1, "max": 300, "step": 0.1, "description": "Time to wait in seconds" }, { "id": "show_countdown", "name": "Show Countdown", "type": "boolean", "value": false, "description": "Display countdown timer to wizard" } ], "execution": { "type": "delay", "blocking": true } }, { "id": "repeat", "name": "repeat", "description": "Execute contained blocks multiple times", "category": "control", "shape": "control", "icon": "RotateCcw", "color": "#f97316", "nestable": true, "parameters": [ { "id": "times", "name": "Repeat Count", "type": "number", "value": 3, "min": 1, "max": 100, "step": 1, "description": "Number of times to repeat" }, { "id": "delay_between", "name": "Delay Between (s)", "type": "number", "value": 0, "min": 0, "max": 60, "step": 0.1, "description": "Optional delay between repetitions" } ], "execution": { "type": "loop", "blocking": true } }, { "id": "if_condition", "name": "if", "description": "Execute blocks conditionally based on a condition", "category": "control", "shape": "control", "icon": "GitBranch", "color": "#f97316", "nestable": true, "parameters": [ { "id": "condition_type", "name": "Condition", "type": "select", "value": "participant_speaks", "options": [ "participant_speaks", "participant_silent", "object_detected", "timer_elapsed", "wizard_input", "random_chance", "custom" ], "description": "Type of condition to evaluate" }, { "id": "condition_value", "name": "Condition Value", "type": "text", "value": "", "placeholder": "Enter condition details", "description": "Additional parameters for the condition" }, { "id": "probability", "name": "Probability (%)", "type": "number", "value": 50, "min": 0, "max": 100, "step": 1, "description": "Probability for random chance condition" } ], "execution": { "type": "conditional", "blocking": true } }, { "id": "parallel", "name": "run in parallel", "description": "Execute multiple blocks simultaneously", "category": "control", "shape": "control", "icon": "Zap", "color": "#f97316", "nestable": true, "parameters": [ { "id": "wait_for_all", "name": "Wait for All", "type": "boolean", "value": true, "description": "Wait for all parallel blocks to complete" }, { "id": "timeout", "name": "Timeout (s)", "type": "number", "value": 60, "min": 1, "max": 600, "step": 1, "description": "Maximum time to wait for completion" } ], "execution": { "type": "parallel", "blocking": true } }, { "id": "sequence", "name": "sequence", "description": "Execute blocks in strict sequential order", "category": "control", "shape": "control", "icon": "List", "color": "#f97316", "nestable": true, "parameters": [ { "id": "stop_on_error", "name": "Stop on Error", "type": "boolean", "value": true, "description": "Stop sequence if any block fails" }, { "id": "delay_between", "name": "Delay Between (s)", "type": "number", "value": 0, "min": 0, "max": 10, "step": 0.1, "description": "Optional delay between blocks" } ], "execution": { "type": "sequence", "blocking": true } }, { "id": "random_choice", "name": "random choice", "description": "Randomly select one path from multiple options", "category": "control", "shape": "control", "icon": "Shuffle", "color": "#f97316", "nestable": true, "parameters": [ { "id": "seed", "name": "Random Seed", "type": "text", "value": "", "placeholder": "Optional seed for reproducibility", "description": "Seed for reproducible randomization" }, { "id": "weights", "name": "Weights", "type": "text", "value": "1,1", "placeholder": "1,1,1 (comma-separated)", "description": "Relative weights for each choice" } ], "execution": { "type": "random_branch", "blocking": true } }, { "id": "try_catch", "name": "try / catch", "description": "Execute blocks with error handling", "category": "control", "shape": "control", "icon": "Shield", "color": "#f97316", "nestable": true, "parameters": [ { "id": "retry_count", "name": "Retry Count", "type": "number", "value": 0, "min": 0, "max": 5, "step": 1, "description": "Number of times to retry on failure" }, { "id": "continue_on_error", "name": "Continue on Error", "type": "boolean", "value": false, "description": "Continue execution even if all retries fail" } ], "execution": { "type": "error_handling", "blocking": true } }, { "id": "break", "name": "break", "description": "Exit from the current loop or sequence", "category": "control", "shape": "action", "icon": "Square", "color": "#f97316", "nestable": false, "parameters": [ { "id": "break_type", "name": "Break Type", "type": "select", "value": "loop", "options": ["loop", "sequence", "trial", "experiment"], "description": "Scope of the break operation" } ], "execution": { "type": "break", "blocking": false } } ] }