From 02b9cd9723ef7be37cb5a27ce4ae3a185d1e9c50 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Tue, 14 Jan 2025 16:06:13 -0300 Subject: [PATCH] feat!: v2 Signed-off-by: Carlos Alexandro Becker --- accesscontrol/accesscontrol.go | 2 +- accesscontrol/accesscontrol_test.go | 4 +- activeterm/activeterm.go | 2 +- activeterm/activeterm_test.go | 4 +- bubbletea/query.go | 2 +- bubbletea/tea.go | 67 +++------------------------ bubbletea/tea_other.go | 10 +--- bubbletea/tea_unix.go | 71 +++-------------------------- cmd.go | 2 +- cmd_test.go | 2 +- comment/comment.go | 2 +- comment/comment_test.go | 2 +- elapsed/elapsed.go | 2 +- elapsed/elapsed_test.go | 2 +- examples/banner/main.go | 8 ++-- examples/bubbletea-exec/main.go | 26 +++++------ examples/bubbletea/main.go | 60 ++++++++++-------------- examples/bubbleteaprogram/main.go | 17 ++++--- examples/cobra/main.go | 6 +-- examples/exec/main.go | 8 ++-- examples/forward/main.go | 6 +-- examples/git/main.go | 8 ++-- examples/go.mod | 27 ++++++----- examples/go.sum | 48 +++++++++---------- examples/graceful-shutdown/main.go | 6 +-- examples/identity/main.go | 6 +-- examples/multi-auth/main.go | 6 +-- examples/multichat/main.go | 40 +++++++++------- examples/pty/main.go | 16 ++----- examples/scp/main.go | 6 +-- examples/simple/main.go | 6 +-- git/git.go | 4 +- git/git_test.go | 2 +- go.mod | 28 ++++++------ go.sum | 47 ++++++++----------- logging/logging.go | 4 +- logging/logging_test.go | 6 +-- options.go | 2 +- options_test.go | 2 +- ratelimiter/ratelimiter.go | 4 +- ratelimiter/ratelimiter_test.go | 2 +- recover/recover.go | 4 +- recover/recover_test.go | 2 +- scp/scp.go | 2 +- scp/scp_test.go | 2 +- wish_test.go | 3 +- 46 files changed, 217 insertions(+), 371 deletions(-) diff --git a/accesscontrol/accesscontrol.go b/accesscontrol/accesscontrol.go index 5a8b3106..ae98f915 100644 --- a/accesscontrol/accesscontrol.go +++ b/accesscontrol/accesscontrol.go @@ -5,7 +5,7 @@ import ( "fmt" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" ) // Middleware will exit 1 connections trying to execute commands that are not allowed. diff --git a/accesscontrol/accesscontrol_test.go b/accesscontrol/accesscontrol_test.go index 580ec975..a14fccd1 100644 --- a/accesscontrol/accesscontrol_test.go +++ b/accesscontrol/accesscontrol_test.go @@ -5,8 +5,8 @@ import ( "testing" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/accesscontrol" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/accesscontrol" + "github.com/charmbracelet/wish/v2/testsession" gossh "golang.org/x/crypto/ssh" ) diff --git a/activeterm/activeterm.go b/activeterm/activeterm.go index b66b3150..d5a7820f 100644 --- a/activeterm/activeterm.go +++ b/activeterm/activeterm.go @@ -3,7 +3,7 @@ package activeterm import ( "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" ) // Middleware will exit 1 connections trying with no active terminals. diff --git a/activeterm/activeterm_test.go b/activeterm/activeterm_test.go index e0cebd3b..3b489710 100644 --- a/activeterm/activeterm_test.go +++ b/activeterm/activeterm_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/activeterm" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/activeterm" + "github.com/charmbracelet/wish/v2/testsession" gossh "golang.org/x/crypto/ssh" ) diff --git a/bubbletea/query.go b/bubbletea/query.go index c69de2ee..cc456171 100644 --- a/bubbletea/query.go +++ b/bubbletea/query.go @@ -59,7 +59,7 @@ func queryTerminal( filter QueryTerminalFilter, query string, ) error { - rd, err := input.NewDriver(in, "", 0) + rd, err := input.NewReader(in, "", 0) if err != nil { return err } diff --git a/bubbletea/tea.go b/bubbletea/tea.go index c5e01a04..bb337e7d 100644 --- a/bubbletea/tea.go +++ b/bubbletea/tea.go @@ -3,14 +3,11 @@ package bubbletea import ( "context" - "strings" - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" - "github.com/charmbracelet/log" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/muesli/termenv" + "github.com/charmbracelet/wish/v2" ) // BubbleTeaHandler is the function Bubble Tea apps implement to hook into the @@ -40,21 +37,11 @@ type ProgramHandler func(sess ssh.Session) *tea.Program // It also captures window resize events and sends them to the tea.Program // as tea.WindowSizeMsgs. func Middleware(handler Handler) wish.Middleware { - return MiddlewareWithProgramHandler(newDefaultProgramHandler(handler), termenv.Ascii) -} - -// MiddlewareWithColorProfile allows you to specify the minimum number of colors -// this program needs to work properly. -// -// If the client's color profile has less colors than p, p will be forced. -// Use with caution. -func MiddlewareWithColorProfile(handler Handler, profile termenv.Profile) wish.Middleware { - return MiddlewareWithProgramHandler(newDefaultProgramHandler(handler), profile) + return MiddlewareWithProgramHandler(newDefaultProgramHandler(handler)) } // MiddlewareWithProgramHandler allows you to specify the ProgramHandler to be -// able to access the underlying tea.Program, and the minimum supported color -// profile. +// able to access the underlying tea.Program. // // This is useful for creating custom middlewares that need access to // tea.Program for instance to use p.Send() to send messages to tea.Program. @@ -62,13 +49,9 @@ func MiddlewareWithColorProfile(handler Handler, profile termenv.Profile) wish.M // Make sure to set the tea.WithInput and tea.WithOutput to the ssh.Session // otherwise the program will not function properly. The recommended way // of doing so is by using MakeOptions. -// -// If the client's color profile has less colors than p, p will be forced. -// Use with caution. -func MiddlewareWithProgramHandler(handler ProgramHandler, profile termenv.Profile) wish.Middleware { +func MiddlewareWithProgramHandler(handler ProgramHandler) wish.Middleware { return func(next ssh.Handler) ssh.Handler { return func(sess ssh.Session) { - sess.Context().SetValue(minColorProfileKey, profile) program := handler(sess) if program == nil { next(sess) @@ -104,50 +87,12 @@ func MiddlewareWithProgramHandler(handler ProgramHandler, profile termenv.Profil } } -var minColorProfileKey struct{} - -var profileNames = [4]string{"TrueColor", "ANSI256", "ANSI", "Ascii"} - -// MakeRenderer returns a lipgloss renderer for the current session. -// This function handle PTYs as well, and should be used to style your application. -func MakeRenderer(sess ssh.Session) *lipgloss.Renderer { - cp, ok := sess.Context().Value(minColorProfileKey).(termenv.Profile) - if !ok { - cp = termenv.Ascii - } - r := newRenderer(sess) - if r.ColorProfile() > cp { - wish.Printf(sess, "Warning: Client's terminal is %q, forcing %q\r\n", profileNames[r.ColorProfile()], profileNames[cp]) - r.SetColorProfile(cp) - } - return r -} - // MakeOptions returns the tea.WithInput and tea.WithOutput program options // taking into account possible Emulated or Allocated PTYs. func MakeOptions(sess ssh.Session) []tea.ProgramOption { return makeOpts(sess) } -type sshEnviron []string - -var _ termenv.Environ = sshEnviron(nil) - -// Environ implements termenv.Environ. -func (e sshEnviron) Environ() []string { - return e -} - -// Getenv implements termenv.Environ. -func (e sshEnviron) Getenv(k string) string { - for _, v := range e { - if strings.HasPrefix(v, k+"=") { - return v[len(k)+1:] - } - } - return "" -} - func newDefaultProgramHandler(handler Handler) ProgramHandler { return func(s ssh.Session) *tea.Program { m, opts := handler(s) diff --git a/bubbletea/tea_other.go b/bubbletea/tea_other.go index e5f796d3..d2616f15 100644 --- a/bubbletea/tea_other.go +++ b/bubbletea/tea_other.go @@ -4,10 +4,8 @@ package bubbletea import ( - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" + tea "github.com/charmbracelet/bubbletea/v2" "github.com/charmbracelet/ssh" - "github.com/muesli/termenv" ) func makeOpts(s ssh.Session) []tea.ProgramOption { @@ -16,9 +14,3 @@ func makeOpts(s ssh.Session) []tea.ProgramOption { tea.WithOutput(s), } } - -func newRenderer(s ssh.Session) *lipgloss.Renderer { - pty, _, _ := s.Pty() - env := sshEnviron(append(s.Environ(), "TERM="+pty.Term)) - return lipgloss.NewRenderer(s, termenv.WithEnvironment(env), termenv.WithUnsafe(), termenv.WithColorCache(true)) -} diff --git a/bubbletea/tea_unix.go b/bubbletea/tea_unix.go index 7682b64c..c6f21d59 100644 --- a/bubbletea/tea_unix.go +++ b/bubbletea/tea_unix.go @@ -4,85 +4,26 @@ package bubbletea import ( - "image/color" - "time" - - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/colorprofile" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/x/ansi" - "github.com/charmbracelet/x/input" - "github.com/charmbracelet/x/term" - "github.com/lucasb-eyer/go-colorful" - "github.com/muesli/termenv" ) func makeOpts(s ssh.Session) []tea.ProgramOption { pty, _, ok := s.Pty() if !ok || s.EmulatedPty() { + envs := append(s.Environ(), "TERM="+pty.Term) return []tea.ProgramOption{ tea.WithInput(s), tea.WithOutput(s), + tea.WithEnvironment(envs), + tea.WithColorProfile(colorprofile.Env(envs)), } } return []tea.ProgramOption{ tea.WithInput(pty.Slave), tea.WithOutput(pty.Slave), + tea.WithEnvironment(s.Environ()), } } - -func newRenderer(s ssh.Session) *lipgloss.Renderer { - pty, _, ok := s.Pty() - if !ok || pty.Term == "" || pty.Term == "dumb" { - return lipgloss.NewRenderer(s, termenv.WithProfile(termenv.Ascii)) - } - env := sshEnviron(append(s.Environ(), "TERM="+pty.Term)) - var r *lipgloss.Renderer - var bg color.Color - if ok && pty.Slave != nil { - r = lipgloss.NewRenderer( - pty.Slave, - termenv.WithEnvironment(env), - termenv.WithColorCache(true), - ) - state, err := term.MakeRaw(pty.Slave.Fd()) - if err == nil { - bg, _ = queryBackgroundColor(pty.Slave, pty.Slave) - term.Restore(pty.Slave.Fd(), state) - } - } else { - r = lipgloss.NewRenderer( - s, - termenv.WithEnvironment(env), - termenv.WithUnsafe(), - termenv.WithColorCache(true), - ) - bg = querySessionBackgroundColor(s) - } - if bg != nil { - c, ok := colorful.MakeColor(bg) - if ok { - _, _, l := c.Hsl() - r.SetHasDarkBackground(l < 0.5) - } - } - return r -} - -// copied from x/term@v0.1.3. -func querySessionBackgroundColor(s ssh.Session) (bg color.Color) { - _ = queryTerminal(s, s, time.Second, func(events []input.Event) bool { - for _, e := range events { - switch e := e.(type) { - case input.BackgroundColorEvent: - bg = e.Color - continue // we need to consume the next DA1 event - case input.PrimaryDeviceAttributesEvent: - return false - } - } - return true - }, ansi.RequestBackgroundColor+ansi.RequestPrimaryDeviceAttributes) - return -} diff --git a/cmd.go b/cmd.go index 1ff2d542..eb6be757 100644 --- a/cmd.go +++ b/cmd.go @@ -5,7 +5,7 @@ import ( "io" "os/exec" - tea "github.com/charmbracelet/bubbletea" + tea "github.com/charmbracelet/bubbletea/v2" "github.com/charmbracelet/ssh" ) diff --git a/cmd_test.go b/cmd_test.go index 64c25e58..28d75c18 100644 --- a/cmd_test.go +++ b/cmd_test.go @@ -8,7 +8,7 @@ import ( "time" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/testsession" ) func TestCommandNoPty(t *testing.T) { diff --git a/comment/comment.go b/comment/comment.go index 8b451537..20146b78 100644 --- a/comment/comment.go +++ b/comment/comment.go @@ -2,7 +2,7 @@ package comment import ( "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" ) // Middleware prints a comment at the end of the session. diff --git a/comment/comment_test.go b/comment/comment_test.go index 841a5e9e..2022a17d 100644 --- a/comment/comment_test.go +++ b/comment/comment_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/testsession" gossh "golang.org/x/crypto/ssh" ) diff --git a/elapsed/elapsed.go b/elapsed/elapsed.go index 949172b3..f313d730 100644 --- a/elapsed/elapsed.go +++ b/elapsed/elapsed.go @@ -4,7 +4,7 @@ import ( "time" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" ) // MiddlewareWithFormat returns a middleware that logs the elapsed time of the diff --git a/elapsed/elapsed_test.go b/elapsed/elapsed_test.go index cc65db6e..f1899fb1 100644 --- a/elapsed/elapsed_test.go +++ b/elapsed/elapsed_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/testsession" gossh "golang.org/x/crypto/ssh" ) diff --git a/examples/banner/main.go b/examples/banner/main.go index 554db0c0..aad8e7dd 100644 --- a/examples/banner/main.go +++ b/examples/banner/main.go @@ -12,11 +12,11 @@ import ( _ "embed" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/elapsed" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/elapsed" + "github.com/charmbracelet/wish/v2/logging" ) const ( diff --git a/examples/bubbletea-exec/main.go b/examples/bubbletea-exec/main.go index 90ba571b..6aad8280 100644 --- a/examples/bubbletea-exec/main.go +++ b/examples/bubbletea-exec/main.go @@ -10,14 +10,14 @@ import ( "syscall" "time" - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" - "github.com/charmbracelet/log" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/lipgloss/v2" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/activeterm" - "github.com/charmbracelet/wish/bubbletea" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/activeterm" + "github.com/charmbracelet/wish/v2/bubbletea" + "github.com/charmbracelet/wish/v2/logging" "github.com/charmbracelet/x/editor" ) @@ -67,15 +67,11 @@ func main() { } func teaHandler(s ssh.Session) (tea.Model, []tea.ProgramOption) { - // Create a lipgloss.Renderer for the session - renderer := bubbletea.MakeRenderer(s) // Set up the model with the current session and styles. // We'll use the session to call wish.Command, which makes it compatible // with tea.Command. m := model{ - sess: s, - style: renderer.NewStyle().Foreground(lipgloss.Color("8")), - errStyle: renderer.NewStyle().Foreground(lipgloss.Color("3")), + sess: s, } return m, []tea.ProgramOption{tea.WithAltScreen()} } @@ -87,8 +83,10 @@ type model struct { errStyle lipgloss.Style } -func (m model) Init() tea.Cmd { - return nil +func (m model) Init() (tea.Model, tea.Cmd) { + m.style = lipgloss.NewStyle().Foreground(lipgloss.Color("8")) + m.errStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("3")) + return m, nil } type cmdFinishedMsg struct{ err error } diff --git a/examples/bubbletea/main.go b/examples/bubbletea/main.go index 51db7789..888dd866 100644 --- a/examples/bubbletea/main.go +++ b/examples/bubbletea/main.go @@ -13,14 +13,14 @@ import ( "syscall" "time" - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" - "github.com/charmbracelet/log" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/lipgloss/v2" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/activeterm" - "github.com/charmbracelet/wish/bubbletea" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/activeterm" + "github.com/charmbracelet/wish/v2/bubbletea" + "github.com/charmbracelet/wish/v2/logging" ) const ( @@ -66,35 +66,11 @@ func main() { // pass it to the new model. You can also return tea.ProgramOptions (such as // tea.WithAltScreen) on a session by session basis. func teaHandler(s ssh.Session) (tea.Model, []tea.ProgramOption) { - // This should never fail, as we are using the activeterm middleware. pty, _, _ := s.Pty() - - // When running a Bubble Tea app over SSH, you shouldn't use the default - // lipgloss.NewStyle function. - // That function will use the color profile from the os.Stdin, which is the - // server, not the client. - // We provide a MakeRenderer function in the bubbletea middleware package, - // so you can easily get the correct renderer for the current session, and - // use it to create the styles. - // The recommended way to use these styles is to then pass them down to - // your Bubble Tea model. - renderer := bubbletea.MakeRenderer(s) - txtStyle := renderer.NewStyle().Foreground(lipgloss.Color("10")) - quitStyle := renderer.NewStyle().Foreground(lipgloss.Color("8")) - - bg := "light" - if renderer.HasDarkBackground() { - bg = "dark" - } - m := model{ - term: pty.Term, - profile: renderer.ColorProfile().Name(), - width: pty.Window.Width, - height: pty.Window.Height, - bg: bg, - txtStyle: txtStyle, - quitStyle: quitStyle, + term: pty.Term, + width: pty.Window.Width, + height: pty.Window.Height, } return m, []tea.ProgramOption{tea.WithAltScreen()} } @@ -110,12 +86,24 @@ type model struct { quitStyle lipgloss.Style } -func (m model) Init() tea.Cmd { - return nil +func (m model) Init() (tea.Model, tea.Cmd) { + // default values + m.txtStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("10")) + m.quitStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("8")) + m.bg = "light" + return m, tea.Batch( + tea.RequestBackgroundColor, + ) } func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { + case tea.ColorProfileMsg: + m.profile = msg.String() + case tea.BackgroundColorMsg: + if msg.IsDark() { + m.bg = "dark" + } case tea.WindowSizeMsg: m.height = msg.Height m.width = msg.Width diff --git a/examples/bubbleteaprogram/main.go b/examples/bubbleteaprogram/main.go index d303838d..a694118e 100644 --- a/examples/bubbleteaprogram/main.go +++ b/examples/bubbleteaprogram/main.go @@ -13,13 +13,12 @@ import ( "syscall" "time" - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/log" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/bubbletea" - "github.com/charmbracelet/wish/logging" - "github.com/muesli/termenv" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/bubbletea" + "github.com/charmbracelet/wish/v2/logging" ) const ( @@ -86,7 +85,7 @@ func myCustomBubbleteaMiddleware() wish.Middleware { } return newProg(m, append(bubbletea.MakeOptions(s), tea.WithAltScreen())...) } - return bubbletea.MiddlewareWithProgramHandler(teaHandler, termenv.ANSI256) + return bubbletea.MiddlewareWithProgramHandler(teaHandler) } // Just a generic tea.Model to demo terminal information of ssh. @@ -99,8 +98,8 @@ type model struct { type timeMsg time.Time -func (m model) Init() tea.Cmd { - return nil +func (m model) Init() (tea.Model, tea.Cmd) { + return m, nil } func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { diff --git a/examples/cobra/main.go b/examples/cobra/main.go index 2d92a373..c9c8570c 100644 --- a/examples/cobra/main.go +++ b/examples/cobra/main.go @@ -9,10 +9,10 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/logging" "github.com/spf13/cobra" ) diff --git a/examples/exec/main.go b/examples/exec/main.go index f98af063..0230e2ac 100644 --- a/examples/exec/main.go +++ b/examples/exec/main.go @@ -9,11 +9,11 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/activeterm" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/activeterm" + "github.com/charmbracelet/wish/v2/logging" ) const ( diff --git a/examples/forward/main.go b/examples/forward/main.go index b3474377..1d27a74e 100644 --- a/examples/forward/main.go +++ b/examples/forward/main.go @@ -9,10 +9,10 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/logging" ) const ( diff --git a/examples/git/main.go b/examples/git/main.go index 82bca675..2e3285b4 100644 --- a/examples/git/main.go +++ b/examples/git/main.go @@ -14,11 +14,11 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/git" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/git" + "github.com/charmbracelet/wish/v2/logging" ) const ( diff --git a/examples/go.mod b/examples/go.mod index 296fd456..79f22ed2 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -3,14 +3,13 @@ module examples go 1.21 require ( - github.com/charmbracelet/bubbles v0.20.0 - github.com/charmbracelet/bubbletea v1.2.4 - github.com/charmbracelet/lipgloss v1.0.0 - github.com/charmbracelet/log v0.4.0 + github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250114183437-fbe642df174c + github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250114183556-4f0e1e15a2b2 + github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250114171829-b67eb015d607 + github.com/charmbracelet/log/v2 v2.0.0-20250114165231-978e92235d71 github.com/charmbracelet/ssh v0.0.0-20241211182756-4fe22b0f1b7c - github.com/charmbracelet/wish v0.5.0 + github.com/charmbracelet/wish/v2 v2.0.0-00010101000000-000000000000 github.com/charmbracelet/x/editor v0.1.0 - github.com/muesli/termenv v0.15.3-0.20240509142007-81b8f94111d5 github.com/pkg/sftp v1.13.7 github.com/spf13/cobra v1.8.1 golang.org/x/crypto v0.32.0 @@ -22,19 +21,22 @@ require ( github.com/ProtonMail/go-crypto v1.1.3 // indirect github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect github.com/atotto/clipboard v0.1.4 // indirect - github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/charmbracelet/colorprofile v0.1.8 // indirect github.com/charmbracelet/keygen v0.5.1 // indirect - github.com/charmbracelet/x/ansi v0.4.5 // indirect + github.com/charmbracelet/x/ansi v0.7.0 // indirect + github.com/charmbracelet/x/cellbuf v0.0.6 // indirect github.com/charmbracelet/x/conpty v0.1.0 // indirect github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 // indirect - github.com/charmbracelet/x/input v0.2.0 // indirect + github.com/charmbracelet/x/input v0.3.1-0.20250113133550-1814328524c0 // indirect github.com/charmbracelet/x/term v0.2.1 // indirect github.com/charmbracelet/x/termios v0.1.0 // indirect + github.com/charmbracelet/x/vt v0.0.0-20241121165045-a3720547cbb4 // indirect + github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32 // indirect + github.com/charmbracelet/x/windows v0.2.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/creack/pty v1.1.21 // indirect github.com/cyphar/filepath-securejoin v0.3.6 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.1 // indirect github.com/go-git/go-git/v5 v5.13.1 // indirect @@ -45,10 +47,7 @@ require ( github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/kr/fs v0.1.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect @@ -67,4 +66,4 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect ) -replace github.com/charmbracelet/wish => ../ +replace github.com/charmbracelet/wish/v2 => ../ diff --git a/examples/go.sum b/examples/go.sum index c4327d1f..09ee4dce 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -13,34 +13,42 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= -github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= -github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE= -github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU= -github.com/charmbracelet/bubbletea v1.2.4 h1:KN8aCViA0eps9SCOThb2/XPIlea3ANJLUkv3KnQRNCE= -github.com/charmbracelet/bubbletea v1.2.4/go.mod h1:Qr6fVQw+wX7JkWWkVyXYk/ZUQ92a6XNekLXa3rR18MM= +github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250114183437-fbe642df174c h1:hhR5M/3Wt/mKLTPF/MyvA4/WWtnTmIzLXo69pW/9S5s= +github.com/charmbracelet/bubbles/v2 v2.0.0-alpha.2.0.20250114183437-fbe642df174c/go.mod h1:M271uOSMoLQsiVV1yhFZx6JprPQCVXgLYpSEbWXtidM= +github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250114183556-4f0e1e15a2b2 h1:ytIbtai+vAova38HZc4Pbc80VDzlVyxlVilEXR2zSMs= +github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250114183556-4f0e1e15a2b2/go.mod h1:Ynvl3LVehMYuuEs2B0QKNETMOBPsq/Z05pNBrKnpK1k= +github.com/charmbracelet/colorprofile v0.1.8 h1:PywDeXsiAzlPtkiiKgMEVLvb6nlEuKrMj9+FJBtj4jU= +github.com/charmbracelet/colorprofile v0.1.8/go.mod h1:+jpmObxZl1Dab3H3IMVIPSZTsKcFpjJUv97G0dLqM60= github.com/charmbracelet/keygen v0.5.1 h1:zBkkYPtmKDVTw+cwUyY6ZwGDhRxXkEp0Oxs9sqMLqxI= github.com/charmbracelet/keygen v0.5.1/go.mod h1:zznJVmK/GWB6dAtjluqn2qsttiCBhA5MZSiwb80fcHw= -github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg= -github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo= -github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM= -github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM= +github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250114171829-b67eb015d607 h1:lERE4ow371r5WMqQAt7Eqlg1A4tBNA8T4RLwdXnKyBo= +github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250114171829-b67eb015d607/go.mod h1:MD7Vb+O1zFRgBo+F94JHHuME7df8XBByNKuX5k/L/qs= +github.com/charmbracelet/log/v2 v2.0.0-20250114165231-978e92235d71 h1:v7LFCTQi4Xf57uZ46zAahuGht05rAkwhIOgv9F4qauw= +github.com/charmbracelet/log/v2 v2.0.0-20250114165231-978e92235d71/go.mod h1:msBxPBS/tbt2NiAUSJN9aAbErjO+NPaDSM8LUOLvBlM= github.com/charmbracelet/ssh v0.0.0-20241211182756-4fe22b0f1b7c h1:treQxMBdI2PaD4eOYfFux8stfCkUxhuUxaqGcxKqVpI= github.com/charmbracelet/ssh v0.0.0-20241211182756-4fe22b0f1b7c/go.mod h1:CY1xbl2z+ZeBmNWItKZyxx0zgDgnhmR57+DTsHOobJ4= -github.com/charmbracelet/x/ansi v0.4.5 h1:LqK4vwBNaXw2AyGIICa5/29Sbdq58GbGdFngSexTdRM= -github.com/charmbracelet/x/ansi v0.4.5/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= +github.com/charmbracelet/x/ansi v0.7.0 h1:/QfFmiXOGGwN6fRbzvQaYp7fu1pkxpZ3qFBZWBsP404= +github.com/charmbracelet/x/ansi v0.7.0/go.mod h1:KBUFw1la39nl0dLl10l5ORDAqGXaeurTQmwyyVKse/Q= +github.com/charmbracelet/x/cellbuf v0.0.6 h1:pJUWN/G1jbt1Nj/+ILfC2/ABQoZzWu1vG73yHQEYELI= +github.com/charmbracelet/x/cellbuf v0.0.6/go.mod h1:d72o71glp8flkCz54PHLe3+nuw5u2v3UxmKqruUERWQ= github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U= github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ= github.com/charmbracelet/x/editor v0.1.0 h1:p69/dpvlwRTs9uYiPeAWruwsHqTFzHhTvQOd/WVSX98= github.com/charmbracelet/x/editor v0.1.0/go.mod h1:oivrEbcP/AYt/Hpvk5pwDXXrQ933gQS6UzL6fxqAGSA= github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA= github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0= -github.com/charmbracelet/x/input v0.2.0 h1:1Sv+y/flcqUfUH2PXNIDKDIdT2G8smOnGOgawqhwy8A= -github.com/charmbracelet/x/input v0.2.0/go.mod h1:KUSFIS6uQymtnr5lHVSOK9j8RvwTD4YHnWnzJUYnd/M= +github.com/charmbracelet/x/input v0.3.1-0.20250113133550-1814328524c0 h1:TRxIrOszJcEFOAq5I8fEUzFvsHSSVJpez9pdFHiRD2Q= +github.com/charmbracelet/x/input v0.3.1-0.20250113133550-1814328524c0/go.mod h1:wP8S9NAdb7R+AqnF/av0atSMUrsid8UxFHouRu/8C5k= github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= github.com/charmbracelet/x/termios v0.1.0 h1:y4rjAHeFksBAfGbkRDmVinMg7x7DELIGAFbdNvxg97k= github.com/charmbracelet/x/termios v0.1.0/go.mod h1:H/EVv/KRnrYjz+fCYa9bsKdqF3S8ouDK0AZEbG7r+/U= +github.com/charmbracelet/x/vt v0.0.0-20241121165045-a3720547cbb4 h1:EacjHxcQEEgOZ7TbkAU3b84hd1Bn5NwA8YV5uyJ9EI4= +github.com/charmbracelet/x/vt v0.0.0-20241121165045-a3720547cbb4/go.mod h1:1/jFoHl7/I4br0StC9OXXEondkK9qi3nUtKoqI35HcI= +github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32 h1:14czE6R5CgOlvONsJYa2B1uTyLvXzGXpBqw2AyZeTh4= +github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32/go.mod h1:hyua5CY63kyl7IfyIxv1SjVEqoKze/XmDkEglItuVjA= +github.com/charmbracelet/x/windows v0.2.0 h1:ilXA1GJjTNkgOm94CLPeSz7rar54jtFatdmoiONPuEw= +github.com/charmbracelet/x/windows v0.2.0/go.mod h1:ZibNFR49ZFqCXgP76sYanisxRyC+EYrBE7TTknD8s1s= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -55,8 +63,6 @@ github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= -github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= @@ -92,18 +98,10 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= -github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= -github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= -github.com/muesli/termenv v0.15.3-0.20240509142007-81b8f94111d5 h1:NiONcKK0EV5gUZcnCiPMORaZA0eBDc+Fgepl9xl4lZ8= -github.com/muesli/termenv v0.15.3-0.20240509142007-81b8f94111d5/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= @@ -173,12 +171,10 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= diff --git a/examples/graceful-shutdown/main.go b/examples/graceful-shutdown/main.go index bf24120f..c0c299d8 100644 --- a/examples/graceful-shutdown/main.go +++ b/examples/graceful-shutdown/main.go @@ -9,10 +9,10 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/logging" ) const ( diff --git a/examples/identity/main.go b/examples/identity/main.go index 03d10b21..ba35eb4d 100644 --- a/examples/identity/main.go +++ b/examples/identity/main.go @@ -10,10 +10,10 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/logging" ) const ( diff --git a/examples/multi-auth/main.go b/examples/multi-auth/main.go index 85dca971..66987663 100644 --- a/examples/multi-auth/main.go +++ b/examples/multi-auth/main.go @@ -9,10 +9,10 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/logging" gossh "golang.org/x/crypto/ssh" ) diff --git a/examples/multichat/main.go b/examples/multichat/main.go index 987a9be7..62027d14 100644 --- a/examples/multichat/main.go +++ b/examples/multichat/main.go @@ -10,17 +10,16 @@ import ( "syscall" "time" - "github.com/charmbracelet/bubbles/textarea" - "github.com/charmbracelet/bubbles/viewport" - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" - "github.com/charmbracelet/log" + "github.com/charmbracelet/bubbles/v2/textarea" + "github.com/charmbracelet/bubbles/v2/viewport" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/lipgloss/v2" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/activeterm" - "github.com/charmbracelet/wish/bubbletea" - "github.com/charmbracelet/wish/logging" - "github.com/muesli/termenv" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/activeterm" + "github.com/charmbracelet/wish/v2/bubbletea" + "github.com/charmbracelet/wish/v2/logging" ) const ( @@ -47,7 +46,7 @@ func newApp() *app { wish.WithAddress(net.JoinHostPort(host, port)), wish.WithHostKeyPath(".ssh/id_ed25519"), wish.WithMiddleware( - bubbletea.MiddlewareWithProgramHandler(a.ProgramHandler, termenv.ANSI256), + bubbletea.MiddlewareWithProgramHandler(a.ProgramHandler), activeterm.Middleware(), logging.Middleware(), ), @@ -127,11 +126,11 @@ func initialModel() model { ta.SetHeight(3) // Remove cursor line styling - ta.FocusedStyle.CursorLine = lipgloss.NewStyle() + ta.Styles.Focused.CursorLine = lipgloss.NewStyle() ta.ShowLineNumbers = false - vp := viewport.New(30, 5) + vp := viewport.New(viewport.WithWidth(30), viewport.WithHeight(5)) vp.SetContent(`Welcome to the chat room! Type a message and press Enter to send.`) @@ -146,8 +145,8 @@ Type a message and press Enter to send.`) } } -func (m model) Init() tea.Cmd { - return textarea.Blink +func (m model) Init() (tea.Model, tea.Cmd) { + return m, textarea.Blink } func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { @@ -161,8 +160,15 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case tea.KeyMsg: - switch msg.Type { - case tea.KeyCtrlC, tea.KeyEsc: + switch msg.Key().Mod { + case tea.ModCtrl: // We're only interested in ctrl+ + switch msg.Key().Code { + case 'c': + return m, tea.Quit + } + } + switch msg.Key().Code { + case tea.KeyEsc: return m, tea.Quit case tea.KeyEnter: m.app.send(chatMsg{ diff --git a/examples/pty/main.go b/examples/pty/main.go index afd3bdec..a3c74342 100644 --- a/examples/pty/main.go +++ b/examples/pty/main.go @@ -11,12 +11,11 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/activeterm" - "github.com/charmbracelet/wish/bubbletea" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/activeterm" + "github.com/charmbracelet/wish/v2/logging" ) const ( @@ -36,18 +35,11 @@ func main() { func(next ssh.Handler) ssh.Handler { return func(sess ssh.Session) { pty, _, _ := sess.Pty() - renderer := bubbletea.MakeRenderer(sess) - - bg := "light" - if renderer.HasDarkBackground() { - bg = "dark" - } wish.Printf(sess, "Hello, world!\r\n") wish.Printf(sess, "Term: %s\r\n", pty.Term) wish.Printf(sess, "PTY: %s\r\n", pty.Slave.Name()) wish.Printf(sess, "FD: %d\r\n", pty.Slave.Fd()) - wish.Printf(sess, "Background: %v\r\n", bg) next(sess) } }, diff --git a/examples/scp/main.go b/examples/scp/main.go index d782339e..b01e1a46 100644 --- a/examples/scp/main.go +++ b/examples/scp/main.go @@ -15,10 +15,10 @@ import ( "syscall" "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/scp" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/scp" "github.com/pkg/sftp" ) diff --git a/examples/simple/main.go b/examples/simple/main.go index 2266f0cd..dd967a5c 100644 --- a/examples/simple/main.go +++ b/examples/simple/main.go @@ -4,10 +4,10 @@ import ( "errors" "net" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/logging" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/logging" ) const ( diff --git a/git/git.go b/git/git.go index e07c6d8c..c470d8fc 100644 --- a/git/git.go +++ b/git/git.go @@ -8,9 +8,9 @@ import ( "path/filepath" "strings" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" ) diff --git a/git/git_test.go b/git/git_test.go index aa59d933..af9d5d75 100644 --- a/git/git_test.go +++ b/git/git_test.go @@ -11,7 +11,7 @@ import ( "github.com/charmbracelet/keygen" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" ) func TestGitMiddleware(t *testing.T) { diff --git a/go.mod b/go.mod index 559276dc..5e9f5496 100644 --- a/go.mod +++ b/go.mod @@ -1,22 +1,18 @@ -module github.com/charmbracelet/wish +module github.com/charmbracelet/wish/v2 go 1.21 require ( - github.com/charmbracelet/bubbletea v1.2.4 + github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250114183556-4f0e1e15a2b2 github.com/charmbracelet/keygen v0.5.1 - github.com/charmbracelet/lipgloss v1.0.0 - github.com/charmbracelet/log v0.4.0 + github.com/charmbracelet/log/v2 v2.0.0-20250114165231-978e92235d71 github.com/charmbracelet/ssh v0.0.0-20241211182756-4fe22b0f1b7c - github.com/charmbracelet/x/ansi v0.4.5 - github.com/charmbracelet/x/input v0.2.0 - github.com/charmbracelet/x/term v0.2.1 + github.com/charmbracelet/x/ansi v0.7.0 + github.com/charmbracelet/x/input v0.3.1-0.20250113133550-1814328524c0 github.com/go-git/go-git/v5 v5.13.1 github.com/google/go-cmp v0.6.0 github.com/hashicorp/golang-lru/v2 v2.0.7 - github.com/lucasb-eyer/go-colorful v1.2.0 github.com/matryer/is v1.4.1 - github.com/muesli/termenv v0.15.3-0.20240509142007-81b8f94111d5 golang.org/x/crypto v0.32.0 golang.org/x/sync v0.10.0 golang.org/x/time v0.9.0 @@ -27,25 +23,27 @@ require ( github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v1.1.3 // indirect github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect - github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/charmbracelet/colorprofile v0.1.8 // indirect + github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250114171829-b67eb015d607 // indirect + github.com/charmbracelet/x/cellbuf v0.0.6 // indirect github.com/charmbracelet/x/conpty v0.1.0 // indirect github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 // indirect + github.com/charmbracelet/x/term v0.2.1 // indirect github.com/charmbracelet/x/termios v0.1.0 // indirect + github.com/charmbracelet/x/vt v0.0.0-20241121165045-a3720547cbb4 // indirect + github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32 // indirect + github.com/charmbracelet/x/windows v0.2.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/creack/pty v1.1.21 // indirect github.com/cyphar/filepath-securejoin v0.3.6 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-localereader v0.0.1 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect diff --git a/go.sum b/go.sum index f6a3f7ce..2ae32bee 100644 --- a/go.sum +++ b/go.sum @@ -9,30 +9,38 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= -github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= -github.com/charmbracelet/bubbletea v1.2.4 h1:KN8aCViA0eps9SCOThb2/XPIlea3ANJLUkv3KnQRNCE= -github.com/charmbracelet/bubbletea v1.2.4/go.mod h1:Qr6fVQw+wX7JkWWkVyXYk/ZUQ92a6XNekLXa3rR18MM= +github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250114183556-4f0e1e15a2b2 h1:ytIbtai+vAova38HZc4Pbc80VDzlVyxlVilEXR2zSMs= +github.com/charmbracelet/bubbletea/v2 v2.0.0-alpha.2.0.20250114183556-4f0e1e15a2b2/go.mod h1:Ynvl3LVehMYuuEs2B0QKNETMOBPsq/Z05pNBrKnpK1k= +github.com/charmbracelet/colorprofile v0.1.8 h1:PywDeXsiAzlPtkiiKgMEVLvb6nlEuKrMj9+FJBtj4jU= +github.com/charmbracelet/colorprofile v0.1.8/go.mod h1:+jpmObxZl1Dab3H3IMVIPSZTsKcFpjJUv97G0dLqM60= github.com/charmbracelet/keygen v0.5.1 h1:zBkkYPtmKDVTw+cwUyY6ZwGDhRxXkEp0Oxs9sqMLqxI= github.com/charmbracelet/keygen v0.5.1/go.mod h1:zznJVmK/GWB6dAtjluqn2qsttiCBhA5MZSiwb80fcHw= -github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg= -github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo= -github.com/charmbracelet/log v0.4.0 h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM= -github.com/charmbracelet/log v0.4.0/go.mod h1:63bXt/djrizTec0l11H20t8FDSvA4CRZJ1KH22MdptM= +github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250114171829-b67eb015d607 h1:lERE4ow371r5WMqQAt7Eqlg1A4tBNA8T4RLwdXnKyBo= +github.com/charmbracelet/lipgloss/v2 v2.0.0-alpha.2.0.20250114171829-b67eb015d607/go.mod h1:MD7Vb+O1zFRgBo+F94JHHuME7df8XBByNKuX5k/L/qs= +github.com/charmbracelet/log/v2 v2.0.0-20250114165231-978e92235d71 h1:v7LFCTQi4Xf57uZ46zAahuGht05rAkwhIOgv9F4qauw= +github.com/charmbracelet/log/v2 v2.0.0-20250114165231-978e92235d71/go.mod h1:msBxPBS/tbt2NiAUSJN9aAbErjO+NPaDSM8LUOLvBlM= github.com/charmbracelet/ssh v0.0.0-20241211182756-4fe22b0f1b7c h1:treQxMBdI2PaD4eOYfFux8stfCkUxhuUxaqGcxKqVpI= github.com/charmbracelet/ssh v0.0.0-20241211182756-4fe22b0f1b7c/go.mod h1:CY1xbl2z+ZeBmNWItKZyxx0zgDgnhmR57+DTsHOobJ4= -github.com/charmbracelet/x/ansi v0.4.5 h1:LqK4vwBNaXw2AyGIICa5/29Sbdq58GbGdFngSexTdRM= -github.com/charmbracelet/x/ansi v0.4.5/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= +github.com/charmbracelet/x/ansi v0.7.0 h1:/QfFmiXOGGwN6fRbzvQaYp7fu1pkxpZ3qFBZWBsP404= +github.com/charmbracelet/x/ansi v0.7.0/go.mod h1:KBUFw1la39nl0dLl10l5ORDAqGXaeurTQmwyyVKse/Q= +github.com/charmbracelet/x/cellbuf v0.0.6 h1:pJUWN/G1jbt1Nj/+ILfC2/ABQoZzWu1vG73yHQEYELI= +github.com/charmbracelet/x/cellbuf v0.0.6/go.mod h1:d72o71glp8flkCz54PHLe3+nuw5u2v3UxmKqruUERWQ= github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U= github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ= github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9iqk37QUU2Rvb6DSBYRLtWqFqfxf8l5hOZUA= github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0= -github.com/charmbracelet/x/input v0.2.0 h1:1Sv+y/flcqUfUH2PXNIDKDIdT2G8smOnGOgawqhwy8A= -github.com/charmbracelet/x/input v0.2.0/go.mod h1:KUSFIS6uQymtnr5lHVSOK9j8RvwTD4YHnWnzJUYnd/M= +github.com/charmbracelet/x/input v0.3.1-0.20250113133550-1814328524c0 h1:TRxIrOszJcEFOAq5I8fEUzFvsHSSVJpez9pdFHiRD2Q= +github.com/charmbracelet/x/input v0.3.1-0.20250113133550-1814328524c0/go.mod h1:wP8S9NAdb7R+AqnF/av0atSMUrsid8UxFHouRu/8C5k= github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= github.com/charmbracelet/x/termios v0.1.0 h1:y4rjAHeFksBAfGbkRDmVinMg7x7DELIGAFbdNvxg97k= github.com/charmbracelet/x/termios v0.1.0/go.mod h1:H/EVv/KRnrYjz+fCYa9bsKdqF3S8ouDK0AZEbG7r+/U= +github.com/charmbracelet/x/vt v0.0.0-20241121165045-a3720547cbb4 h1:EacjHxcQEEgOZ7TbkAU3b84hd1Bn5NwA8YV5uyJ9EI4= +github.com/charmbracelet/x/vt v0.0.0-20241121165045-a3720547cbb4/go.mod h1:1/jFoHl7/I4br0StC9OXXEondkK9qi3nUtKoqI35HcI= +github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32 h1:14czE6R5CgOlvONsJYa2B1uTyLvXzGXpBqw2AyZeTh4= +github.com/charmbracelet/x/wcwidth v0.0.0-20241113152101-0af7d04e9f32/go.mod h1:hyua5CY63kyl7IfyIxv1SjVEqoKze/XmDkEglItuVjA= +github.com/charmbracelet/x/windows v0.2.0 h1:ilXA1GJjTNkgOm94CLPeSz7rar54jtFatdmoiONPuEw= +github.com/charmbracelet/x/windows v0.2.0/go.mod h1:ZibNFR49ZFqCXgP76sYanisxRyC+EYrBE7TTknD8s1s= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= @@ -46,8 +54,6 @@ github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= -github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= @@ -81,18 +87,8 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= -github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= -github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= -github.com/muesli/termenv v0.15.3-0.20240509142007-81b8f94111d5 h1:NiONcKK0EV5gUZcnCiPMORaZA0eBDc+Fgepl9xl4lZ8= -github.com/muesli/termenv v0.15.3-0.20240509142007-81b8f94111d5/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= @@ -101,7 +97,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= @@ -137,9 +132,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/logging/logging.go b/logging/logging.go index 0bda1b19..7292f570 100644 --- a/logging/logging.go +++ b/logging/logging.go @@ -3,9 +3,9 @@ package logging import ( "time" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" ) // Middleware provides basic connection logging. diff --git a/logging/logging_test.go b/logging/logging_test.go index 69f6f500..27285fb2 100644 --- a/logging/logging_test.go +++ b/logging/logging_test.go @@ -4,9 +4,9 @@ import ( "testing" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" - "github.com/charmbracelet/wish/logging" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2" + "github.com/charmbracelet/wish/v2/logging" + "github.com/charmbracelet/wish/v2/testsession" gossh "golang.org/x/crypto/ssh" ) diff --git a/options.go b/options.go index e404b139..1c028a95 100644 --- a/options.go +++ b/options.go @@ -10,7 +10,7 @@ import ( "time" "github.com/charmbracelet/keygen" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" gossh "golang.org/x/crypto/ssh" ) diff --git a/options_test.go b/options_test.go index b3d75213..8e409d2a 100644 --- a/options_test.go +++ b/options_test.go @@ -9,7 +9,7 @@ import ( "time" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/testsession" gossh "golang.org/x/crypto/ssh" ) diff --git a/ratelimiter/ratelimiter.go b/ratelimiter/ratelimiter.go index 92b70f39..7b6a830a 100644 --- a/ratelimiter/ratelimiter.go +++ b/ratelimiter/ratelimiter.go @@ -7,9 +7,9 @@ import ( "errors" "net" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" lru "github.com/hashicorp/golang-lru/v2" "golang.org/x/time/rate" ) diff --git a/ratelimiter/ratelimiter_test.go b/ratelimiter/ratelimiter_test.go index 018c38be..a530779b 100644 --- a/ratelimiter/ratelimiter_test.go +++ b/ratelimiter/ratelimiter_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/testsession" "golang.org/x/sync/errgroup" "golang.org/x/time/rate" ) diff --git a/recover/recover.go b/recover/recover.go index 769309c0..ce7749b0 100644 --- a/recover/recover.go +++ b/recover/recover.go @@ -3,9 +3,9 @@ package recover import ( "runtime/debug" - "github.com/charmbracelet/log" + "github.com/charmbracelet/log/v2" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" ) // Middleware is a wish middleware that recovers from panics and log to stderr. diff --git a/recover/recover_test.go b/recover/recover_test.go index 2eac95cf..a06ca0bf 100644 --- a/recover/recover_test.go +++ b/recover/recover_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/testsession" gossh "golang.org/x/crypto/ssh" ) diff --git a/scp/scp.go b/scp/scp.go index 21e63701..f8a88355 100644 --- a/scp/scp.go +++ b/scp/scp.go @@ -11,7 +11,7 @@ import ( "strings" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish" + "github.com/charmbracelet/wish/v2" ) // CopyToClientHandler is a handler that can be implemented to handle files diff --git a/scp/scp_test.go b/scp/scp_test.go index 6fe34d45..39a12921 100644 --- a/scp/scp_test.go +++ b/scp/scp_test.go @@ -8,7 +8,7 @@ import ( "testing" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/testsession" "github.com/google/go-cmp/cmp" "github.com/matryer/is" gossh "golang.org/x/crypto/ssh" diff --git a/wish_test.go b/wish_test.go index 00ed5024..67f98936 100644 --- a/wish_test.go +++ b/wish_test.go @@ -1,4 +1,3 @@ -// go:generate mockgen -package mocks -destination mocks/session.go github.com/charmbracelet/ssh Session package wish import ( @@ -10,7 +9,7 @@ import ( "time" "github.com/charmbracelet/ssh" - "github.com/charmbracelet/wish/testsession" + "github.com/charmbracelet/wish/v2/testsession" ) func TestNewServer(t *testing.T) {