"""Task definitions for LogSentinel v2.""" from models import DifficultyLevel, ScenarioConfig, TaskDefinition TASKS: dict = { # ------------------------------------------------------------------ # Legacy tasks (backward-compatible) # ------------------------------------------------------------------ "log_classification": TaskDefinition( name="log_classification", description=( "Classify 10 log entries by severity and type from a single source. " "Each log should be classified as: normal, warning, error, critical, or security. " "Submit a final report when done." ), difficulty="easy", max_steps=15, num_logs=10, num_sources=1, num_incidents=0, ), "incident_detection": TaskDefinition( name="incident_detection", description=( "Analyze 20 log entries from 3 different sources. Classify each log, " "detect 2 incidents by correlating related logs across sources, " "and assign correct severity (P1-P4) to each incident. " "Submit a structured incident report when done." ), difficulty="medium", max_steps=25, num_logs=20, num_sources=3, num_incidents=2, ), "full_triage": TaskDefinition( name="full_triage", description=( "Full incident triage with 30+ log entries from 5 sources including noise. " "Classify all logs, detect 3 incidents (one is a subtle security issue), " "correlate logs across sources, assign severity, recommend remediation " "for each incident, and submit a comprehensive incident report. " "Includes red herrings and ambiguous logs." ), difficulty="hard", max_steps=35, num_logs=34, num_sources=5, num_incidents=3, ), # ------------------------------------------------------------------ # Phase-2 Multi-Agent SOC War-Room tasks # ------------------------------------------------------------------ "soc_warroom_easy": TaskDefinition( name="soc_warroom_easy", description=( "Multi-agent SOC scenario: detect and triage 1 incident across 4 roles " "(incident_commander, app_sre, db_sre, security_analyst). " "Each role sees only role-relevant logs. Use handoffs and shared board to collaborate. " "Episode phases: detect → triage → mitigate → verify → final_report." ), difficulty="easy", max_steps=30, num_logs=20, num_sources=4, num_incidents=1, multi_agent=True, scenario_config=ScenarioConfig( num_incidents=1, difficulty=DifficultyLevel.EASY, attack_subtlety=0.2, observability_quality=0.95, confounding_noise_ratio=0.25, seed=100, ), ), "soc_warroom_medium": TaskDefinition( name="soc_warroom_medium", description=( "Multi-agent SOC scenario: detect and triage 2 overlapping incidents. " "Partial observability, telemetry delays, and confounding noise. " "Roles must negotiate severity and share evidence via handoffs." ), difficulty="medium", max_steps=45, num_logs=35, num_sources=5, num_incidents=2, multi_agent=True, scenario_config=ScenarioConfig( num_incidents=2, difficulty=DifficultyLevel.MEDIUM, attack_subtlety=0.5, observability_quality=0.85, confounding_noise_ratio=0.35, seed=200, ), ), "soc_warroom_hard": TaskDefinition( name="soc_warroom_hard", description=( "Multi-agent SOC scenario: 3 simultaneous incidents including a subtle APT. " "High noise, low observability quality, telemetry delays. " "Requires careful evidence collection, cross-role handoffs, and coordinated mitigation." ), difficulty="hard", max_steps=60, num_logs=50, num_sources=5, num_incidents=3, multi_agent=True, scenario_config=ScenarioConfig( num_incidents=3, difficulty=DifficultyLevel.HARD, attack_subtlety=0.8, observability_quality=0.70, confounding_noise_ratio=0.50, seed=300, ), ), "adaptive_curriculum": TaskDefinition( name="adaptive_curriculum", description=( "Adaptive difficulty task that auto-adjusts based on rolling success rate. " "Starts at easy, promotes to medium/hard when avg success > 70%, " "demotes when avg success < 35%." ), difficulty="adaptive", max_steps=45, num_logs=35, num_sources=5, num_incidents=2, multi_agent=True, scenario_config=ScenarioConfig( num_incidents=2, difficulty=DifficultyLevel.EASY, seed=None, # randomised per episode ), ), } TASK_LIST = list(TASKS.keys())