diff options
| author | Dax Raad <[email protected]> | 2025-10-29 11:26:03 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-10-29 11:26:21 -0400 |
| commit | ca463a2346f520859921bb4495ade9a6d9798e62 (patch) | |
| tree | 6de1485097af9fd682495a201e910929d66e3d8b /packages | |
| parent | 7265cdf817196e60c85cf172e66147145d8dd43b (diff) | |
| download | opencode-ca463a2346f520859921bb4495ade9a6d9798e62.tar.gz opencode-ca463a2346f520859921bb4495ade9a6d9798e62.zip | |
session diff only include modified files
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/session/summary.ts | 29 |
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({ |
