From abbde31eac6b670ad9bc7971083541eca26d8bad Mon Sep 17 00:00:00 2001 From: jellymellio Date: Thu, 18 Dec 2025 23:39:56 +0100 Subject: [PATCH] fix: diff events for sidebar updates and refresh messages on session compaction --- .../opencode/src/cli/cmd/tui/context/sync.tsx | 16 ++++++++++++++++ packages/opencode/src/session/revert.ts | 14 +++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index f74f787db..1f9f7107f 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -250,6 +250,22 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ setStore("vcs", { branch: event.properties.branch }) break } + + case "session.compacted": { + // Refresh messages after compaction to update sidebar context + sdk.client.session.messages({ sessionID: event.properties.sessionID, limit: 100 }).then((res) => { + if (!res.data) return + setStore( + produce((draft) => { + draft.message[event.properties.sessionID] = res.data!.map((x) => x.info) + for (const message of res.data!) { + draft.part[message.info.id] = message.parts + } + }), + ) + }) + break + } } }) diff --git a/packages/opencode/src/session/revert.ts b/packages/opencode/src/session/revert.ts index 35c7b9a60..8b652690d 100644 --- a/packages/opencode/src/session/revert.ts +++ b/packages/opencode/src/session/revert.ts @@ -57,9 +57,15 @@ export namespace SessionRevert { revert.snapshot = session.revert?.snapshot ?? (await Snapshot.track()) await Snapshot.revert(patches) if (revert.snapshot) revert.diff = await Snapshot.diff(revert.snapshot) - return Session.update(input.sessionID, (draft) => { + const result = await Session.update(input.sessionID, (draft) => { draft.revert = revert }) + // Emit session.diff event to update sidebar's Modified Files list + Bus.publish(Session.Event.Diff, { + sessionID: input.sessionID, + diff: [], + }) + return result } return session } @@ -73,6 +79,12 @@ export namespace SessionRevert { const next = await Session.update(input.sessionID, (draft) => { draft.revert = undefined }) + // Emit session.diff event to refresh sidebar's Modified Files list + const diff = await Session.diff(input.sessionID) + Bus.publish(Session.Event.Diff, { + sessionID: input.sessionID, + diff, + }) return next }