Skills › Scientific Agent Skills › autoskill › redact.py
redact.py
40 lines · skills/autoskill/scripts/redact.py at 5f2bc03
1import re
3# Order matters: multi-line and prefixed patterns run before narrower ones.
4_PATTERNS = [
5 (re.compile(r"-----BEGIN [A-Z ]+PRIVATE KEY-----[\s\S]*?-----END [A-Z ]+PRIVATE KEY-----"),
6 "[REDACTED:private_key]"),
8 # Known-env-var secret assignments: NAME=value (catches long values only)
9 (re.compile(
10 r"\b(?:AWS_SECRET_ACCESS_KEY|AWS_ACCESS_KEY_ID|GITHUB_TOKEN|HF_TOKEN"
11 r"|ANTHROPIC_API_KEY|OPENAI_API_KEY|FOUNDRY_API_KEY|SCREENPIPE_TOKEN|LM_API_TOKEN"
12 r"|GOOGLE_API_KEY|SLACK_TOKEN|DEEPGRAM_API_KEY)"
13 r"\s*=\s*[^\s\"']+"
14 ), "[REDACTED:kv_secret]"),
16 (re.compile(r"Bearer\s+[A-Za-z0-9_\-\.=]+"), "[REDACTED:bearer]"),
18 (re.compile(r"\beyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+"),
19 "[REDACTED:jwt]"),
21 (re.compile(r"\bxox[bpars]-[A-Za-z0-9\-]{10,}"), "[REDACTED:api_key]"),
22 (re.compile(r"\bhf_[A-Za-z0-9]{32,}"), "[REDACTED:api_key]"),
23 (re.compile(r"\bsk-[A-Za-z0-9_\-]{20,}"), "[REDACTED:api_key]"),
24 (re.compile(r"\b(?:sk|pk|rk)_live_[A-Za-z0-9]{24,}"), "[REDACTED:api_key]"),
25 (re.compile(r"\bghp_[A-Za-z0-9]{36}\b"), "[REDACTED:api_key]"),
26 (re.compile(r"\bAKIA[0-9A-Z]{16}\b"), "[REDACTED:api_key]"),
27 (re.compile(r"\bAIza[A-Za-z0-9_\-]{35}\b"), "[REDACTED:api_key]"),
29 (re.compile(r"[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}"),
30 "[REDACTED:email]"),
32 (re.compile(r"\(\d{3}\)\s*\d{3}-\d{4}"), "[REDACTED:phone]"),
33 (re.compile(r"\b\d{3}-\d{2}-\d{4}\b"), "[REDACTED:ssn]"),
34]
37def redact(text: str) -> str:
38 for pattern, placeholder in _PATTERNS:
39 text = pattern.sub(placeholder, text)
40 return text