From e06084159f421310c9ccf36158fcad5fcf81cf8b Mon Sep 17 00:00:00 2001 From: Vijay Yadav Date: Sat, 28 Mar 2026 18:18:35 -0400 Subject: [PATCH] fix: re-trace system prompt on agent switch The `step === 1` guard only traced the first agent's system prompt because `step` increments continuously and is never reset on agent switches. Track the last-traced agent name so subsequent agents also get their system prompts logged. Fixes #291 Co-Authored-By: Vijay Yadav --- packages/opencode/src/session/prompt.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 50408668f..d08667cc3 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -325,6 +325,7 @@ export namespace SessionPrompt { let planHasWritten = false let planLastUserMsgId: string | undefined // altimate_change end + let tracedAgent = "" let emergencySessionEndFired = false // altimate_change start — quality signal, tool chain, error fingerprint tracking let lastToolCategory = "" @@ -855,11 +856,10 @@ export namespace SessionPrompt { system.push(STRUCTURED_OUTPUT_SYSTEM_PROMPT) } - // altimate_change start - trace system prompt once per loop() call. - // The system prompt is functionally identical across steps within a single - // loop() invocation (same agent, same environment). Agent switches re-enter - // loop() with step reset to 0, so each agent's prompt is traced separately. - if (step === 1) { + // altimate_change start - trace system prompt once per agent. + // The step counter is never reset on agent switches, so we track the + // last-traced agent to ensure each agent's system prompt is logged. + if (step === 1 || agent.name !== tracedAgent) { Tracer.active?.logSpan({ name: "system-prompt", startTime: Date.now(), @@ -867,6 +867,7 @@ export namespace SessionPrompt { input: { agent: agent.name, step }, output: { parts: system.length, content: system.join("\n\n") }, }) + tracedAgent = agent.name } // altimate_change end