diff --git a/src/runtime/sanitize.ts b/src/runtime/sanitize.ts index 87e9e40..bc7431d 100644 --- a/src/runtime/sanitize.ts +++ b/src/runtime/sanitize.ts @@ -13,6 +13,17 @@ export interface SanitizeOptions { * 3. Discord bot token pattern → * 4. Anthropic API key pattern → */ +/** Returns both backslash and forward-slash variants of a path (for Windows). */ +function pathVariants(p: string): string[] { + const fwd = p.replace(/\\/g, "/"); + const bwd = p.replace(/\//g, "\\"); + return fwd === bwd ? [p] : [p, fwd, bwd]; +} + +function replaceAll(text: string, search: string, replacement: string): string { + return text.split(search).join(replacement); +} + export function sanitizeForDiscord( text: string, opts: SanitizeOptions = {} @@ -22,12 +33,16 @@ export function sanitizeForDiscord( // 1. Replace repo root before home so that sub-paths are caught by the // more specific substitution first (repoRoot is usually inside home). if (opts.repoRoot) { - result = result.split(opts.repoRoot).join(""); + for (const variant of pathVariants(opts.repoRoot)) { + result = replaceAll(result, variant, ""); + } } - // 2. Replace home directory with ~ + // 2. Replace home directory with ~ (both slash styles for Windows) if (opts.home) { - result = result.split(opts.home).join("~"); + for (const variant of pathVariants(opts.home)) { + result = replaceAll(result, variant, "~"); + } } // 3. Discord bot token — format: [MN]<23 base64url>.<6 base64url>.<27 base64url>