@@ -10,7 +10,7 @@ import { summarizeConversation, getMessagesSinceLastSummary, N_MESSAGES_TO_KEEP
1010
1111// Create a mock ApiHandler for testing
1212class MockApiHandler extends BaseProvider {
13- createMessage ( ) : any {
13+ createMessage ( systemPrompt : string , messages : Anthropic . Messages . MessageParam [ ] , metadata ?: any ) : any {
1414 // Mock implementation for testing - returns an async iterable stream
1515 const mockStream = {
1616 async * [ Symbol . asyncIterator ] ( ) {
@@ -204,6 +204,48 @@ describe("Condense", () => {
204204 expect ( result . messages ) . toEqual ( messages )
205205 expect ( result . cost ) . toBeGreaterThan ( 0 )
206206 } )
207+
208+ it ( "should include the first message in the summarization content" , async ( ) => {
209+ // Create a mock handler that captures what messages are sent for summarization
210+ let capturedMessages : any [ ] = [ ]
211+ class CapturingMockApiHandler extends MockApiHandler {
212+ override createMessage (
213+ systemPrompt : string ,
214+ messages : Anthropic . Messages . MessageParam [ ] ,
215+ metadata ?: any ,
216+ ) : any {
217+ // Capture the messages sent for summarization (excluding the final request message)
218+ capturedMessages = messages . slice ( 0 , - 1 )
219+ return super . createMessage ( systemPrompt , messages , metadata )
220+ }
221+ }
222+
223+ const capturingHandler = new CapturingMockApiHandler ( )
224+ const messages : ApiMessage [ ] = [
225+ { role : "user" , content : "Initial task: Create a TODO app" } ,
226+ { role : "assistant" , content : "I'll help you create a TODO app" } ,
227+ { role : "user" , content : "Add user authentication" } ,
228+ { role : "assistant" , content : "Adding authentication" } ,
229+ { role : "user" , content : "Add database support" } ,
230+ { role : "assistant" , content : "Setting up database" } ,
231+ { role : "user" , content : "Add API endpoints" } ,
232+ { role : "assistant" , content : "Creating API endpoints" } ,
233+ { role : "user" , content : "Deploy it" } ,
234+ ]
235+
236+ await summarizeConversation ( messages , capturingHandler , "System prompt" , taskId , 5000 , false )
237+
238+ // Verify that the first message was included in what gets summarized
239+ expect ( capturedMessages . length ) . toBeGreaterThan ( 0 )
240+ expect ( capturedMessages [ 0 ] ) . toEqual ( {
241+ role : "user" ,
242+ content : "Initial task: Create a TODO app" ,
243+ } )
244+
245+ // Verify all messages except the last N_MESSAGES_TO_KEEP were included
246+ const expectedMessagesToSummarize = messages . slice ( 0 , - N_MESSAGES_TO_KEEP )
247+ expect ( capturedMessages ) . toEqual ( expectedMessagesToSummarize )
248+ } )
207249 } )
208250
209251 describe ( "getMessagesSinceLastSummary" , ( ) => {
0 commit comments