0697e7f688
- Separated deterministic replacement generation, placeholder derivation, placeholder-range scanning and message-tree transforms out of the 2647-line module; obfuscator.ts now holds the types and SecretObfuscator. - ephemeralPlaceholderKey stays a single instance and both global regexes stay beside the code that resets their lastIndex, so placeholder stability and the security argument in the moved comments are preserved verbatim. - Repointed every importer at the real modules rather than leaving a re-export shim; the public ./secrets barrel exports the same 15 names as before.