fix(redact): catch Supabase sb_secret_ keys
Commit

Supabase secret API keys (sb_secret_) and personal access tokens (sbp_) passed through the built-in redaction unredacted into checkpoint objects.
Every always-on layer missed them when captured on their own:
- Entropy: the tokens are low-entropy (the reported repro value measured Shannon entropy 4.199), below the 4.5 always-on threshold.
- betterleaks: its Supabase secret-key rule is a composite rule (RequiredRules: supabase-project-url) that only fires when a matching "*.supabase.co" URL is co-present, plus an entropy filter, so a secret seen in isolation is never flagged.
- The value is not a credentialed URI or connection string, and its surrounding key name is not password-shaped, so those layers skip it.
Add a deterministic provider-prefix layer that redacts sb_secret_ and sbp_ tokens purely by prefix + length, independent of entropy or the surrounding variable name. Publishable keys (sb_publishable_) are designed to be embedded in client code and protected by row-level security, so they are intentionally not targeted (matching betterleaks, which ships no publishable-key rule).
Verified end-to-end: a sb_secret_ value planted across prompt text and shell tool I/O in a Claude Code transcript now redacts to REDACTED in the entire/checkpoints/v1 condensed blob (previously it survived verbatim).
Fixes #1716