diff --git a/src/discord/monitor/agent-components.ts b/src/discord/monitor/agent-components.ts index 22f4fc90562..0f5a871f64e 100644 --- a/src/discord/monitor/agent-components.ts +++ b/src/discord/monitor/agent-components.ts @@ -423,9 +423,26 @@ function parseAgentComponentData(data: ComponentData): { : (data as Record).componentId) ?? (data as Record).componentId; + const decodeSafe = (value: string): string => { + // `cid` values may be raw (not URI-encoded). Guard against malformed % sequences. + // Only attempt decoding when it looks like it contains percent-encoding. + if (!value.includes("%")) { + return value; + } + // If it has a % but not a valid %XX sequence, skip decode. + if (!/%[0-9A-Fa-f]{2}/.test(value)) { + return value; + } + try { + return decodeURIComponent(value); + } catch { + return value; + } + }; + const componentId = typeof raw === "string" - ? decodeURIComponent(raw) + ? decodeSafe(raw) : typeof raw === "number" ? String(raw) : null;