From 3872f324197046de057e676a192ee1e7c7bba657 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 3 Jan 2026 20:57:32 +0000 Subject: [PATCH] fix(logging): quiet embedded run console logs --- CHANGELOG.md | 1 + src/agents/pi-embedded-runner.ts | 16 +++++++++------- src/agents/pi-embedded-subscribe.ts | 15 ++++++++------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac19573fe..2e08f554e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ - Control UI: generate UUIDs when `crypto.randomUUID()` is unavailable over HTTP — thanks @ratulsarna. - Control UI: stream live tool output cards in Chat (agent events include sessionKey). - Agent: add soft block-stream chunking (800–1200 chars default) with paragraph/newline preference. +- Agent: route embedded run lifecycle logs through subsystem console formatting and reduce log noise. - Agent tools: scope the Discord tool to Discord surface runs. - Agent tools: format verbose tool summaries without brackets, with unique emojis and `tool: detail` style. - Agent tools: emit verbose tool summaries at tool start (no debounce). diff --git a/src/agents/pi-embedded-runner.ts b/src/agents/pi-embedded-runner.ts index 8cfb6aed6..acbec455f 100644 --- a/src/agents/pi-embedded-runner.ts +++ b/src/agents/pi-embedded-runner.ts @@ -31,7 +31,7 @@ import { type enqueueCommand, enqueueCommandInLane, } from "../process/command-queue.js"; -import { defaultRuntime } from "../runtime.js"; +import { createSubsystemLogger } from "../logging.js"; import { CONFIG_DIR, resolveUserPath } from "../utils.js"; import { resolveClawdisAgentDir } from "./agent-paths.js"; import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "./defaults.js"; @@ -94,6 +94,8 @@ type EmbeddedPiQueueHandle = { abort: () => void; }; +const log = createSubsystemLogger("agent/embedded"); + const ACTIVE_EMBEDDED_RUNS = new Map(); const OAUTH_FILENAME = "oauth.json"; @@ -383,7 +385,7 @@ export async function runEmbeddedPiAgent(params: { const thinkingLevel = mapThinkingLevel(params.thinkLevel); - defaultRuntime.log?.( + log.debug( `embedded run start: runId=${params.runId} sessionId=${params.sessionId} provider=${provider} model=${modelId} surface=${params.surface ?? "unknown"}`, ); @@ -515,14 +517,14 @@ export async function runEmbeddedPiAgent(params: { let abortWarnTimer: NodeJS.Timeout | undefined; const abortTimer = setTimeout( () => { - defaultRuntime.log( + log.warn( `embedded run timeout: runId=${params.runId} sessionId=${params.sessionId} timeoutMs=${params.timeoutMs}`, ); abortRun(); if (!abortWarnTimer) { abortWarnTimer = setTimeout(() => { if (!session.isStreaming) return; - defaultRuntime.log( + log.warn( `embedded run abort still streaming: runId=${params.runId} sessionId=${params.sessionId}`, ); }, 10_000); @@ -548,7 +550,7 @@ export async function runEmbeddedPiAgent(params: { let promptError: unknown = null; try { const promptStartedAt = Date.now(); - defaultRuntime.log?.( + log.debug( `embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`, ); try { @@ -556,7 +558,7 @@ export async function runEmbeddedPiAgent(params: { } catch (err) { promptError = err; } finally { - defaultRuntime.log?.( + log.debug( `embedded run prompt end: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - promptStartedAt}`, ); } @@ -645,7 +647,7 @@ export async function runEmbeddedPiAgent(params: { p.text || p.mediaUrl || (p.mediaUrls && p.mediaUrls.length > 0), ); - defaultRuntime.log?.( + log.debug( `embedded run done: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - started} aborted=${aborted}`, ); return { diff --git a/src/agents/pi-embedded-subscribe.ts b/src/agents/pi-embedded-subscribe.ts index b23378668..6dea5fee5 100644 --- a/src/agents/pi-embedded-subscribe.ts +++ b/src/agents/pi-embedded-subscribe.ts @@ -4,8 +4,8 @@ import type { AgentSession } from "@mariozechner/pi-coding-agent"; import { formatToolAggregate } from "../auto-reply/tool-meta.js"; import { emitAgentEvent } from "../infra/agent-events.js"; +import { createSubsystemLogger } from "../logging.js"; import { splitMediaFromOutput } from "../media/parse.js"; -import { defaultRuntime } from "../runtime.js"; import { extractAssistantText, inferToolMetaFromArgs, @@ -15,6 +15,7 @@ const THINKING_TAG_RE = /<\s*\/?\s*think(?:ing)?\s*>/gi; const THINKING_OPEN_RE = /<\s*think(?:ing)?\s*>/i; const THINKING_CLOSE_RE = /<\s*\/\s*think(?:ing)?\s*>/i; const TOOL_RESULT_MAX_CHARS = 8000; +const log = createSubsystemLogger("agent/embedded"); export type BlockReplyChunking = { minChars: number; @@ -324,7 +325,7 @@ export function subscribeEmbeddedPiSession(params: { const args = (evt as AgentEvent & { args: unknown }).args; const meta = inferToolMetaFromArgs(toolName, args); toolMetaById.set(toolCallId, meta); - defaultRuntime.log?.( + log.debug( `embedded run tool start: runId=${params.runId} tool=${toolName} toolCallId=${toolCallId}`, ); @@ -590,19 +591,19 @@ export function subscribeEmbeddedPiSession(params: { const toolCallId = String( (evt as AgentEvent & { toolCallId: string }).toolCallId, ); - defaultRuntime.log?.( + log.debug( `embedded run tool end: runId=${params.runId} tool=${toolName} toolCallId=${toolCallId}`, ); } if (evt.type === "agent_start") { - defaultRuntime.log?.(`embedded run agent start: runId=${params.runId}`); + log.debug(`embedded run agent start: runId=${params.runId}`); } if (evt.type === "auto_compaction_start") { compactionInFlight = true; ensureCompactionPromise(); - defaultRuntime.log?.( + log.debug( `embedded run compaction start: runId=${params.runId}`, ); } @@ -613,7 +614,7 @@ export function subscribeEmbeddedPiSession(params: { if (willRetry) { noteCompactionRetry(); resetForCompactionRetry(); - defaultRuntime.log?.( + log.debug( `embedded run compaction retry: runId=${params.runId}`, ); } else { @@ -622,7 +623,7 @@ export function subscribeEmbeddedPiSession(params: { } if (evt.type === "agent_end") { - defaultRuntime.log?.(`embedded run agent end: runId=${params.runId}`); + log.debug(`embedded run agent end: runId=${params.runId}`); if (pendingCompactionRetry > 0) { resolveCompactionRetry(); } else {