Skip to content

Structured Scanning

Nested payload and file content scanning.

structured

Structured payload scanning helpers.

StructuredScanner

Scan nested structured payloads (dict/list/scalar) at input boundary.

Source code in safeai/core/structured.py
class StructuredScanner:
    """Scan nested structured payloads (dict/list/scalar) at input boundary."""

    def __init__(self, classifier: Classifier, policy_engine: PolicyEngine, audit_logger: AuditLogger) -> None:
        self._classifier = classifier
        self._policy_engine = policy_engine
        self._audit = audit_logger

    def scan(self, payload: Any, *, agent_id: str = "unknown") -> StructuredScanResult:
        detections, path_map, nodes_scanned = _collect_detections(payload, self._classifier)
        tags = sorted({item.tag for item in detections})
        decision = self._policy_engine.evaluate(
            PolicyContext(boundary="input", data_tags=tags, agent_id=agent_id)
        )
        filtered = _apply_payload_action(payload, path_map, decision.action)
        self._audit.emit(
            AuditEvent(
                boundary="input",
                action=decision.action,
                policy_name=decision.policy_name,
                reason=decision.reason,
                data_tags=tags,
                agent_id=agent_id,
                metadata={
                    "phase": "structured_scan",
                    "nodes_scanned": nodes_scanned,
                    "detections": len(detections),
                },
            )
        )
        return StructuredScanResult(
            original=payload,
            filtered=filtered,
            detections=detections,
            decision=decision,
        )