Repository navigation
Releases
Releases · jkt-check/dsh-secret-scrub
v0.1.2 — Kaya-parity scrubbing
Kaya-parity release: user input is now scrubbed aggressively by default, and the tier-0 net catches the generic key shapes that previously slipped through (a pasted CN phone number, a lowercase deepseek_api_key=sk_… assignment).
Added
inputLevelconfig (defaultaggressive): admitted user messages atagent/pre-stepare scrubbed at this depth regardless oflevel, so pasted PII and credentials are redacted with the full rule table even when tool output stays atbalanced.levelnow governs tool output only.- Tier-0 rules:
api-key(genericapikeyassignments —=,:, and JSON quoted forms, claimed inside longer names likedeepseek_api_key=…),rollbar-token,slack-signing-secret,slack-webhook-url,age-secret-key,docker-pat,notion-token,supabase-token,linear-api-key,private-key-truncated(unclosed/orphaned PEM armor),generic-sk-key(sk-/sk_fallback after every provider-specific rule). - Tier-1 rule:
key-assignment— theNAME=valuesecret shape in any letter case (the lowercase/mixed-case formsenv-var-secretcannot see), with a value filter that spares code shapes (token = 5,token=computeToken(), dotted identifier chains likepassword=req.body.password, PEM-armored public keys).
Fixed
api-keyvalue class now includes.:api_key=<jwt>is redacted whole. Previously the match stopped after the JWT header segment, which also hid the intact token fromgeneric-bearer— leaking payload and signature.key-assignment's identifier-chain rejection is bounded to segments of at most 20 characters, so dotted credentials with a long random tail (Doppler'sdp.pt.…family) stay redacted while code traversals pass through.- Plugin-level regression tests for both motivating complaint scenarios (CN phone number, lowercase
deepseek_api_key) plus the full 3-level × 2-arm gating matrix. 130 tests, all green.
Install / upgrade
dsh plugin --profile <name> add dsh-secret-scrubVerified end-to-end inside DeepSeek Harness (desktop profile): a pasted CN phone number arrives at the model as [REDACTED:phone-cn], and a lowercase deepseek_api_key=sk_… assignment as deepseek_[REDACTED:api-key].
Full Changelog: https://github.com/jkt-check/dsh-secret-scrub/blob/v0.1.2/CHANGELOG.md