# Subsystem: integrations

## modules/integrations/__init__.py
- Doc: LazyOwn integrations — bridges to external platforms and tools.
- Layer: utility
- Language: py
- Depends on: `modules/integrations/misp_export.py`, `modules/integrations/nuclei_bridge.py`, `modules/integrations/searchsploit.py`

## modules/integrations/misp_export.py
- Doc: modules/integrations/misp_export.py
- Layer: utility
- Language: py
- Symbols:
  - `MISPAttribute` (class, line 59) `class MISPAttribute`
  - `MISPEvent` (class, line 70) `class MISPEvent`
  - `FindingMapper` (class, line 86) `class FindingMapper(ABC)`
  - `IPMapper` (class, line 103) `class IPMapper(FindingMapper)`
  - `CredentialMapper` (class, line 123) `class CredentialMapper(FindingMapper)`
  - `CVEMapper` (class, line 143) `class CVEMapper(FindingMapper)`
  - `DomainMapper` (class, line 163) `class DomainMapper(FindingMapper)`
  - `HashMapper` (class, line 183) `class HashMapper(FindingMapper)`
  - `ServiceMapper` (class, line 218) `class ServiceMapper(FindingMapper)`
  - `MISPExporter` (class, line 254) `class MISPExporter`
  - `_DictFinding` (class, line 451) `class _DictFinding`
  - `get_exporter` (function, line 469) `def get_exporter()`
  - `_main` (function, line 482) `def _main()`
  - `map` (method, line 90) `def map(self, finding)`
  - `map` (method, line 106) `def map(self, finding)`
  - `_is_ip` (method, line 118) `def _is_ip(finding)`
  - `map` (method, line 126) `def map(self, finding)`
  - `_is_credential` (method, line 138) `def _is_credential(finding)`
  - `map` (method, line 146) `def map(self, finding)`
  - `_is_cve` (method, line 158) `def _is_cve(finding)`
  - `map` (method, line 166) `def map(self, finding)`
  - `_is_domain` (method, line 178) `def _is_domain(finding)`
  - `map` (method, line 192) `def map(self, finding)`
  - `_is_hash` (method, line 206) `def _is_hash(finding)`
  - `_detect_type` (method, line 211) `def _detect_type(value)`
  - `map` (method, line 221) `def map(self, finding)`
  - `_is_service` (method, line 233) `def _is_service(finding)`
  - `__init__` (method, line 263) `def __init__(self, mappers)`
  - `export_session` (method, line 268) `def export_session(self, sessions_dir, target)`
  - `to_json` (method, line 299) `def to_json(self, event)`
  - `save` (method, line 322) `def save(self, event, path)`
  - `push_to_misp` (method, line 330) `def push_to_misp(self, event, url, api_key)`
  - `_load_findings` (method, line 365) `def _load_findings(self, sdir)`
  - `_load_policy_facts` (method, line 372) `def _load_policy_facts(self, sdir)`
  - `_load_events` (method, line 383) `def _load_events(self, sdir)`
  - `_dict_to_findings` (method, line 403) `def _dict_to_findings(data)`
  - `_map_finding` (method, line 443) `def _map_finding(self, finding)`
  - `__init__` (method, line 454) `def __init__(self, data)`
- Depends on: `core/logging.py`
- Imported by: `modules/integrations/__init__.py`, `skills/lazyown_mcp.py`, `tests/test_core_modules.py`

## modules/integrations/nuclei_bridge.py
- Doc: modules/integrations/nuclei_bridge.py
- Layer: utility
- Language: py
- Symbols:
  - `NucleiTemplate` (class, line 71) `class NucleiTemplate`
  - `TemplateSelector` (class, line 87) `class TemplateSelector(ABC)`
  - `LocalTemplateIndex` (class, line 104) `class LocalTemplateIndex(TemplateSelector)`
  - `NucleiRunner` (class, line 279) `class NucleiRunner`
  - `NucleiBridge` (class, line 389) `class NucleiBridge`
  - `get_bridge` (function, line 443) `def get_bridge()`
  - `_main` (function, line 456) `def _main()`
  - `select` (method, line 91) `def select(self, services, cves)`
  - `__init__` (method, line 114) `def __init__(self, templates_dir)`
  - `select` (method, line 121) `def select(self, services, cves)`
  - `build` (method, line 141) `def build(self)`
  - `_ensure_built` (method, line 158) `def _ensure_built(self)`
  - `_parse_template` (method, line 162) `def _parse_template(self, path)`
  - `_parse_yaml` (method, line 172) `def _parse_yaml(self, text, path)`
  - `_parse_regex` (method, line 201) `def _parse_regex(self, text, path)`
  - `_normalise_tags` (method, line 238) `def _normalise_tags(raw)`
  - `_extract_cve_from_tags` (method, line 246) `def _extract_cve_from_tags(tags)`
  - `_extract_cve_from_text` (method, line 253) `def _extract_cve_from_text(text)`
  - `_matches` (method, line 258) `def _matches(tmpl, service_lower, cve_upper)`
  - `__init__` (method, line 288) `def __init__(self)`
  - `run` (method, line 293) `def run(self, target, templates, output_dir)`
  - `run_for_findings` (method, line 326) `def run_for_findings(self, target, findings, output_dir, selector)`
  - `_build_command` (method, line 343) `def _build_command(self, target, templates, output_dir)`
  - `_extract_context` (method, line 370) `def _extract_context(findings)`
  - `__init__` (method, line 396) `def __init__(self, selector, runner)`
  - `scan` (method, line 404) `def scan(self, target, findings, dry_run)`
  - `list_templates` (method, line 427) `def list_templates(self, services, cves)`
  - `_F` (class, line 483) `class _F`
  - `__init__` (method, line 484) `def __init__(self, ftype, value)`
- Depends on: `core/logging.py`
- Imported by: `modules/integrations/__init__.py`, `modules/integrations/nuclei_parser.py`, `modules/intelligence_engine.py`

## modules/integrations/nuclei_parser.py
- Doc: Nuclei JSON output parser — feeds scan results into DB, WorldModel, and recommender.
- Layer: utility
- Language: py
- Symbols:
  - `NucleiFinding` (class, line 71) `class NucleiFinding`
  - `NucleiParser` (class, line 99) `class NucleiParser`
  - `mitre_tactic` (method, line 87) `def mitre_tactic(self)`
  - `exploit_probability` (method, line 95) `def exploit_probability(self)`
  - `__init__` (method, line 109) `def __init__(self, sessions_dir)`
  - `parse_text` (method, line 115) `def parse_text(self, text)`
  - `parse_json` (method, line 134) `def parse_json(self, json_text)`
  - `parse_file` (method, line 177) `def parse_file(self, filepath)`
  - `import_to_db` (method, line 196) `def import_to_db(self, findings, rhost, workspace_name)`
  - `enrich_world_model` (method, line 262) `def enrich_world_model(self, findings, rhost)`
  - `generate_recommendations` (method, line 300) `def generate_recommendations(self, findings, rhost)`
  - `scan_and_import` (method, line 328) `def scan_and_import(self, target, templates, services, cves, workspace_name)`
  - `_parse_line` (method, line 393) `def _parse_line(self, line)`
  - `_parse_json_obj` (method, line 412) `def _parse_json_obj(self, obj)`
  - `_recommend_for_finding` (method, line 468) `def _recommend_for_finding(self, finding, rhost)`
  - `_finding_to_dict` (method, line 504) `def _finding_to_dict(finding)`
  - `_summarize` (method, line 517) `def _summarize(findings)`
- Depends on: `core/logging.py`, `modules/db.py`, `modules/integrations/nuclei_bridge.py`, `modules/world_model.py`
- Imported by: `modules/intelligence_engine.py`, `tests/test_nuclei_parser.py`

## modules/integrations/searchsploit.py
- Doc: modules/integrations/searchsploit.py
- Layer: utility
- Language: py
- Symbols:
  - `ExploitEntry` (class, line 60) `class ExploitEntry`
  - `ExploitSource` (class, line 76) `class ExploitSource(ABC)`
  - `SearchsploitCLI` (class, line 93) `class SearchsploitCLI(ExploitSource)`
  - `ExploitDBAPI` (class, line 193) `class ExploitDBAPI(ExploitSource)`
  - `SearchsploitClient` (class, line 271) `class SearchsploitClient`
  - `get_client` (function, line 333) `def get_client()`
  - `search_cve` (function, line 341) `def search_cve(cve_id)`
  - `search_service` (function, line 346) `def search_service(name, version)`
  - `_main` (function, line 356) `def _main()`
  - `search_cve` (method, line 80) `def search_cve(self, cve_id)`
  - `search_service` (method, line 84) `def search_service(self, name, version)`
  - `__init__` (method, line 102) `def __init__(self)`
  - `search_cve` (method, line 109) `def search_cve(self, cve_id)`
  - `search_service` (method, line 112) `def search_service(self, name, version)`
  - `_run` (method, line 118) `def _run(self, query)`
  - `_parse` (method, line 133) `def _parse(self, raw)`
  - `_row_to_entry` (method, line 162) `def _row_to_entry(self, row)`
  - `_extract_cve` (method, line 183) `def _extract_cve(text)`
  - `__init__` (method, line 201) `def __init__(self)`
  - `search_cve` (method, line 207) `def search_cve(self, cve_id)`
  - `search_service` (method, line 210) `def search_service(self, name, version)`
  - `_query` (method, line 218) `def _query(self, cve_id)`
  - `_rate_limit` (method, line 258) `def _rate_limit()`
  - `__init__` (method, line 278) `def __init__(self, primary, fallback)`
  - `search_cve` (method, line 286) `def search_cve(self, cve_id)`
  - `search_service` (method, line 293) `def search_service(self, name, version)`
  - `enrich_findings` (method, line 300) `def enrich_findings(self, findings)`
- Depends on: `core/logging.py`
- Imported by: `modules/integrations/__init__.py`, `tests/test_core_modules.py`
