summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/components/chat
diff options
context:
space:
mode:
authoradamdotdevin <[email protected]>2025-07-29 13:11:38 -0500
committeradamdotdevin <[email protected]>2025-07-29 13:11:38 -0500
commita129e122aad1e3eef34ead4b5970c6be4fb2004a (patch)
tree29f17f193a03a0612739ffe1d9c9525f04942249 /packages/tui/internal/components/chat
parentc0ee6a6d05983d7d24adedbf0ab67dd562ccfb81 (diff)
downloadopencode-a129e122aad1e3eef34ead4b5970c6be4fb2004a.tar.gz
opencode-a129e122aad1e3eef34ead4b5970c6be4fb2004a.zip
feat: show git diff in reverted messages
Diffstat (limited to 'packages/tui/internal/components/chat')
-rw-r--r--packages/tui/internal/components/chat/messages.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go
index fa0ec5e54..23de97ed2 100644
--- a/packages/tui/internal/components/chat/messages.go
+++ b/packages/tui/internal/components/chat/messages.go
@@ -5,6 +5,8 @@ import (
"fmt"
"log/slog"
"slices"
+ "sort"
+ "strconv"
"strings"
tea "github.com/charmbracelet/bubbletea/v2"
@@ -14,6 +16,7 @@ import (
"github.com/sst/opencode/internal/app"
"github.com/sst/opencode/internal/commands"
"github.com/sst/opencode/internal/components/dialog"
+ "github.com/sst/opencode/internal/components/diff"
"github.com/sst/opencode/internal/components/toast"
"github.com/sst/opencode/internal/layout"
"github.com/sst/opencode/internal/styles"
@@ -569,6 +572,36 @@ func (m *messagesComponent) renderView() tea.Cmd {
hint += revertedStyle.Render(" (or /redo) to restore")
content += "\n" + hint
+ if m.app.Session.Revert.Diff != "" {
+ t := theme.CurrentTheme()
+ s := styles.NewStyle().Background(t.BackgroundPanel())
+ green := s.Foreground(t.Success()).Render
+ red := s.Foreground(t.Error()).Render
+ content += "\n"
+ stats, err := diff.ParseStats(m.app.Session.Revert.Diff)
+ if err != nil {
+ slog.Error("Failed to parse diff stats", "error", err)
+ } else {
+ var files []string
+ for file := range stats {
+ files = append(files, file)
+ }
+ sort.Strings(files)
+
+ for _, file := range files {
+ fileStats := stats[file]
+ display := file
+ if fileStats.Added > 0 {
+ display += green(" +" + strconv.Itoa(int(fileStats.Added)))
+ }
+ if fileStats.Removed > 0 {
+ display += red(" -" + strconv.Itoa(int(fileStats.Removed)))
+ }
+ content += "\n" + display
+ }
+ }
+ }
+
content = styles.NewStyle().
Background(t.BackgroundPanel()).
Width(width - 6).