Skip to content
This repository was archived by the owner on Sep 18, 2025. It is now read-only.

Commit af838d1

Browse files
committed
move to v2
1 parent 05b0570 commit af838d1

48 files changed

Lines changed: 1591 additions & 2526 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmd/root.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import (
77
"sync"
88
"time"
99

10-
tea "github.com/charmbracelet/bubbletea"
11-
zone "github.com/lrstanley/bubblezone"
10+
tea "github.com/charmbracelet/bubbletea/v2"
1211
"github.com/opencode-ai/opencode/internal/app"
1312
"github.com/opencode-ai/opencode/internal/config"
1413
"github.com/opencode-ai/opencode/internal/db"
@@ -114,9 +113,7 @@ to assist developers in writing, debugging, and understanding code directly from
114113
return app.RunNonInteractive(ctx, prompt, outputFormat, quiet)
115114
}
116115

117-
// Interactive mode
118116
// Set up the TUI
119-
zone.NewGlobal()
120117
program := tea.NewProgram(
121118
tui.New(app),
122119
tea.WithAltScreen(),

go.mod

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@ require (
1111
github.com/aymanbagabas/go-udiff v0.2.0
1212
github.com/bmatcuk/doublestar/v4 v4.8.1
1313
github.com/catppuccin/go v0.3.0
14-
github.com/charmbracelet/bubbles v0.21.0
15-
github.com/charmbracelet/bubbletea v1.3.5
16-
github.com/charmbracelet/glamour v0.9.1
17-
github.com/charmbracelet/lipgloss v1.1.0
18-
github.com/charmbracelet/x/ansi v0.8.0
14+
github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1
15+
github.com/charmbracelet/bubbletea/v2 v2.0.0-beta1
16+
github.com/charmbracelet/glamour/v2 v2.0.0-20250513163904-eeeced3bb3c6
17+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250513162854-28902d027c40
18+
github.com/charmbracelet/x/ansi v0.9.2
1919
github.com/fsnotify/fsnotify v1.8.0
2020
github.com/go-logfmt/logfmt v0.6.0
2121
github.com/google/uuid v1.6.0
22-
github.com/lrstanley/bubblezone v0.0.0-20250315020633-c249a3fe1231
2322
github.com/mark3labs/mcp-go v0.17.0
2423
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6
2524
github.com/muesli/reflow v0.3.0
@@ -58,13 +57,15 @@ require (
5857
github.com/aws/smithy-go v1.20.3 // indirect
5958
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
6059
github.com/aymerick/douceur v0.2.0 // indirect
61-
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
62-
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
60+
github.com/charmbracelet/colorprofile v0.3.0 // indirect
61+
github.com/charmbracelet/x/cellbuf v0.0.14-0.20250326144200-0875329e71da // indirect
62+
github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf // indirect
63+
github.com/charmbracelet/x/input v0.3.4 // indirect
6364
github.com/charmbracelet/x/term v0.2.1 // indirect
65+
github.com/charmbracelet/x/windows v0.2.0 // indirect
6466
github.com/davecgh/go-spew v1.1.1 // indirect
6567
github.com/disintegration/imaging v1.6.2
6668
github.com/dlclark/regexp2 v1.11.4 // indirect
67-
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
6869
github.com/felixge/httpsnoop v1.0.4 // indirect
6970
github.com/go-logr/logr v1.4.2 // indirect
7071
github.com/go-logr/stdr v1.2.2 // indirect
@@ -81,7 +82,6 @@ require (
8182
github.com/lithammer/fuzzysearch v1.1.8
8283
github.com/lucasb-eyer/go-colorful v1.2.0
8384
github.com/mattn/go-isatty v0.0.20 // indirect
84-
github.com/mattn/go-localereader v0.0.1 // indirect
8585
github.com/mattn/go-runewidth v0.0.16 // indirect
8686
github.com/mfridman/interpolate v0.0.2 // indirect
8787
github.com/microcosm-cc/bluemonday v1.0.27 // indirect
@@ -119,7 +119,6 @@ require (
119119
golang.org/x/net v0.39.0 // indirect
120120
golang.org/x/sync v0.13.0 // indirect
121121
golang.org/x/sys v0.32.0 // indirect
122-
golang.org/x/term v0.31.0 // indirect
123122
golang.org/x/text v0.24.0 // indirect
124123
google.golang.org/genai v1.3.0
125124
google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect

go.sum

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -68,24 +68,30 @@ github.com/bmatcuk/doublestar/v4 v4.8.1 h1:54Bopc5c2cAvhLRAzqOGCYHYyhcDHsFF4wWIR
6868
github.com/bmatcuk/doublestar/v4 v4.8.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
6969
github.com/catppuccin/go v0.3.0 h1:d+0/YicIq+hSTo5oPuRi5kOpqkVA5tAsU6dNhvRu+aY=
7070
github.com/catppuccin/go v0.3.0/go.mod h1:8IHJuMGaUUjQM82qBrGNBv7LFq6JI3NnQCF6MOlZjpc=
71-
github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs=
72-
github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg=
73-
github.com/charmbracelet/bubbletea v1.3.5 h1:JAMNLTbqMOhSwoELIr0qyP4VidFq72/6E9j7HHmRKQc=
74-
github.com/charmbracelet/bubbletea v1.3.5/go.mod h1:TkCnmH+aBd4LrXhXcqrKiYwRs7qyQx5rBgH5fVY3v54=
75-
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
76-
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
77-
github.com/charmbracelet/glamour v0.9.1 h1:11dEfiGP8q1BEqvGoIjivuc2rBk+5qEXdPtaQ2WoiCM=
78-
github.com/charmbracelet/glamour v0.9.1/go.mod h1:+SHvIS8qnwhgTpVMiXwn7OfGomSqff1cHBCI8jLOetk=
79-
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
80-
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
81-
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
82-
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
83-
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
84-
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
85-
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ=
86-
github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
71+
github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1 h1:swACzss0FjnyPz1enfX56GKkLiuKg5FlyVmOLIlU2kE=
72+
github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1/go.mod h1:6HamsBKWqEC/FVHuQMHgQL+knPyvHH55HwJDHl/adMw=
73+
github.com/charmbracelet/bubbletea/v2 v2.0.0-beta1 h1:yaxFt97mvofGY7bYZn8U/aSVoamXGE3O4AEvWhshUDI=
74+
github.com/charmbracelet/bubbletea/v2 v2.0.0-beta1/go.mod h1:qbcZLI5z8R49v9xBdU5V5Dh5D2uccx8wSwBqxQyErqc=
75+
github.com/charmbracelet/colorprofile v0.3.0 h1:KtLh9uuu1RCt+Hml4s6Hz+kB1PfV3wi++1h5ia65yKQ=
76+
github.com/charmbracelet/colorprofile v0.3.0/go.mod h1:oHJ340RS2nmG1zRGPmhJKJ/jf4FPNNk0P39/wBPA1G0=
77+
github.com/charmbracelet/glamour/v2 v2.0.0-20250513163904-eeeced3bb3c6 h1:AKhOV8dSRU3KpqMgpGME9JU7ouumB2S6hMmD6PRJeTc=
78+
github.com/charmbracelet/glamour/v2 v2.0.0-20250513163904-eeeced3bb3c6/go.mod h1:7xBAUTCSADx9mHG0uBf4NDoVpYxMzIQ2j/NMLGdFsFM=
79+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250513162854-28902d027c40 h1:SxOUomYAVo5zh+6WCH1bGshlAnSKP0ZeovI0FHAl9kg=
80+
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250513162854-28902d027c40/go.mod h1:tRlx/Hu0lo/j9viunCN2H+Ze6JrmdjQlXUQvvArgaOc=
81+
github.com/charmbracelet/x/ansi v0.9.2 h1:92AGsQmNTRMzuzHEYfCdjQeUzTrgE1vfO5/7fEVoXdY=
82+
github.com/charmbracelet/x/ansi v0.9.2/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE=
83+
github.com/charmbracelet/x/cellbuf v0.0.14-0.20250326144200-0875329e71da h1:8MGKD5WBtuzfXglq0CnyzVSwGojv57X+H46OL9OUyRA=
84+
github.com/charmbracelet/x/cellbuf v0.0.14-0.20250326144200-0875329e71da/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
85+
github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw=
86+
github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
87+
github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf h1:rLG0Yb6MQSDKdB52aGX55JT1oi0P0Kuaj7wi1bLUpnI=
88+
github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf/go.mod h1:B3UgsnsBZS/eX42BlaNiJkD1pPOUa+oF1IYC6Yd2CEU=
89+
github.com/charmbracelet/x/input v0.3.4 h1:Mujmnv/4DaitU0p+kIsrlfZl/UlmeLKw1wAP3e1fMN0=
90+
github.com/charmbracelet/x/input v0.3.4/go.mod h1:JI8RcvdZWQIhn09VzeK3hdp4lTz7+yhiEdpEQtZN+2c=
8791
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
8892
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
93+
github.com/charmbracelet/x/windows v0.2.0 h1:ilXA1GJjTNkgOm94CLPeSz7rar54jtFatdmoiONPuEw=
94+
github.com/charmbracelet/x/windows v0.2.0/go.mod h1:ZibNFR49ZFqCXgP76sYanisxRyC+EYrBE7TTknD8s1s=
8995
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
9096
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
9197
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -96,8 +102,6 @@ github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yA
96102
github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
97103
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
98104
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
99-
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
100-
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
101105
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
102106
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
103107
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -146,16 +150,12 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
146150
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
147151
github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4=
148152
github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4=
149-
github.com/lrstanley/bubblezone v0.0.0-20250315020633-c249a3fe1231 h1:9rjt7AfnrXKNSZhp36A3/4QAZAwGGCGD/p8Bse26zms=
150-
github.com/lrstanley/bubblezone v0.0.0-20250315020633-c249a3fe1231/go.mod h1:S5etECMx+sZnW0Gm100Ma9J1PgVCTgNyFaqGu2b08b4=
151153
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
152154
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
153155
github.com/mark3labs/mcp-go v0.17.0 h1:5Ps6T7qXr7De/2QTqs9h6BKeZ/qdeUeGrgM5lPzi930=
154156
github.com/mark3labs/mcp-go v0.17.0/go.mod h1:KmJndYv7GIgcPVwEKJjNcbhVQ+hJGJhrCCB/9xITzpE=
155157
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
156158
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
157-
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
158-
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
159159
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
160160
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
161161
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
@@ -297,7 +297,6 @@ golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
297297
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
298298
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
299299
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
300-
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
301300
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
302301
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
303302
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -318,8 +317,6 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
318317
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
319318
golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
320319
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
321-
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
322-
golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
323320
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
324321
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
325322
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=

internal/diff/diff.go

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package diff
33
import (
44
"bytes"
55
"fmt"
6+
"image/color"
67
"io"
78
"regexp"
89
"strconv"
@@ -13,7 +14,7 @@ import (
1314
"github.com/alecthomas/chroma/v2/lexers"
1415
"github.com/alecthomas/chroma/v2/styles"
1516
"github.com/aymanbagabas/go-udiff"
16-
"github.com/charmbracelet/lipgloss"
17+
"github.com/charmbracelet/lipgloss/v2"
1718
"github.com/charmbracelet/x/ansi"
1819
"github.com/opencode-ai/opencode/internal/config"
1920
"github.com/opencode-ai/opencode/internal/tui/theme"
@@ -323,7 +324,7 @@ func pairLines(lines []DiffLine) []linePair {
323324
// -------------------------------------------------------------------------
324325

325326
// SyntaxHighlight applies syntax highlighting to text based on file extension
326-
func SyntaxHighlight(w io.Writer, source, fileName, formatter string, bg lipgloss.TerminalColor) error {
327+
func SyntaxHighlight(w io.Writer, source, fileName, formatter string, bg color.Color) error {
327328
t := theme.CurrentTheme()
328329

329330
// Determine the language lexer to use
@@ -531,16 +532,13 @@ func SyntaxHighlight(w io.Writer, source, fileName, formatter string, bg lipglos
531532
return f.Format(w, s, it)
532533
}
533534

534-
// getColor returns the appropriate hex color string based on terminal background
535-
func getColor(adaptiveColor lipgloss.AdaptiveColor) string {
536-
if lipgloss.HasDarkBackground() {
537-
return adaptiveColor.Dark
538-
}
539-
return adaptiveColor.Light
535+
func getColor(c color.Color) string {
536+
rgba := color.RGBAModel.Convert(c).(color.RGBA)
537+
return fmt.Sprintf("#%02x%02x%02x", rgba.R, rgba.G, rgba.B)
540538
}
541539

542540
// highlightLine applies syntax highlighting to a single line
543-
func highlightLine(fileName string, line string, bg lipgloss.TerminalColor) string {
541+
func highlightLine(fileName string, line string, bg color.Color) string {
544542
var buf bytes.Buffer
545543
err := SyntaxHighlight(&buf, line, fileName, "terminal16m", bg)
546544
if err != nil {
@@ -563,7 +561,7 @@ func createStyles(t theme.Theme) (removedLineStyle, addedLineStyle, contextLineS
563561
// Rendering Functions
564562
// -------------------------------------------------------------------------
565563

566-
func lipglossToHex(color lipgloss.Color) string {
564+
func lipglossToHex(color color.Color) string {
567565
r, g, b, a := color.RGBA()
568566

569567
// Scale uint32 values (0-65535) to uint8 (0-255).
@@ -576,7 +574,7 @@ func lipglossToHex(color lipgloss.Color) string {
576574
}
577575

578576
// applyHighlighting applies intra-line highlighting to a piece of text
579-
func applyHighlighting(content string, segments []Segment, segmentType LineType, highlightBg lipgloss.AdaptiveColor) string {
577+
func applyHighlighting(content string, segments []Segment, segmentType LineType, highlightBg color.Color) string {
580578
// Find all ANSI sequences in the content
581579
ansiRegex := regexp.MustCompile(`\x1b(?:[@-Z\\-_]|\[[0-9?]*(?:;[0-9?]*)*[@-~])`)
582580
ansiMatches := ansiRegex.FindAllStringIndex(content, -1)

internal/format/spinner.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import (
55
"fmt"
66
"os"
77

8-
"github.com/charmbracelet/bubbles/spinner"
9-
tea "github.com/charmbracelet/bubbletea"
8+
"github.com/charmbracelet/bubbles/v2/spinner"
9+
tea "github.com/charmbracelet/bubbletea/v2"
1010
)
1111

1212
// Spinner wraps the bubbles spinner for non-interactive mode

internal/tui/components/chat/chat.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"fmt"
55
"sort"
66

7-
"github.com/charmbracelet/lipgloss"
7+
"github.com/charmbracelet/lipgloss/v2"
88
"github.com/charmbracelet/x/ansi"
99
"github.com/opencode-ai/opencode/internal/config"
1010
"github.com/opencode-ai/opencode/internal/message"

internal/tui/components/chat/editor.go

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import (
88
"strings"
99
"unicode"
1010

11-
"github.com/charmbracelet/bubbles/key"
12-
"github.com/charmbracelet/bubbles/textarea"
13-
tea "github.com/charmbracelet/bubbletea"
14-
"github.com/charmbracelet/lipgloss"
11+
"github.com/charmbracelet/bubbles/v2/key"
12+
"github.com/charmbracelet/bubbles/v2/textarea"
13+
tea "github.com/charmbracelet/bubbletea/v2"
14+
"github.com/charmbracelet/lipgloss/v2"
1515
"github.com/opencode-ai/opencode/internal/app"
1616
"github.com/opencode-ai/opencode/internal/logging"
1717
"github.com/opencode-ai/opencode/internal/message"
@@ -162,7 +162,7 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
162162
return m, cmd
163163
}
164164
m.attachments = append(m.attachments, msg.Attachment)
165-
case tea.KeyMsg:
165+
case tea.KeyPressMsg:
166166
if key.Matches(msg, DeleteKeyMaps.AttachmentDeleteMode) {
167167
m.deleteMode = true
168168
return m, nil
@@ -172,8 +172,9 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
172172
m.attachments = nil
173173
return m, nil
174174
}
175-
if m.deleteMode && len(msg.Runes) > 0 && unicode.IsDigit(msg.Runes[0]) {
176-
num := int(msg.Runes[0] - '0')
175+
rune := msg.Code
176+
if m.deleteMode && unicode.IsDigit(rune) {
177+
num := int(rune - '0')
177178
m.deleteMode = false
178179
if num < 10 && len(m.attachments) > num {
179180
if num == 0 {
@@ -286,14 +287,22 @@ func CreateTextArea(existing *textarea.Model) textarea.Model {
286287
textMutedColor := t.TextMuted()
287288

288289
ta := textarea.New()
289-
ta.BlurredStyle.Base = styles.BaseStyle().Background(bgColor).Foreground(textColor)
290-
ta.BlurredStyle.CursorLine = styles.BaseStyle().Background(bgColor)
291-
ta.BlurredStyle.Placeholder = styles.BaseStyle().Background(bgColor).Foreground(textMutedColor)
292-
ta.BlurredStyle.Text = styles.BaseStyle().Background(bgColor).Foreground(textColor)
293-
ta.FocusedStyle.Base = styles.BaseStyle().Background(bgColor).Foreground(textColor)
294-
ta.FocusedStyle.CursorLine = styles.BaseStyle().Background(bgColor)
295-
ta.FocusedStyle.Placeholder = styles.BaseStyle().Background(bgColor).Foreground(textMutedColor)
296-
ta.FocusedStyle.Text = styles.BaseStyle().Background(bgColor).Foreground(textColor)
290+
s := textarea.DefaultDarkStyles()
291+
b := s.Blurred
292+
b.Base = styles.BaseStyle().Background(bgColor).Foreground(textColor)
293+
b.CursorLine = styles.BaseStyle().Background(bgColor)
294+
b.Placeholder = styles.BaseStyle().Background(bgColor).Foreground(textMutedColor)
295+
b.Text = styles.BaseStyle().Background(bgColor).Foreground(textColor)
296+
297+
f := s.Focused
298+
f.Base = styles.BaseStyle().Background(bgColor).Foreground(textColor)
299+
f.CursorLine = styles.BaseStyle().Background(bgColor)
300+
f.Placeholder = styles.BaseStyle().Background(bgColor).Foreground(textMutedColor)
301+
f.Text = styles.BaseStyle().Background(bgColor).Foreground(textColor)
302+
303+
s.Focused = f
304+
s.Blurred = b
305+
ta.Styles = s
297306

298307
ta.Prompt = " "
299308
ta.ShowLineNumbers = false
@@ -309,7 +318,7 @@ func CreateTextArea(existing *textarea.Model) textarea.Model {
309318
return ta
310319
}
311320

312-
func NewEditorCmp(app *app.App) tea.Model {
321+
func NewEditorCmp(app *app.App) util.Model {
313322
ta := CreateTextArea(nil)
314323
return &editorCmp{
315324
app: app,

internal/tui/components/chat/list.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import (
55
"fmt"
66
"math"
77

8-
"github.com/charmbracelet/bubbles/key"
9-
"github.com/charmbracelet/bubbles/spinner"
10-
"github.com/charmbracelet/bubbles/viewport"
11-
tea "github.com/charmbracelet/bubbletea"
12-
"github.com/charmbracelet/lipgloss"
8+
"github.com/charmbracelet/bubbles/v2/key"
9+
"github.com/charmbracelet/bubbles/v2/spinner"
10+
"github.com/charmbracelet/bubbles/v2/viewport"
11+
tea "github.com/charmbracelet/bubbletea/v2"
12+
"github.com/charmbracelet/lipgloss/v2"
1313
"github.com/opencode-ai/opencode/internal/app"
1414
"github.com/opencode-ai/opencode/internal/message"
1515
"github.com/opencode-ai/opencode/internal/pubsub"
@@ -426,10 +426,10 @@ func (m *messagesCmp) SetSize(width, height int) tea.Cmd {
426426
}
427427
m.width = width
428428
m.height = height
429-
m.viewport.Width = width
430-
m.viewport.Height = height - 2
431-
m.attachments.Width = width + 40
432-
m.attachments.Height = 3
429+
m.viewport.SetWidth(width)
430+
m.viewport.SetHeight(height - 2)
431+
m.attachments.SetWidth(width + 40)
432+
m.attachments.SetHeight(3)
433433
m.rerender()
434434
return nil
435435
}
@@ -468,11 +468,11 @@ func (m *messagesCmp) BindingKeys() []key.Binding {
468468
}
469469
}
470470

471-
func NewMessagesCmp(app *app.App) tea.Model {
471+
func NewMessagesCmp(app *app.App) util.Model {
472472
s := spinner.New()
473473
s.Spinner = spinner.Pulse
474-
vp := viewport.New(0, 0)
475-
attachmets := viewport.New(0, 0)
474+
vp := viewport.New()
475+
attachmets := viewport.New()
476476
vp.KeyMap.PageUp = messageKeys.PageUp
477477
vp.KeyMap.PageDown = messageKeys.PageDown
478478
vp.KeyMap.HalfPageUp = messageKeys.HalfPageUp

0 commit comments

Comments
 (0)