(input: { sessionID: string; messages: MessageV2.WithParts[] })
| 34 | ) |
| 35 | |
| 36 | async function summarizeSession(input: { sessionID: string; messages: MessageV2.WithParts[] }) { |
| 37 | const files = new Set( |
| 38 | input.messages |
| 39 | .flatMap((x) => x.parts) |
| 40 | .filter((x) => x.type === "patch") |
| 41 | .flatMap((x) => x.files) |
| 42 | .map((x) => path.relative(Instance.worktree, x)), |
| 43 | ) |
| 44 | const diffs = await computeDiff({ messages: input.messages }).then((x) => |
| 45 | x.filter((x) => { |
| 46 | return files.has(x.file) |
| 47 | }), |
| 48 | ) |
| 49 | await Session.update(input.sessionID, (draft) => { |
| 50 | draft.summary = { |
| 51 | additions: diffs.reduce((sum, x) => sum + x.additions, 0), |
| 52 | deletions: diffs.reduce((sum, x) => sum + x.deletions, 0), |
| 53 | files: diffs.length, |
| 54 | } |
| 55 | }) |
| 56 | await Storage.write(["session_diff", input.sessionID], diffs) |
| 57 | Bus.publish(Session.Event.Diff, { |
| 58 | sessionID: input.sessionID, |
| 59 | diff: diffs, |
| 60 | }) |
| 61 | } |
| 62 | |
| 63 | async function summarizeMessage(input: { messageID: string; messages: MessageV2.WithParts[] }) { |
| 64 | const cfg = await Config.get() |
no test coverage detected