b7f5f6439e
- dlp_detectors._closest_pair: replace the O(n*m) cross product with an O(n log n) sort + O(n) two-pointer merge, and early-out once a pair falls within the proximity threshold. The inputs are attacker-controlled response-body matches past the body-size cap, so the quadratic form was a latent DoS. Extract _match_gap to share the span-gap calc with the caller. - dlp_detectors._compute_encoded_variants: back the memo with a bounded functools.lru_cache instead of an unbounded module dict, so a long-lived proxy seeing rotating secrets evicts rather than growing without limit. - supervise_server: extract the duplicated routes.yaml inputSchema into _proposal_input_schema()/_ROUTES_YAML_DESCRIPTION so the egress-allow and egress-block tools can't drift. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NkwFXLFff9PYPy4wgVBJp9