diff --git a/internal/agent/agent.go b/internal/agent/agent.go index b2074b066b49038703a05dbe190dbe8e18a835f9..915012d810ba8035f7c2ade7a85a249f200da19e 100644 --- a/internal/agent/agent.go +++ b/internal/agent/agent.go @@ -529,6 +529,8 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy currentAssistant.AddFinish(message.FinishReasonCanceled, "User canceled request", "") } else if isPermissionErr { currentAssistant.AddFinish(message.FinishReasonPermissionDenied, "User denied permission", "") + } else if errors.Is(err, hyper.ErrUnauthorized) { + currentAssistant.AddFinish(message.FinishReasonError, "Unauthorized", `Authentication with Hyper failed. Please run "crush auth" to re-authenticate.`) } else if errors.Is(err, hyper.ErrNoCredits) { url := hyper.BaseURL() link := linkStyle.Hyperlink(url, "id=hyper").Render(url) diff --git a/internal/agent/hyper/provider.go b/internal/agent/hyper/provider.go index e4c1cd85eb1171226f48ff496ea238ff2121619d..5c8f7c3e4eced6af66113241f8137e744fda2463 100644 --- a/internal/agent/hyper/provider.go +++ b/internal/agent/hyper/provider.go @@ -69,7 +69,10 @@ var BaseURL = sync.OnceValue(func() string { return cmp.Or(os.Getenv("HYPER_URL"), defaultBaseURL) }) -var ErrNoCredits = errors.New("you're out of credits") +var ( + ErrNoCredits = errors.New("you're out of credits") + ErrUnauthorized = errors.New("unauthorized") +) type options struct { baseURL string @@ -183,7 +186,7 @@ func (m *languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy. return nil, toProviderError(resp, retryAfter(resp)) case http.StatusUnauthorized: _ = resp.Body.Close() - return nil, toProviderError(resp, "") + return nil, ErrUnauthorized case http.StatusPaymentRequired: _ = resp.Body.Close() return nil, ErrNoCredits diff --git a/internal/ui/model/ui.go b/internal/ui/model/ui.go index edd5035522eb4df6d7dea63ca16da20e1f20489c..75773cf4f3bdf065e6aa4fa71f868443e546cb51 100644 --- a/internal/ui/model/ui.go +++ b/internal/ui/model/ui.go @@ -2964,7 +2964,7 @@ func (m *UI) sendMessage(content string, attachments ...message.Attachment) tea. } return util.InfoMsg{ Type: util.InfoTypeError, - Msg: fmt.Sprintf("Failed to run agent: %v", err), + Msg: fmt.Sprintf("%v", err), } } return nil