@@ -22,7 +22,7 @@ import {
2222 consumeCompressionStart ,
2323 resolveCompressionDuration ,
2424} from "./compress/timing"
25- import { filterProcessableMessages } from "./messages/shape"
25+ import { filterMessages , filterMessagesInPlace } from "./messages/shape"
2626import {
2727 applyPendingManualTrigger ,
2828 handleContextCommand ,
@@ -104,49 +104,50 @@ export function createChatMessageTransformHandler(
104104 hostPermissions : HostPermissionSnapshot ,
105105) {
106106 return async ( input : { } , output : { messages : WithParts [ ] } ) => {
107- const messages = filterProcessableMessages ( output . messages )
108- if ( messages . length !== output . messages . length ) {
107+ const receivedMessages = Array . isArray ( output . messages ) ? output . messages . length : 0
108+ const messages = filterMessagesInPlace ( output . messages )
109+ if ( messages . length !== receivedMessages ) {
109110 logger . warn ( "Skipping messages with unexpected shape during chat transform" , {
110- received : output . messages . length ,
111+ received : receivedMessages ,
111112 usable : messages . length ,
112113 } )
113114 }
114115
115- await checkSession ( client , state , logger , messages , config . manualMode . enabled )
116+ await checkSession ( client , state , logger , output . messages , config . manualMode . enabled )
116117
117- syncCompressPermissionState ( state , config , hostPermissions , messages )
118+ syncCompressPermissionState ( state , config , hostPermissions , output . messages )
118119
119120 if ( state . isSubAgent && ! config . experimental . allowSubAgents ) {
120121 return
121122 }
122123
123124 stripHallucinations ( output . messages )
124- cacheSystemPromptTokens ( state , messages )
125- assignMessageRefs ( state , messages )
126- syncCompressionBlocks ( state , logger , messages )
127- syncToolCache ( state , config , logger , messages )
128- buildToolIdList ( state , messages )
129- prune ( state , logger , config , messages )
125+ cacheSystemPromptTokens ( state , output . messages )
126+ assignMessageRefs ( state , output . messages )
127+ syncCompressionBlocks ( state , logger , output . messages )
128+ syncToolCache ( state , config , logger , output . messages )
129+ buildToolIdList ( state , output . messages )
130+ prune ( state , logger , config , output . messages )
130131 await injectExtendedSubAgentResults (
131132 client ,
132133 state ,
133134 logger ,
134- messages ,
135+ output . messages ,
135136 config . experimental . allowSubAgents ,
136137 )
137- const compressionPriorities = buildPriorityMap ( config , state , messages )
138+ const compressionPriorities = buildPriorityMap ( config , state , output . messages )
138139 prompts . reload ( )
139140 injectCompressNudges (
140141 state ,
141142 config ,
142143 logger ,
143- messages ,
144+ output . messages ,
144145 prompts . getRuntimePrompts ( ) ,
145146 compressionPriorities ,
146147 )
147- injectMessageIds ( state , config , messages , compressionPriorities )
148- applyPendingManualTrigger ( state , messages , logger )
149- stripStaleMetadata ( messages )
148+ injectMessageIds ( state , config , output . messages , compressionPriorities )
149+ applyPendingManualTrigger ( state , output . messages , logger )
150+ stripStaleMetadata ( output . messages )
150151
151152 if ( state . sessionId ) {
152153 await logger . saveContext ( state . sessionId , output . messages )
@@ -174,7 +175,7 @@ export function createCommandExecuteHandler(
174175 const messagesResponse = await client . session . messages ( {
175176 path : { id : input . sessionID } ,
176177 } )
177- const messages = filterProcessableMessages ( messagesResponse . data || messagesResponse )
178+ const messages = filterMessages ( messagesResponse . data || messagesResponse )
178179
179180 await ensureSessionInitialized (
180181 client ,
0 commit comments