From ea907c621c6e87a6a4b62affa32fea79093669fe Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Thu, 24 Jul 2025 13:39:52 -0300 Subject: [PATCH 1/6] chore(deps): update lipgloss Signed-off-by: Carlos Alexandro Becker --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e17354c051a21b593a385b1e3995cc543aafd0dd..7c5c41a1fd5e06a8a7940c1206fd147111a1239a 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/charmbracelet/catwalk v0.3.1 github.com/charmbracelet/fang v0.3.1-0.20250711140230-d5ebb8c1d674 github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe - github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250716211347-10c048e36112 + github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250721205738-ea66aa652ee0 github.com/charmbracelet/log/v2 v2.0.0-20250226163916-c379e29ff706 github.com/charmbracelet/x/ansi v0.9.3 github.com/charmbracelet/x/exp/charmtone v0.0.0-20250708181618-a60a724ba6c3 diff --git a/go.sum b/go.sum index 755edeb81ead60da60196e2834c9e6354af168b7..09665521405cfe2c16380e0d49b569a4202ec13f 100644 --- a/go.sum +++ b/go.sum @@ -80,8 +80,8 @@ github.com/charmbracelet/fang v0.3.1-0.20250711140230-d5ebb8c1d674 h1:+Cz+VfxD5D github.com/charmbracelet/fang v0.3.1-0.20250711140230-d5ebb8c1d674/go.mod h1:9gCUAHmVx5BwSafeyNr3GI0GgvlB1WYjL21SkPp1jyU= github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe h1:i6ce4CcAlPpTj2ER69m1DBeLZ3RRcHnKExuwhKa3GfY= github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe/go.mod h1:p3Q+aN4eQKeM5jhrmXPMgPrlKbmc59rWSnMsSA3udhk= -github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250716211347-10c048e36112 h1:SyZEoqRe2oiKZI+h93lgJYXtcBgcS/OsJIOYC7KbR7s= -github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250716211347-10c048e36112/go.mod h1:BXY7j7rZgAprFwzNcO698++5KTd6GKI6lU83Pr4o0r0= +github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250721205738-ea66aa652ee0 h1:sWRGoSw/JsO2S4t2+fmmEkRbkOxphI0AxZkQPQVKWbs= +github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.3.0.20250721205738-ea66aa652ee0/go.mod h1:XIuqKpZTUXtVyeyiN1k9Tc/U7EzfaDnVc34feFHfBws= github.com/charmbracelet/log/v2 v2.0.0-20250226163916-c379e29ff706 h1:WkwO6Ks3mSIGnGuSdKl9qDSyfbYK50z2wc2gGMggegE= github.com/charmbracelet/log/v2 v2.0.0-20250226163916-c379e29ff706/go.mod h1:mjJGp00cxcfvD5xdCa+bso251Jt4owrQvuimJtVmEmM= github.com/charmbracelet/ultraviolet v0.0.0-20250723145313-809e6f5b43a1 h1:tsw1mOuIEIKlmm614bXctvJ3aavaFhyPG+y+wrKtuKQ= From 443f3d88abf053b1c91873c3630842dc994a51bf Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 24 Jul 2025 16:53:21 -0300 Subject: [PATCH 2/6] chore(deps): update `u-root` to latest commit from `main` --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7c5c41a1fd5e06a8a7940c1206fd147111a1239a..1ab2021a0b2c32a7ce9eeb6cf4827459e8bb27a6 100644 --- a/go.mod +++ b/go.mod @@ -40,7 +40,7 @@ require ( github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef github.com/stretchr/testify v1.10.0 github.com/tidwall/sjson v1.2.5 - github.com/u-root/u-root v0.14.1-0.20250722142936-bf4e78a90dfc + github.com/u-root/u-root v0.14.1-0.20250724181933-b01901710169 github.com/zeebo/xxh3 v1.0.2 golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 gopkg.in/natefinch/lumberjack.v2 v2.2.1 diff --git a/go.sum b/go.sum index 09665521405cfe2c16380e0d49b569a4202ec13f..07a4be065e84a47701ed330bde1d881500719597 100644 --- a/go.sum +++ b/go.sum @@ -261,8 +261,8 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= -github.com/u-root/u-root v0.14.1-0.20250722142936-bf4e78a90dfc h1:HjI/UCF4dRyzizePQrhGUSQvuU7z4tOqMqz6GRGlFCM= -github.com/u-root/u-root v0.14.1-0.20250722142936-bf4e78a90dfc/go.mod h1:/0Qr7qJeDwWxoKku2xKQ4Szc+SwBE3g9VE8jNiamsmc= +github.com/u-root/u-root v0.14.1-0.20250724181933-b01901710169 h1:f4cp2yGKkMuGpCwAyNEjzcw8szgVXmemK/wfOu4l5gc= +github.com/u-root/u-root v0.14.1-0.20250724181933-b01901710169/go.mod h1:/0Qr7qJeDwWxoKku2xKQ4Szc+SwBE3g9VE8jNiamsmc= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= From fa1cd6ad5277460ba3c52e32860e824859a6b6b8 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Thu, 24 Jul 2025 16:50:47 -0400 Subject: [PATCH 3/6] docs(readme): genericize MCP examples --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c693a94cf4349fdf455975b0abfd1aa7499476e7..26cb7308bb7a614603c61c3f4f4f5d1cee3fe40f 100644 --- a/README.md +++ b/README.md @@ -116,9 +116,9 @@ Crush supports Model Context Protocol (MCP) servers through three transport type }, "github": { "type": "http", - "url": "https://api.githubcopilot.com/mcp/", + "url": "https://example.com/mcp/", "headers": { - "Authorization": "$(echo Bearer $GH_MCP_TOKEN)" + "Authorization": "$(echo Bearer $EXAMPLE_MCP_TOKEN)" } }, "streaming-service": { From d6d5cbc68bdf3dc91622d8bdd93737c55c9a5548 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 24 Jul 2025 15:52:46 -0300 Subject: [PATCH 4/6] fix: fix panic on onboarding when no model is selected on the list * `rm -r ~/.local/share/crush` * run `crush` * type something on the filter so no model is shown on the list * press enter * a panic happens Fixes #285 --- internal/tui/components/chat/splash/splash.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/tui/components/chat/splash/splash.go b/internal/tui/components/chat/splash/splash.go index a7cf0b27de678dc63d1f9058a5d9d6bd3957d2ae..f459eaa3788fa350305f8636684ad5b3d3aad69c 100644 --- a/internal/tui/components/chat/splash/splash.go +++ b/internal/tui/components/chat/splash/splash.go @@ -196,6 +196,9 @@ func (s *splashCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } if s.isOnboarding && !s.needsAPIKey { modelInx := s.modelList.SelectedIndex() + if modelInx == -1 { + return s, nil + } items := s.modelList.Items() selectedItem := items[modelInx].(completions.CompletionItem).Value().(models.ModelOption) if s.isProviderConfigured(string(selectedItem.Provider.ID)) { From 582eeb0bbd995a4303c611a40dfcb8e85531d97b Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 24 Jul 2025 16:41:37 -0300 Subject: [PATCH 5/6] fix: hide info box when the initialization message is shown --- internal/tui/components/chat/splash/splash.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/tui/components/chat/splash/splash.go b/internal/tui/components/chat/splash/splash.go index f459eaa3788fa350305f8636684ad5b3d3aad69c..3aa25dfe13c1cf24de1e2fea3fa651bec1b07eb3 100644 --- a/internal/tui/components/chat/splash/splash.go +++ b/internal/tui/components/chat/splash/splash.go @@ -494,9 +494,7 @@ func (s *splashCmp) View() string { }) buttons := lipgloss.JoinHorizontal(lipgloss.Left, yesButton, " ", noButton) - infoSection := s.infoSection() - - remainingHeight := s.height - lipgloss.Height(s.logoRendered) - (SplashScreenPaddingY * 2) - lipgloss.Height(infoSection) + remainingHeight := s.height - lipgloss.Height(s.logoRendered) - (SplashScreenPaddingY * 2) initContent := t.S().Base.AlignVertical(lipgloss.Bottom).PaddingLeft(1).Height(remainingHeight).Render( lipgloss.JoinVertical( @@ -510,7 +508,7 @@ func (s *splashCmp) View() string { content = lipgloss.JoinVertical( lipgloss.Left, s.logoRendered, - infoSection, + "", initContent, ) } else { From 40423175e8a72f35a46fc40b6f914b6c51b556d4 Mon Sep 17 00:00:00 2001 From: Kujtim Hoxha Date: Fri, 25 Jul 2025 11:30:24 +0200 Subject: [PATCH 6/6] chore: remove provider tests on startup --- internal/config/load.go | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/internal/config/load.go b/internal/config/load.go index 6a683a1c98191e0c9f78e75773fc77839143f51e..98569d41be810dd0b9382c4df56cfb3e9c1c5842 100644 --- a/internal/config/load.go +++ b/internal/config/load.go @@ -10,7 +10,6 @@ import ( "runtime" "slices" "strings" - "sync" "github.com/charmbracelet/catwalk/pkg/catwalk" "github.com/charmbracelet/crush/internal/csync" @@ -78,8 +77,6 @@ func Load(workingDir string, debug bool) (*Config, error) { return nil, fmt.Errorf("failed to configure providers: %w", err) } - go cfg.removeUnresponsiveProviders() - if !cfg.IsConfigured() { slog.Warn("No providers configured") return cfg, nil @@ -92,37 +89,6 @@ func Load(workingDir string, debug bool) (*Config, error) { return cfg, nil } -func (c *Config) removeUnresponsiveProviders() { - slog.Info("Testing provider connections") - defer slog.Info("Provider connection tests completed") - - // Test provider connections in parallel - var wg sync.WaitGroup - testResults := csync.NewMap[string, bool]() - for _, p := range c.Providers.Seq2() { - if p.Type != catwalk.TypeOpenAI && p.Type != catwalk.TypeAnthropic { - continue - } - wg.Add(1) - go func(provider ProviderConfig) { - defer wg.Done() - err := provider.TestConnection(c.resolver) - testResults.Set(provider.ID, err == nil) - if err != nil { - slog.Error("Provider connection test failed", "provider", provider.ID, "error", err) - } - }(p) - } - wg.Wait() - - // Remove failed providers - for providerID, passed := range testResults.Seq2() { - if !passed { - c.Providers.Del(providerID) - } - } -} - func (c *Config) configureProviders(env env.Env, resolver VariableResolver, knownProviders []catwalk.Provider) error { knownProviderNames := make(map[string]bool) for _, p := range knownProviders {