mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-09 09:03:58 +00:00
* fix(memory-core): guard qmd mcporter JSON.parse against non-JSON stdout runQmdSearchViaMcporter parsed mcporter subprocess stdout with JSON.parse outside the runMcporter try/catch (qmd-manager.ts:2722). A non-JSON stdout (daemon warning bleeding onto stdout, output truncated by maxOutputChars, CLI killed early, or flag mismatch) threw a raw SyntaxError that propagated uncaught out of runQmdSearchViaMcporter, surfacing in agent logs as a context-free SyntaxError with no hint of the actual mcporter failure. Wrap JSON.parse in try/catch and throw a typed Error carrying a stdout snippet (matching the guard pattern already used in parseListedCollections in this file, and the recent matrix #97973 / sms #97999 / signal #98073 / telegram-ingress #98372 JSON.parse guard series). Co-Authored-By: Claude <noreply@anthropic.com> * fix(memory-core): preserve cause in qmd mcporter JSON.parse guard Add { cause: err } to the re-thrown Error to satisfy the preserve-caught-error lint rule; the original SyntaxError is now chained, improving diagnosability. Co-Authored-By: Claude <noreply@anthropic.com> * fix(memory-core): redact raw stdout from qmd mcporter error (security-boundary) ClawSweeper flagged that the previous error message exposed raw mcporter stdout (first 200 chars) before session visibility filtering, which could leak sensitive content. Drop the stdout preview from the thrown message; keep the original SyntaxError as `cause` for diagnostics so the parse-failure reason is still reachable without surfacing unfiltered subprocess output. Co-Authored-By: Claude <noreply@anthropic.com> * fix(memory-core): keep qmd mcporter error message generic (no raw stdout leak) The SyntaxError thrown by JSON.parse embeds a snippet of the raw input in its message (e.g. Unexpected token '<', then the raw bytes). Including that SyntaxError message in the thrown Error would surface unfiltered mcporter stdout before session visibility filtering. Drop the parse-error message from the thrown Error; keep the original SyntaxError as cause for developer diagnostics only. Co-Authored-By: Claude <noreply@anthropic.com> * fix(memory-core): keep qmd mcporter cause generic (no raw stdout leak via formatErrorMessage) formatErrorMessage walks the .cause chain into the user-visible path. Keeping the JSON.parse SyntaxError on .cause leaked its embedded raw stdout snippet through formatErrorMessage even with a generic message. Give the cause a generic message too; the raw snippet no longer reaches the user. Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>