From 49bf1fadb6a5e6a33c39883921a1d472d3e5be77 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 25 Nov 2025 06:14:12 +0100 Subject: [PATCH] debug: log MEDIA extraction and parse Claude text for tokens --- src/auto-reply/reply.ts | 22 +++++++++++++++++++++- src/media/parse.ts | 3 ++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/auto-reply/reply.ts b/src/auto-reply/reply.ts index ab4ce1e35..a5f109a09 100644 --- a/src/auto-reply/reply.ts +++ b/src/auto-reply/reply.ts @@ -289,8 +289,17 @@ const mediaNote = }, ); const rawStdout = stdout.trim(); - const { text: trimmedText, mediaUrl: mediaFromCommand } = + let mediaFromCommand: string | undefined; + const { text: trimmedText, mediaUrl: mediaDirect } = splitMediaFromOutput(rawStdout); + mediaFromCommand = mediaDirect; + if (isVerbose()) { + logVerbose( + mediaFromCommand + ? `MEDIA token extracted from stdout: ${mediaFromCommand}` + : "No MEDIA token extracted from stdout", + ); + } let trimmed = trimmedText; if (stderr?.trim()) { logVerbose(`Command auto-reply stderr: ${stderr.trim()}`); @@ -310,6 +319,17 @@ const mediaNote = `Claude JSON parsed -> ${parsed.text.slice(0, 120)}${parsed.text.length > 120 ? "…" : ""}`, ); trimmed = parsed.text.trim(); + if (!mediaFromCommand) { + const { mediaUrl: mediaFromParsed } = splitMediaFromOutput( + parsed.text, + ); + if (mediaFromParsed) { + mediaFromCommand = mediaFromParsed; + logVerbose( + `MEDIA token extracted after JSON parse: ${mediaFromParsed}`, + ); + } + } } else { logVerbose("Claude JSON parse failed; returning raw stdout"); } diff --git a/src/media/parse.ts b/src/media/parse.ts index f9be623fa..ab30b37f2 100644 --- a/src/media/parse.ts +++ b/src/media/parse.ts @@ -17,8 +17,9 @@ export function splitMediaFromOutput(raw: string): { let text = trimmedRaw; let mediaUrl: string | undefined; + const globalMatch = trimmedRaw.match(MEDIA_TOKEN_RE); let mediaLine = trimmedRaw.split("\n").find((line) => MEDIA_LINE_RE.test(line)); - let mediaMatch = mediaLine?.match(MEDIA_TOKEN_RE) ?? trimmedRaw.match(MEDIA_TOKEN_RE); + let mediaMatch = mediaLine?.match(MEDIA_TOKEN_RE) ?? globalMatch; if (!mediaMatch) { return { text: trimmedRaw }; }