diff --git a/agent/redact.py b/agent/redact.py index c917ceb5b79..c109cef41d0 100644 --- a/agent/redact.py +++ b/agent/redact.py @@ -107,7 +107,9 @@ _PREFIX_PATTERNS = [ r"brv_[A-Za-z0-9]{10,}", # ByteRover API key r"xai-[A-Za-z0-9]{30,}", # xAI (Grok) API key r"ntn_[A-Za-z0-9]{10,}", # Notion internal integration token + r"fw-[A-Za-z0-9]{30,}", # Fireworks AI API key r"fw_[A-Za-z0-9]{30,}", # Fireworks AI API key + r"fpk_[A-Za-z0-9]{30,}", # Fireworks AI project key ] # ENV assignment patterns: KEY=value where KEY contains a secret-like name. diff --git a/tests/agent/test_redact.py b/tests/agent/test_redact.py index ed7e4255887..4361a891720 100644 --- a/tests/agent/test_redact.py +++ b/tests/agent/test_redact.py @@ -59,6 +59,22 @@ class TestKnownPrefixes: result = redact_sensitive_text("fal_abc123def456ghi789jkl") assert "abc123def456" not in result + def test_fireworks_keys(self): + samples = [ + "fw-" + "A" * 40, + "fw_" + "B" * 40, + "fpk_" + "C" * 40, + ] + + for token in samples: + result = redact_sensitive_text(f"provider error {token}") + assert token not in result + assert "..." in result + + def test_short_fireworks_like_words_unchanged(self): + text = "fw-tooshort fw_tooshort fpk_tooshort" + assert redact_sensitive_text(text) == text + def test_notion_internal_integration_token(self): result = redact_sensitive_text("ntn_abc123def456ghi789jkl") assert "abc123def456" not in result