Skip to content

Commit ca463a2

Browse files
committed
session diff only include modified files
1 parent 7265cdf commit ca463a2

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

packages/opencode/src/session/summary.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,16 @@ export namespace SessionSummary {
2929
)
3030

3131
async function summarizeSession(input: { sessionID: string; messages: MessageV2.WithParts[] }) {
32-
const diffs = await computeDiff({ messages: input.messages })
32+
const files = new Set(
33+
input.messages
34+
.flatMap((x) => x.parts)
35+
.filter((x) => x.type === "patch")
36+
.flatMap((x) => x.files),
37+
)
38+
console.log(files)
39+
const diffs = await computeDiff({ messages: input.messages }).then((x) =>
40+
x.filter((x) => files.has(x.file)),
41+
)
3342
await Session.update(input.sessionID, (draft) => {
3443
draft.summary = {
3544
diffs,
@@ -39,7 +48,9 @@ export namespace SessionSummary {
3948

4049
async function summarizeMessage(input: { messageID: string; messages: MessageV2.WithParts[] }) {
4150
const messages = input.messages.filter(
42-
(m) => m.info.id === input.messageID || (m.info.role === "assistant" && m.info.parentID === input.messageID),
51+
(m) =>
52+
m.info.id === input.messageID ||
53+
(m.info.role === "assistant" && m.info.parentID === input.messageID),
4354
)
4455
const msgWithParts = messages.find((m) => m.info.id === input.messageID)!
4556
const userMsg = msgWithParts.info as MessageV2.User
@@ -50,11 +61,14 @@ export namespace SessionSummary {
5061
}
5162
await Session.updateMessage(userMsg)
5263

53-
const assistantMsg = messages.find((m) => m.info.role === "assistant")!.info as MessageV2.Assistant
64+
const assistantMsg = messages.find((m) => m.info.role === "assistant")!
65+
.info as MessageV2.Assistant
5466
const small = await Provider.getSmallModel(assistantMsg.providerID)
5567
if (!small) return
5668

57-
const textPart = msgWithParts.parts.find((p) => p.type === "text" && !p.synthetic) as MessageV2.TextPart
69+
const textPart = msgWithParts.parts.find(
70+
(p) => p.type === "text" && !p.synthetic,
71+
) as MessageV2.TextPart
5872
if (textPart && !userMsg.summary?.title) {
5973
const result = await generateText({
6074
maxOutputTokens: small.info.reasoning ? 1500 : 20,
@@ -81,7 +95,8 @@ export namespace SessionSummary {
8195
if (
8296
messages.some(
8397
(m) =>
84-
m.info.role === "assistant" && m.parts.some((p) => p.type === "step-finish" && p.reason !== "tool-calls"),
98+
m.info.role === "assistant" &&
99+
m.parts.some((p) => p.type === "step-finish" && p.reason !== "tool-calls"),
85100
)
86101
) {
87102
const result = await generateText({
@@ -114,7 +129,9 @@ export namespace SessionSummary {
114129
let all = await Session.messages(input.sessionID)
115130
if (input.messageID)
116131
all = all.filter(
117-
(x) => x.info.id === input.messageID || (x.info.role === "assistant" && x.info.parentID === input.messageID),
132+
(x) =>
133+
x.info.id === input.messageID ||
134+
(x.info.role === "assistant" && x.info.parentID === input.messageID),
118135
)
119136

120137
return computeDiff({

0 commit comments

Comments
 (0)