From b9106ba5f9f7c95bc6766b615c510bfba19827f5 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 24 Jan 2026 03:12:19 +0000 Subject: [PATCH] fix: guard console settings recursion (#1555) (thanks @travisp) --- CHANGELOG.md | 2 +- README.md | 46 ++++++++++++++-------------- src/logging/console-settings.test.ts | 29 ++++++++++++++++-- 3 files changed, 50 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 132ae5f5eb..c7c7d69cd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ Docs: https://docs.clawd.bot - Tlon: add Urbit channel plugin (DMs, group mentions, thread replies). (#1544) Thanks @wca4a. ### Fixes -- Plugins: honor `plugins.slots.memory = "none"` when normalizing config. (#1554) Thanks @andreabadesso. +- Logging: guard console settings resolution to avoid recursion on config warnings. (#1555) Thanks @travisp. - Voice wake: auto-save wake words on blur/submit across iOS/Android and align limits with macOS. - UI: keep the Control UI sidebar visible while scrolling long pages. (#1515) Thanks @pookNast. - Tailscale: retry serve/funnel with sudo only for permission errors and keep original failure details. (#1551) Thanks @sweepies. diff --git a/README.md b/README.md index 842a18103f..b89831b80e 100644 --- a/README.md +++ b/README.md @@ -480,27 +480,27 @@ Thanks to all clawtributors: steipete bohdanpodvirnyi joaohlisboa mneves75 MatthieuBizien MaudeBot rahthakor vrknetha radek-paclt Tobias Bischoff joshp123 mukhtharcm maxsumrall xadenryan juanpablodlc hsrvc magimetal meaningfool patelhiren NicholasSpisak sebslight abhisekbasu1 zerone0x jamesgroat claude SocialNerd42069 Hyaxia dantelex daveonkels google-labs-jules[bot] - mteam88 Eng. Juan Combetto Mariano Belinky dbhurley TSavo julianengel benithors bradleypriest timolins nachx639 - pvoo sreekaransrinath gupsammy cristip73 stefangalescu nachoiacovino Vasanth Rao Naik Sabavat iHildy cpojer lc0rp - scald gumadeiras andranik-sahakyan davidguttman sleontenko rodrigouroz sircrumpet peschee rafaelreis-r thewilloftheshadow - ratulsarna lutr0 danielz1z emanuelst KristijanJovanovski CashWilliams rdev osolmaz joshrad-dev kiranjd - adityashaw2 sheeek artuskg onutc pauloportella tyler6204 neooriginal manuelhettich minghinmatthewlam myfunc - travisirby vignesh07 buddyh connorshea mcinteerj dependabot[bot] John-Rood timkrase gerardward2007 obviyus - tosh-hamburg azade-c roshanasingh4 bjesuiter cheeeee Josh Phillips Whoaa512 YuriNachos chriseidhof dlauer - robbyczgw-cla ysqander superman32432432 Yurii Chukhlib grp06 antons austinm911 blacksmith-sh[bot] damoahdominic dan-dr - HeimdallStrategy imfing jalehman jarvis-medmatic kkarimi mahmoudashraf93 ngutman petter-b pkrmf RandyVentures - Ryan Lisse dougvk erikpr1994 Ghost jonasjancarik Keith the Silly Goose L36 Server Marc mitschabaude-bot mkbehr - neist sibbl chrisrodz czekaj Friederike Seiler gabriel-trigo iamadig Jonathan D. Rhyne (DJ-D) Kit koala73 - manmal ogulcancelik pasogott petradonka rubyrunsstuff siddhantjain suminhthanh svkozak VACInc wes-davis - zats 24601 ameno- Chris Taylor Django Navarro evalexpr henrino3 humanwritten larlyssa odysseus0 - oswalpalash pcty-nextgen-service-account Syhids Aaron Konyer aaronveklabs adam91holt cash-echo-bot Clawd ClawdFx erik-agens - fcatuhe ivanrvpereira jeffersonwarrior jverdi longmaba mickahouan mjrussell p6l-richard philipp-spiess robaxelsen - Sash Catanzarite T5-AndyML VAC zknicker aj47 alejandro maza andrewting19 Andrii anpoirier Asleep123 - bolismauro conhecendoia Dimitrios Ploutarchos Drake Thomsen Felix Krause ganghyun kim gtsifrikas HazAT hrdwdmrbl hugobarauna - Jamie Openshaw Jarvis Jefferson Nunn kitze levifig Lloyd loukotal martinpucik Matt mini Miles - mrdbstn MSch Mustafa Tag Eldeen ndraiman nexty5870 odnxe prathamdby ptn1411 reeltimeapps RLTCmpe - Rolf Fredheim Rony Kelner Samrat Jha shiv19 siraht snopoke testingabc321 The Admiral thesash Ubuntu - voidserf Vultr-Clawd Admin william arzt Wimmie wstock yazinsai Zach Knickerbocker Alphonse-arianee Azade carlulsoe - ddyo Erik jayhickey jeffersonwarrior latitudeki5223 Manuel Maly Mourad Boustani odrobnik pcty-nextgen-ios-builder Quentin - Randy Torres rhjoh ronak-guliani William Stock + vignesh07 mteam88 Eng. Juan Combetto Mariano Belinky dbhurley TSavo julianengel JustYannicc benithors bradleypriest + timolins nachx639 pvoo sreekaransrinath gupsammy cristip73 stefangalescu nachoiacovino Vasanth Rao Naik Sabavat iHildy + cpojer lc0rp scald gumadeiras andranik-sahakyan davidguttman sleontenko rodrigouroz sircrumpet peschee + rafaelreis-r thewilloftheshadow ratulsarna lutr0 danielz1z emanuelst KristijanJovanovski CashWilliams rdev osolmaz + joshrad-dev kiranjd adityashaw2 sheeek artuskg onutc pauloportella tyler6204 neooriginal manuelhettich + minghinmatthewlam myfunc travisirby buddyh connorshea mcinteerj dependabot[bot] John-Rood timkrase gerardward2007 + obviyus tosh-hamburg azade-c roshanasingh4 bjesuiter cheeeee Josh Phillips pookNast Whoaa512 YuriNachos + chriseidhof dlauer robbyczgw-cla ysqander aj47 superman32432432 Yurii Chukhlib grp06 antons austinm911 + blacksmith-sh[bot] damoahdominic dan-dr HeimdallStrategy imfing jalehman jarvis-medmatic kkarimi mahmoudashraf93 ngutman + petter-b pkrmf RandyVentures Ryan Lisse dougvk erikpr1994 Ghost jonasjancarik Keith the Silly Goose L36 Server + Marc mitschabaude-bot mkbehr neist sibbl chrisrodz czekaj Friederike Seiler gabriel-trigo iamadig + Jonathan D. Rhyne (DJ-D) Kit koala73 manmal ogulcancelik pasogott petradonka rubyrunsstuff siddhantjain suminhthanh + svkozak VACInc wes-davis zats 24601 ameno- Chris Taylor Django Navarro evalexpr henrino3 + humanwritten larlyssa odysseus0 oswalpalash pcty-nextgen-service-account Syhids Aaron Konyer aaronveklabs adam91holt cash-echo-bot + Clawd ClawdFx erik-agens fcatuhe ivanrvpereira jayhickey jeffersonwarrior jeffersonwarrior jverdi longmaba + mickahouan mjrussell p6l-richard philipp-spiess robaxelsen Sash Catanzarite T5-AndyML VAC william arzt zknicker + alejandro maza andrewting19 Andrii anpoirier Asleep123 bolismauro conhecendoia Dimitrios Ploutarchos Drake Thomsen Evizero + fal3 Felix Krause ganghyun kim gtsifrikas HazAT hrdwdmrbl hugobarauna Jamie Openshaw Jarvis Jefferson Nunn + Kevin Lin kitze levifig Lloyd loukotal martinpucik Matt mini Miles mrdbstn MSch + Mustafa Tag Eldeen ndraiman nexty5870 odnxe prathamdby ptn1411 reeltimeapps RLTCmpe Rolf Fredheim Rony Kelner + Samrat Jha shiv19 siraht snopoke testingabc321 The Admiral thesash travisp Ubuntu voidserf + Vultr-Clawd Admin Wimmie wstock yazinsai Zach Knickerbocker Alphonse-arianee Azade carlulsoe ddyo Erik + latitudeki5223 Manuel Maly Mourad Boustani odrobnik pcty-nextgen-ios-builder Quentin Randy Torres rhjoh ronak-guliani William Stock

diff --git a/src/logging/console-settings.test.ts b/src/logging/console-settings.test.ts index 20956e685f..aed9f64b6d 100644 --- a/src/logging/console-settings.test.ts +++ b/src/logging/console-settings.test.ts @@ -18,8 +18,7 @@ vi.mock("./logger.js", () => ({ let loadConfigCalls = 0; vi.mock("node:module", async () => { const actual = await vi.importActual("node:module"); - return { - ...actual, + return Object.assign({}, actual, { createRequire: (url: string | URL) => { const realRequire = actual.createRequire(url); return (specifier: string) => { @@ -38,18 +37,42 @@ vi.mock("node:module", async () => { return realRequire(specifier); }; }, - }; + }); }); +type ConsoleSnapshot = { + log: typeof console.log; + info: typeof console.info; + warn: typeof console.warn; + error: typeof console.error; + debug: typeof console.debug; + trace: typeof console.trace; +}; + let originalIsTty: boolean | undefined; +let snapshot: ConsoleSnapshot; beforeEach(() => { loadConfigCalls = 0; vi.resetModules(); + snapshot = { + log: console.log, + info: console.info, + warn: console.warn, + error: console.error, + debug: console.debug, + trace: console.trace, + }; originalIsTty = process.stdout.isTTY; Object.defineProperty(process.stdout, "isTTY", { value: false, configurable: true }); }); afterEach(() => { + console.log = snapshot.log; + console.info = snapshot.info; + console.warn = snapshot.warn; + console.error = snapshot.error; + console.debug = snapshot.debug; + console.trace = snapshot.trace; Object.defineProperty(process.stdout, "isTTY", { value: originalIsTty, configurable: true }); vi.restoreAllMocks(); });