From ad479e956d0019fbeb3ebfe148569813caad15a8 Mon Sep 17 00:00:00 2001 From: gonzaloriestra <14979109+gonzaloriestra@users.noreply.github.com> Date: Sat, 16 May 2026 00:47:53 +0000 Subject: [PATCH] [Performance] Optimize outputDebug to skip expensive work when disabled --- .jules/bolt.md | 3 +++ packages/cli-kit/src/public/node/output.ts | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 .jules/bolt.md diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 00000000000..ee26a18d5f0 --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2025-05-14 - Optimize outputDebug to skip expensive string construction +**Learning:** outputDebug always constructs a timestamped message even when debug logging is disabled. This involves calling `new Date().toISOString()` and string concatenation, which is wasteful in the hot path of logging. +**Action:** Add an early return in `outputDebug` using `shouldOutput('debug')` to skip work when not in verbose mode. diff --git a/packages/cli-kit/src/public/node/output.ts b/packages/cli-kit/src/public/node/output.ts index d1488702da1..73670baa22d 100644 --- a/packages/cli-kit/src/public/node/output.ts +++ b/packages/cli-kit/src/public/node/output.ts @@ -313,6 +313,8 @@ export function outputCompleted(content: OutputMessage, logger: Logger = console */ export function outputDebug(content: OutputMessage, logger: Logger = consoleWarn): void { if (isUnitTest()) collectLog('debug', content) + if (!shouldOutput('debug')) return + const message = colors.gray(stringifyMessage(content)) outputWhereAppropriate('debug', logger, `${new Date().toISOString()}: ${message}`) }