@@ -102,6 +102,15 @@ function restoreTranscriptPromptText(
102102 return restoredMessage ;
103103}
104104
105+ function stripTranscriptPromptMarker ( message : AgentMessage ) : AgentMessage {
106+ if ( getTranscriptPromptText ( message ) === undefined ) {
107+ return message ;
108+ }
109+ const { [ TRANSCRIPT_PROMPT_TEXT_KEY ] : _transcriptPromptText , ...messageRest } =
110+ message as unknown as Record < string , unknown > ;
111+ return messageRest as unknown as AgentMessage ;
112+ }
113+
105114function projectTranscriptPromptMessages (
106115 messages : AgentMessage [ ] ,
107116 cache : WeakMap < AgentMessage , AgentMessage > ,
@@ -115,6 +124,16 @@ function projectTranscriptPromptMessages(
115124 return changed ? projected : messages ;
116125}
117126
127+ function stripTranscriptPromptMarkers ( messages : AgentMessage [ ] ) : AgentMessage [ ] {
128+ let changed = false ;
129+ const stripped = messages . map ( ( message ) => {
130+ const next = stripTranscriptPromptMarker ( message ) ;
131+ changed ||= next !== message ;
132+ return next ;
133+ } ) ;
134+ return changed ? stripped : messages ;
135+ }
136+
118137function truncateTextToBudget ( text : string , maxChars : number ) : string {
119138 if ( text . length <= maxChars ) {
120139 return text ;
@@ -329,6 +348,7 @@ export function installContextEngineLoopHook(params: {
329348 sourceMessages ,
330349 transcriptProjectionCache ,
331350 ) ;
351+ const providerMessages = stripTranscriptPromptMarkers ( sourceMessages ) ;
332352 const checkedPrefixLength =
333353 lastSeenLength == null ? 0 : Math . min ( lastSeenLength , transcriptMessages . length ) ;
334354 const sourceHistoryChanged =
@@ -359,7 +379,7 @@ export function installContextEngineLoopHook(params: {
359379 if ( ! hasNewMessages ) {
360380 lastSeenLength = prePromptMessageCount ;
361381 lastSourceMessages = transcriptMessages ;
362- return lastAssembledView ?? sourceMessages ;
382+ return lastAssembledView ?? providerMessages ;
363383 }
364384 try {
365385 if ( typeof contextEngine . afterTurn === "function" ) {
@@ -401,11 +421,15 @@ export function installContextEngineLoopHook(params: {
401421 const assembled = await contextEngine . assemble ( {
402422 sessionId,
403423 sessionKey,
404- messages : sourceMessages ,
424+ messages : providerMessages ,
405425 tokenBudget,
406426 model : modelId ,
407427 } ) ;
408- if ( assembled && Array . isArray ( assembled . messages ) && assembled . messages !== sourceMessages ) {
428+ if (
429+ assembled &&
430+ Array . isArray ( assembled . messages ) &&
431+ assembled . messages !== providerMessages
432+ ) {
409433 lastAssembledView = assembled . messages ;
410434 return assembled . messages ;
411435 }
@@ -418,7 +442,7 @@ export function installContextEngineLoopHook(params: {
418442 lastSourceMessages = transcriptMessages ;
419443 }
420444
421- return sourceMessages ;
445+ return providerMessages ;
422446 } ) as GuardableTransformContext ;
423447
424448 return ( ) => {
0 commit comments