From 89b8cbcb1ab686f2bcc7310892891c424f33e6e0 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 84b319f8e1..9cd28a28f5 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -320,6 +320,7 @@ export namespace SessionPrompt { let compactionCount = 0 let sessionAgentName = "" let sessionHadError = false + let tracedAgent = "" let emergencySessionEndFired = false const emergencySessionEnd = () => { if (emergencySessionEndFired) return @@ -728,11 +729,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(), @@ -740,6 +740,7 @@ export namespace SessionPrompt { input: { agent: agent.name, step }, output: { parts: system.length, content: system.join("\n\n") }, }) + tracedAgent = agent.name } // altimate_change end