Skip to content

Commit 76cf136

Browse files
committed
fix: preserve original first message context during conversation condensing
- Modified getMessagesSinceLastSummary to preserve the original first user message when extracting messages after a summary - This ensures the initial task context is never lost, even after context condensing - Updated tests to verify the original first message is correctly preserved - Fixes issue where task context was being replaced with generic 'Please continue' message
1 parent 08d7f80 commit 76cf136

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

src/core/condense/__tests__/index.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ describe("getMessagesSinceLastSummary", () => {
3636
expect(result).toEqual(messages)
3737
})
3838

39-
it("should return messages since the last summary with prepended user message", () => {
39+
it("should return messages since the last summary with original first user message", () => {
4040
const messages: ApiMessage[] = [
4141
{ role: "user", content: "Hello", ts: 1 },
4242
{ role: "assistant", content: "Hi there", ts: 2 },
@@ -47,14 +47,14 @@ describe("getMessagesSinceLastSummary", () => {
4747

4848
const result = getMessagesSinceLastSummary(messages)
4949
expect(result).toEqual([
50-
{ role: "user", content: "Please continue from the following summary:", ts: 0 },
50+
{ role: "user", content: "Hello", ts: 1 },
5151
{ role: "assistant", content: "Summary of conversation", ts: 3, isSummary: true },
5252
{ role: "user", content: "How are you?", ts: 4 },
5353
{ role: "assistant", content: "I'm good", ts: 5 },
5454
])
5555
})
5656

57-
it("should handle multiple summary messages and return since the last one with prepended user message", () => {
57+
it("should handle multiple summary messages and return since the last one with original first user message", () => {
5858
const messages: ApiMessage[] = [
5959
{ role: "user", content: "Hello", ts: 1 },
6060
{ role: "assistant", content: "First summary", ts: 2, isSummary: true },
@@ -65,7 +65,7 @@ describe("getMessagesSinceLastSummary", () => {
6565

6666
const result = getMessagesSinceLastSummary(messages)
6767
expect(result).toEqual([
68-
{ role: "user", content: "Please continue from the following summary:", ts: 0 },
68+
{ role: "user", content: "Hello", ts: 1 },
6969
{ role: "assistant", content: "Second summary", ts: 4, isSummary: true },
7070
{ role: "user", content: "What's new?", ts: 5 },
7171
])

src/core/condense/index.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,24 @@ export function getMessagesSinceLastSummary(messages: ApiMessage[]): ApiMessage[
223223
const messagesSinceSummary = messages.slice(lastSummaryIndex)
224224

225225
// Bedrock requires the first message to be a user message.
226+
// We preserve the original first message to maintain context.
226227
// See https://github.com/RooCodeInc/Roo-Code/issues/4147
227-
const userMessage: ApiMessage = {
228-
role: "user",
229-
content: "Please continue from the following summary:",
230-
ts: messages[0]?.ts ? messages[0].ts - 1 : Date.now(),
228+
if (messagesSinceSummary.length > 0 && messagesSinceSummary[0].role !== "user") {
229+
// Get the original first message (should always be a user message with the task)
230+
const originalFirstMessage = messages[0]
231+
if (originalFirstMessage && originalFirstMessage.role === "user") {
232+
// Use the original first message unchanged to maintain full context
233+
return [originalFirstMessage, ...messagesSinceSummary]
234+
} else {
235+
// Fallback to generic message if no original first message exists (shouldn't happen)
236+
const userMessage: ApiMessage = {
237+
role: "user",
238+
content: "Please continue from the following summary:",
239+
ts: messages[0]?.ts ? messages[0].ts - 1 : Date.now(),
240+
}
241+
return [userMessage, ...messagesSinceSummary]
242+
}
231243
}
232-
return [userMessage, ...messagesSinceSummary]
244+
245+
return messagesSinceSummary
233246
}

0 commit comments

Comments
 (0)