summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-10-29 11:26:03 -0400
committerDax Raad <[email protected]>2025-10-29 11:26:21 -0400
commitca463a2346f520859921bb4495ade9a6d9798e62 (patch)
tree6de1485097af9fd682495a201e910929d66e3d8b
parent7265cdf817196e60c85cf172e66147145d8dd43b (diff)
downloadopencode-ca463a2346f520859921bb4495ade9a6d9798e62.tar.gz
opencode-ca463a2346f520859921bb4495ade9a6d9798e62.zip
session diff only include modified files
-rw-r--r--packages/opencode/src/session/summary.ts29
1 files changed, 23 insertions, 6 deletions
diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts
index 2a31f39ea..1b932ff00 100644
--- a/packages/opencode/src/session/summary.ts
+++ b/packages/opencode/src/session/summary.ts
@@ -29,7 +29,16 @@ export namespace SessionSummary {
)
async function summarizeSession(input: { sessionID: string; messages: MessageV2.WithParts[] }) {
- const diffs = await computeDiff({ messages: input.messages })
+ const files = new Set(
+ input.messages
+ .flatMap((x) => x.parts)
+ .filter((x) => x.type === "patch")
+ .flatMap((x) => x.files),
+ )
+ console.log(files)
+ const diffs = await computeDiff({ messages: input.messages }).then((x) =>
+ x.filter((x) => files.has(x.file)),
+ )
await Session.update(input.sessionID, (draft) => {
draft.summary = {
diffs,
@@ -39,7 +48,9 @@ export namespace SessionSummary {
async function summarizeMessage(input: { messageID: string; messages: MessageV2.WithParts[] }) {
const messages = input.messages.filter(
- (m) => m.info.id === input.messageID || (m.info.role === "assistant" && m.info.parentID === input.messageID),
+ (m) =>
+ m.info.id === input.messageID ||
+ (m.info.role === "assistant" && m.info.parentID === input.messageID),
)
const msgWithParts = messages.find((m) => m.info.id === input.messageID)!
const userMsg = msgWithParts.info as MessageV2.User
@@ -50,11 +61,14 @@ export namespace SessionSummary {
}
await Session.updateMessage(userMsg)
- const assistantMsg = messages.find((m) => m.info.role === "assistant")!.info as MessageV2.Assistant
+ const assistantMsg = messages.find((m) => m.info.role === "assistant")!
+ .info as MessageV2.Assistant
const small = await Provider.getSmallModel(assistantMsg.providerID)
if (!small) return
- const textPart = msgWithParts.parts.find((p) => p.type === "text" && !p.synthetic) as MessageV2.TextPart
+ const textPart = msgWithParts.parts.find(
+ (p) => p.type === "text" && !p.synthetic,
+ ) as MessageV2.TextPart
if (textPart && !userMsg.summary?.title) {
const result = await generateText({
maxOutputTokens: small.info.reasoning ? 1500 : 20,
@@ -81,7 +95,8 @@ export namespace SessionSummary {
if (
messages.some(
(m) =>
- m.info.role === "assistant" && m.parts.some((p) => p.type === "step-finish" && p.reason !== "tool-calls"),
+ m.info.role === "assistant" &&
+ m.parts.some((p) => p.type === "step-finish" && p.reason !== "tool-calls"),
)
) {
const result = await generateText({
@@ -114,7 +129,9 @@ export namespace SessionSummary {
let all = await Session.messages(input.sessionID)
if (input.messageID)
all = all.filter(
- (x) => x.info.id === input.messageID || (x.info.role === "assistant" && x.info.parentID === input.messageID),
+ (x) =>
+ x.info.id === input.messageID ||
+ (x.info.role === "assistant" && x.info.parentID === input.messageID),
)
return computeDiff({