SYMBOL INDEX (84 symbols across 13 files) FILE: automation/atomic_handler.py function get_all_technique_ids (line 12) | def get_all_technique_ids(atomics_path: str | None = None) -> list[str]: class AtomicParser (line 31) | class AtomicParser: method __init__ (line 37) | def __init__(self, atomics_path: str | None = None): method get_tests_for_technique (line 41) | def get_tests_for_technique( function find_atomic_for_technique (line 69) | def find_atomic_for_technique(technique_id, atomics_path): function prepare_command (line 105) | def prepare_command(atomic_test): FILE: automation/config.py function _as_bool (line 26) | def _as_bool(val: str | None, default: bool = False) -> bool: FILE: automation/dependency_handler.py function check_and_update_dependencies (line 16) | def check_and_update_dependencies(base_path): function _download_file (line 62) | def _download_file(url: str, dest_path: Path) -> bool: function stage_atomic_dependencies_locally (line 73) | def stage_atomic_dependencies_locally(atomic_test: dict, technique_dir: ... FILE: automation/dynamic_generator.py function _apply_cim_mapping (line 55) | def _apply_cim_mapping(spl: str) -> str: function _normalize_sigma_spl_for_splunk (line 65) | def _normalize_sigma_spl_for_splunk(query: str) -> str: function _cim_search_only (line 96) | def _cim_search_only(query: str) -> str: class RuleMapper (line 101) | class RuleMapper: method __init__ (line 102) | def __init__(self): method _sanitize_escu_spl (line 107) | def _sanitize_escu_spl(search: str) -> str: method _sigma_file_to_spl (line 120) | def _sigma_file_to_spl(filepath: str) -> str | None: method collect_for_technique (line 136) | def collect_for_technique(self, technique_id: str) -> tuple[list, list]: class AttackEngine (line 201) | class AttackEngine: method run_attack (line 203) | def run_attack(technique_id: str, test_number: int = 1) -> tuple[bool,... class VerificationEngine (line 224) | class VerificationEngine: method __init__ (line 225) | def __init__(self, service): method run (line 228) | def run( class ReportGenerator (line 279) | class ReportGenerator: method build_entry (line 281) | def build_entry( class DynamicDetectionLab (line 300) | class DynamicDetectionLab: method __init__ (line 301) | def __init__(self, technique_ids: list[str] | None = None): method service (line 309) | def service(self): method run (line 314) | def run(self) -> list: function run_dynamic_generator (line 430) | def run_dynamic_generator(technique_ids: list[str] | None = None) -> list: FILE: automation/escu_handler.py function _normalize_status (line 7) | def _normalize_status(raw: str | None) -> str: function load_and_parse_rules (line 24) | def load_and_parse_rules(path: str): FILE: automation/execution_handler.py class PowerShellExecutor (line 11) | class PowerShellExecutor: method __init__ (line 12) | def __init__(self): method connect (line 20) | def connect(self): method disconnect (line 40) | def disconnect(self): method execute (line 48) | def execute(self, command): function run_invoke_atomic_test (line 86) | def run_invoke_atomic_test(technique_id="T1059.001", test_number=1): function run_simple_encoded_command (line 113) | def run_simple_encoded_command(): function run_first_attack_simulation (line 131) | def run_first_attack_simulation(): function run_first_attack_workflow (line 138) | def run_first_attack_workflow(): function _create_ssh_client (line 164) | def _create_ssh_client(): function _upload_file_sftp (line 179) | def _upload_file_sftp(client, local_path, remote_path): function _build_arg_value_map (line 191) | def _build_arg_value_map(atomic_test: dict, safe_dir: str) -> dict: function _apply_rewrites_to_command (line 216) | def _apply_rewrites_to_command(cmd_text: str, arg_map: dict, safe_dir: s... function _normalize_command_for_executor (line 230) | def _normalize_command_for_executor(command_text: str, executor_name: st... function _exec_on_vm (line 243) | def _exec_on_vm(client, command_text: str, executor_name: str): function run_test_on_vm (line 291) | def run_test_on_vm(atomic_test, test_technique_path): FILE: automation/main.py function banner (line 22) | def banner(): function setup_logging (line 30) | def setup_logging(verbose: bool = False): function main (line 47) | def main(): FILE: automation/repo_manager.py class RepoManager (line 15) | class RepoManager: method __init__ (line 16) | def __init__(self, base_path: str | None = None): method _run_git (line 19) | def _run_git(self, cmd: list[str], cwd: str | None = None) -> tuple[bo... method _clone (line 35) | def _clone(self, name: str, url: str) -> bool: method _pull (line 45) | def _pull(self, name: str) -> bool: method ensure_repos (line 55) | def ensure_repos(self) -> bool: FILE: automation/report_handler.py class ReportHandler (line 10) | class ReportHandler: method generate_cors_headers (line 13) | def generate_cors_headers(self) -> None: method generate_mitre_layers (line 27) | def generate_mitre_layers(self) -> list[str]: method _log_rule_details (line 151) | def _log_rule_details(self, entry: dict, rule_list: list, rule_type: s... method _build_ultra_lite (line 167) | def _build_ultra_lite(self, merged: list) -> list: method _merge_rule_lists (line 199) | def _merge_rule_lists(self, existing_rules: list, new_rules: list) -> ... method save_report_json (line 213) | def save_report_json(self, new_results: list) -> str: method print_coverage_stats (line 316) | def print_coverage_stats(self, data: list) -> None: function generate_json_output (line 338) | def generate_json_output(new_results, output_path): function generate_csv_summary (line 406) | def generate_csv_summary(results, output_path): FILE: automation/sigma_handler.py function parse_sigma_rule (line 9) | def parse_sigma_rule(file_path, rules_base_path): function load_and_parse_rules (line 45) | def load_and_parse_rules(path): FILE: automation/splunk_handler.py function connect_to_splunk (line 11) | def connect_to_splunk(): function convert_sigma_to_spl (line 45) | def convert_sigma_to_spl(sigma_filepath: str) -> str | None: function _iso_to_epoch_seconds (line 74) | def _iso_to_epoch_seconds(iso_str: str) -> int: function _with_index_prefix (line 91) | def _with_index_prefix(query: str) -> str: function check_for_detection (line 117) | def check_for_detection(service, search_query: str, earliest_time: str, ... function sanity_check_ingestion (line 157) | def sanity_check_ingestion(service, host: str, earliest_time: str, lates... FILE: automation/utils.py function load_yaml_file (line 4) | def load_yaml_file(filepath): FILE: automation/vm_handler.py function _get_proxmox_ssh_client (line 12) | def _get_proxmox_ssh_client(): function _run_proxmox_command (line 61) | def _run_proxmox_command(args, check=True): function get_vm_state (line 100) | def get_vm_state(): function ensure_vm_is_off (line 112) | def ensure_vm_is_off(timeout_seconds=60): function revert_to_snapshot (line 141) | def revert_to_snapshot(): function start_vm (line 164) | def start_vm(): function stop_vm (line 178) | def stop_vm(): function is_vm_ready (line 184) | def is_vm_ready(timeout_seconds=300):