diff --git a/packages/tui/internal/app/app.go b/packages/tui/internal/app/app.go index 85b21165..4a891f28 100644 --- a/packages/tui/internal/app/app.go +++ b/packages/tui/internal/app/app.go @@ -7,6 +7,7 @@ import ( "path/filepath" "slices" "strings" + "time" "log/slog" @@ -653,12 +654,12 @@ func getDefaultModel( } func (a *App) IsBusy() bool { - if a.Session.Time.Compacting > 0 { - return true - } if len(a.Messages) == 0 { return false } + if a.IsCompacting() { + return true + } lastMessage := a.Messages[len(a.Messages)-1] if casted, ok := lastMessage.Info.(opencode.AssistantMessage); ok { return casted.Time.Completed == 0 @@ -666,6 +667,13 @@ func (a *App) IsBusy() bool { return false } +func (a *App) IsCompacting() bool { + if time.Since(time.UnixMilli(int64(a.Session.Time.Compacting))) < time.Second*30 { + return true + } + return false +} + func (a *App) HasAnimatingWork() bool { for _, msg := range a.Messages { switch casted := msg.Info.(type) { diff --git a/packages/tui/internal/components/chat/editor.go b/packages/tui/internal/components/chat/editor.go index 12199392..dd24dcf1 100644 --- a/packages/tui/internal/components/chat/editor.go +++ b/packages/tui/internal/components/chat/editor.go @@ -385,7 +385,7 @@ func (m *editorComponent) Content() string { } else if m.app.IsBusy() { keyText := m.getInterruptKeyText() status := "working" - if m.app.Session.Time.Compacting > 0 { + if m.app.IsCompacting() { status = "compacting" } if m.app.CurrentPermission.ID != "" {