{
  "blockSetId": "observation",
  "name": "Observation & Sensing",
  "description": "Data collection and behavioral observation blocks for capturing experiment metrics",
  "version": "1.0.0",
  "pluginApiVersion": "1.0",
  "hriStudioVersion": ">=0.1.0",
  "trustLevel": "official",
  "category": "sensors",

  "author": {
    "name": "HRIStudio Team",
    "email": "support@hristudio.com",
    "organization": "HRIStudio"
  },

  "documentation": {
    "mainUrl": "https://docs.hristudio.org/blocks/observation",
    "description": "Observation blocks enable systematic data collection during experiments. They capture behavioral observations, sensor readings, and interaction metrics for later analysis."
  },

  "blocks": [
    {
      "id": "observe_behavior",
      "name": "observe behavior",
      "description": "Record behavioral observations during the trial",
      "category": "sensor",
      "shape": "action",
      "icon": "Eye",
      "color": "#16a34a",
      "nestable": false,
      "parameters": [
        {
          "id": "behavior_type",
          "name": "Behavior Type",
          "type": "select",
          "value": "engagement",
          "options": [
            "engagement",
            "attention",
            "confusion",
            "comfort",
            "compliance",
            "interaction_quality",
            "task_performance",
            "emotional_state",
            "custom"
          ],
          "description": "Category of behavior being observed"
        },
        {
          "id": "custom_behavior",
          "name": "Custom Behavior",
          "type": "text",
          "value": "",
          "placeholder": "Describe custom behavior",
          "description": "Description for custom behavior type"
        },
        {
          "id": "duration",
          "name": "Observation Duration (s)",
          "type": "number",
          "value": 5,
          "min": 1,
          "max": 300,
          "step": 1,
          "description": "How long to observe the behavior"
        },
        {
          "id": "rating_scale",
          "name": "Rating Scale",
          "type": "select",
          "value": "1-5",
          "options": ["1-3", "1-5", "1-7", "1-10", "0-100", "boolean", "notes_only"],
          "description": "Scale for quantifying the observation"
        }
      ],
      "execution": {
        "type": "observation",
        "blocking": true,
        "data_capture": true
      }
    },
    {
      "id": "measure_response_time",
      "name": "measure response time",
      "description": "Measure time between stimulus and participant response",
      "category": "sensor",
      "shape": "action",
      "icon": "Stopwatch",
      "color": "#16a34a",
      "nestable": false,
      "parameters": [
        {
          "id": "stimulus_type",
          "name": "Stimulus",
          "type": "select",
          "value": "robot_action",
          "options": [
            "robot_action",
            "wizard_speech",
            "visual_cue",
            "audio_cue",
            "touch",
            "custom"
          ],
          "description": "Type of stimulus that starts the timer"
        },
        {
          "id": "response_type",
          "name": "Response Type",
          "type": "select",
          "value": "verbal",
          "options": [
            "verbal",
            "gesture",
            "movement",
            "button_press",
            "eye_contact",
            "any_action",
            "custom"
          ],
          "description": "Type of response that stops the timer"
        },
        {
          "id": "timeout",
          "name": "Timeout (s)",
          "type": "number",
          "value": 30,
          "min": 1,
          "max": 300,
          "step": 1,
          "description": "Maximum time to wait for response"
        }
      ],
      "execution": {
        "type": "timing_measurement",
        "blocking": true,
        "data_capture": true
      }
    },
    {
      "id": "count_events",
      "name": "count events",
      "description": "Count occurrences of specific events or behaviors",
      "category": "sensor",
      "shape": "action",
      "icon": "Hash",
      "color": "#16a34a",
      "nestable": false,
      "parameters": [
        {
          "id": "event_type",
          "name": "Event Type",
          "type": "select",
          "value": "verbal_utterances",
          "options": [
            "verbal_utterances",
            "gestures",
            "eye_contact",
            "interruptions",
            "questions_asked",
            "task_attempts",
            "errors",
            "custom"
          ],
          "description": "Type of event to count"
        },
        {
          "id": "custom_event",
          "name": "Custom Event",
          "type": "text",
          "value": "",
          "placeholder": "Describe custom event",
          "description": "Description for custom event type"
        },
        {
          "id": "counting_period",
          "name": "Counting Period (s)",
          "type": "number",
          "value": 60,
          "min": 5,
          "max": 600,
          "step": 5,
          "description": "Duration to count events"
        },
        {
          "id": "auto_detect",
          "name": "Auto Detection",
          "type": "boolean",
          "value": false,
          "description": "Attempt automatic detection (if supported)"
        }
      ],
      "execution": {
        "type": "event_counting",
        "blocking": true,
        "data_capture": true
      }
    },
    {
      "id": "record_audio",
      "name": "record audio",
      "description": "Capture audio recording during interaction",
      "category": "sensor",
      "shape": "action",
      "icon": "Mic",
      "color": "#16a34a",
      "nestable": false,
      "parameters": [
        {
          "id": "duration",
          "name": "Duration (s)",
          "type": "number",
          "value": 30,
          "min": 1,
          "max": 600,
          "step": 1,
          "description": "Length of audio recording"
        },
        {
          "id": "quality",
          "name": "Quality",
          "type": "select",
          "value": "standard",
          "options": ["low", "standard", "high", "lossless"],
          "description": "Audio recording quality"
        },
        {
          "id": "channels",
          "name": "Channels",
          "type": "select",
          "value": "mono",
          "options": ["mono", "stereo", "multi"],
          "description": "Audio channel configuration"
        },
        {
          "id": "auto_transcribe",
          "name": "Auto Transcribe",
          "type": "boolean",
          "value": false,
          "description": "Automatically transcribe speech to text"
        }
      ],
      "execution": {
        "type": "audio_recording",
        "blocking": true,
        "data_capture": true
      }
    },
    {
      "id": "capture_video",
      "name": "capture video",
      "description": "Record video of the interaction",
      "category": "sensor",
      "shape": "action",
      "icon": "Video",
      "color": "#16a34a",
      "nestable": false,
      "parameters": [
        {
          "id": "duration",
          "name": "Duration (s)",
          "type": "number",
          "value": 30,
          "min": 1,
          "max": 600,
          "step": 1,
          "description": "Length of video recording"
        },
        {
          "id": "camera",
          "name": "Camera",
          "type": "select",
          "value": "primary",
          "options": ["primary", "secondary", "overhead", "robot_pov", "all"],
          "description": "Which camera(s) to use"
        },
        {
          "id": "resolution",
          "name": "Resolution",
          "type": "select",
          "value": "720p",
          "options": ["480p", "720p", "1080p", "4K"],
          "description": "Video resolution"
        },
        {
          "id": "framerate",
          "name": "Frame Rate",
          "type": "select",
          "value": "30fps",
          "options": ["15fps", "30fps", "60fps", "120fps"],
          "description": "Video frame rate"
        }
      ],
      "execution": {
        "type": "video_recording",
        "blocking": true,
        "data_capture": true
      }
    },
    {
      "id": "log_event",
      "name": "log event",
      "description": "Record a timestamped event in the trial log",
      "category": "sensor",
      "shape": "action",
      "icon": "FileText",
      "color": "#16a34a",
      "nestable": false,
      "parameters": [
        {
          "id": "event_name",
          "name": "Event Name",
          "type": "text",
          "value": "",
          "placeholder": "Name of the event",
          "description": "Short identifier for the event"
        },
        {
          "id": "event_data",
          "name": "Event Data",
          "type": "text",
          "value": "",
          "placeholder": "Additional data or notes",
          "description": "Optional additional information"
        },
        {
          "id": "severity",
          "name": "Severity",
          "type": "select",
          "value": "info",
          "options": ["debug", "info", "warning", "error", "critical"],
          "description": "Importance level of the event"
        },
        {
          "id": "category",
          "name": "Category",
          "type": "select",
          "value": "experiment",
          "options": [
            "experiment",
            "participant",
            "robot",
            "wizard",
            "technical",
            "protocol",
            "custom"
          ],
          "description": "Category for organizing events"
        }
      ],
      "execution": {
        "type": "event_logging",
        "blocking": false,
        "data_capture": true
      }
    },
    {
      "id": "survey_question",
      "name": "survey question",
      "description": "Present a survey question to the participant",
      "category": "sensor",
      "shape": "action",
      "icon": "HelpCircle",
      "color": "#16a34a",
      "nestable": false,
      "parameters": [
        {
          "id": "question",
          "name": "Question",
          "type": "text",
          "value": "",
          "placeholder": "Enter your question",
          "description": "The question to ask the participant"
        },
        {
          "id": "response_type",
          "name": "Response Type",
          "type": "select",
          "value": "likert_5",
          "options": [
            "likert_5",
            "likert_7",
            "yes_no",
            "multiple_choice",
            "text_input",
            "numeric",
            "slider"
          ],
          "description": "Type of response interface"
        },
        {
          "id": "options",
          "name": "Options",
          "type": "text",
          "value": "",
          "placeholder": "Option1,Option2,Option3",
          "description": "Comma-separated options for multiple choice"
        },
        {
          "id": "required",
          "name": "Required",
          "type": "boolean",
          "value": true,
          "description": "Whether a response is required to continue"
        }
      ],
      "execution": {
        "type": "survey_question",
        "blocking": true,
        "data_capture": true
      }
    },
    {
      "id": "physiological_measure",
      "name": "physiological measure",
      "description": "Capture physiological data from connected sensors",
      "category": "sensor",
      "shape": "action",
      "icon": "Activity",
      "color": "#16a34a",
      "nestable": false,
      "parameters": [
        {
          "id": "measure_type",
          "name": "Measure Type",
          "type": "select",
          "value": "heart_rate",
          "options": [
            "heart_rate",
            "skin_conductance",
            "eye_tracking",
            "eeg",
            "emg",
            "blood_pressure",
            "temperature",
            "custom"
          ],
          "description": "Type of physiological measurement"
        },
        {
          "id": "duration",
          "name": "Measurement Duration (s)",
          "type": "number",
          "value": 10,
          "min": 1,
          "max": 300,
          "step": 1,
          "description": "How long to collect data"
        },
        {
          "id": "sampling_rate",
          "name": "Sampling Rate (Hz)",
          "type": "number",
          "value": 100,
          "min": 1,
          "max": 1000,
          "step": 1,
          "description": "Data collection frequency"
        },
        {
          "id": "baseline",
          "name": "Baseline Measurement",
          "type": "boolean",
          "value": false,
          "description": "Mark this as a baseline measurement"
        }
      ],
      "execution": {
        "type": "physiological_data",
        "blocking": true,
        "data_capture": true
      }
    }
  ]
}
