summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/components
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-06-16 10:45:13 -0500
committeradamdottv <[email protected]>2025-06-16 10:45:19 -0500
commit3c94d265701c710e3f5ad13f2212cb8476c6a674 (patch)
tree2f2e6970b49b608fcd01155506a28de5fdc6fb92 /packages/tui/internal/components
parent1a553e525f70419ac893bec1a7fc3ea839b89b2c (diff)
downloadopencode-3c94d265701c710e3f5ad13f2212cb8476c6a674.tar.gz
opencode-3c94d265701c710e3f5ad13f2212cb8476c6a674.zip
chore: remove status service
Diffstat (limited to 'packages/tui/internal/components')
-rw-r--r--packages/tui/internal/components/chat/editor.go39
-rw-r--r--packages/tui/internal/components/core/status.go137
-rw-r--r--packages/tui/internal/components/dialog/complete.go9
-rw-r--r--packages/tui/internal/components/dialog/theme.go3
4 files changed, 14 insertions, 174 deletions
diff --git a/packages/tui/internal/components/chat/editor.go b/packages/tui/internal/components/chat/editor.go
index 13bcf60ee..3c005a32e 100644
--- a/packages/tui/internal/components/chat/editor.go
+++ b/packages/tui/internal/components/chat/editor.go
@@ -17,7 +17,6 @@ import (
"github.com/sst/opencode/internal/components/dialog"
"github.com/sst/opencode/internal/image"
"github.com/sst/opencode/internal/layout"
- "github.com/sst/opencode/internal/status"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/internal/util"
@@ -157,7 +156,7 @@ func (m *editorComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
if key.Matches(msg, editorMaps.OpenEditor) {
if m.app.IsBusy() {
- status.Warn("Agent is working, please wait...")
+ // status.Warn("Agent is working, please wait...")
return m, nil
}
value := m.textarea.Value()
@@ -323,7 +322,7 @@ func (m *editorComponent) openEditor(value string) tea.Cmd {
tmpfile, err := os.CreateTemp("", "msg_*.md")
tmpfile.WriteString(value)
if err != nil {
- status.Error(err.Error())
+ // status.Error(err.Error())
return nil
}
tmpfile.Close()
@@ -333,16 +332,16 @@ func (m *editorComponent) openEditor(value string) tea.Cmd {
c.Stderr = os.Stderr
return tea.ExecProcess(c, func(err error) tea.Msg {
if err != nil {
- status.Error(err.Error())
+ // status.Error(err.Error())
return nil
}
content, err := os.ReadFile(tmpfile.Name())
if err != nil {
- status.Error(err.Error())
+ // status.Error(err.Error())
return nil
}
if len(content) == 0 {
- status.Warn("Message is empty")
+ // status.Warn("Message is empty")
return nil
}
os.Remove(tmpfile.Name())
@@ -381,7 +380,6 @@ func (m *editorComponent) send() tea.Cmd {
// return util.CmdHandler(commands.ExecuteCommandMsg{Name: commandName})
// }
// }
- slog.Info("Send message", "value", value)
return tea.Batch(
util.CmdHandler(SendMsg{
@@ -391,33 +389,6 @@ func (m *editorComponent) send() tea.Cmd {
)
}
-func (m *editorComponent) attachmentsContent() string {
- if len(m.attachments) == 0 {
- return ""
- }
-
- t := theme.CurrentTheme()
- var styledAttachments []string
- attachmentStyles := styles.BaseStyle().
- MarginLeft(1).
- Background(t.TextMuted()).
- Foreground(t.Text())
- for i, attachment := range m.attachments {
- var filename string
- if len(attachment.FileName) > 10 {
- filename = fmt.Sprintf(" %s %s...", styles.DocumentIcon, attachment.FileName[0:7])
- } else {
- filename = fmt.Sprintf(" %s %s", styles.DocumentIcon, attachment.FileName)
- }
- if m.deleteMode {
- filename = fmt.Sprintf("%d%s", i, filename)
- }
- styledAttachments = append(styledAttachments, attachmentStyles.Render(filename))
- }
- content := lipgloss.JoinHorizontal(lipgloss.Left, styledAttachments...)
- return content
-}
-
func createTextArea(existing *textarea.Model) textarea.Model {
t := theme.CurrentTheme()
bgColor := t.BackgroundElement()
diff --git a/packages/tui/internal/components/core/status.go b/packages/tui/internal/components/core/status.go
index aa3febf9b..d014d6fa3 100644
--- a/packages/tui/internal/components/core/status.go
+++ b/packages/tui/internal/components/core/status.go
@@ -3,14 +3,11 @@ package core
import (
"fmt"
"strings"
- "time"
tea "github.com/charmbracelet/bubbletea/v2"
"github.com/charmbracelet/lipgloss/v2"
"github.com/sst/opencode/internal/app"
"github.com/sst/opencode/internal/layout"
- "github.com/sst/opencode/internal/pubsub"
- "github.com/sst/opencode/internal/status"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
)
@@ -20,27 +17,12 @@ type StatusComponent interface {
}
type statusComponent struct {
- app *app.App
- queue []status.StatusMessage
- width int
- messageTTL time.Duration
- activeUntil time.Time
-}
-
-// clearMessageCmd is a command that clears status messages after a timeout
-func (m statusComponent) clearMessageCmd() tea.Cmd {
- return tea.Tick(time.Second, func(t time.Time) tea.Msg {
- return statusCleanupMsg{time: t}
- })
-}
-
-// statusCleanupMsg is a message that triggers cleanup of expired status messages
-type statusCleanupMsg struct {
- time time.Time
+ app *app.App
+ width int
}
func (m statusComponent) Init() tea.Cmd {
- return m.clearMessageCmd()
+ return nil
}
func (m statusComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
@@ -48,53 +30,6 @@ func (m statusComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case tea.WindowSizeMsg:
m.width = msg.Width
return m, nil
- case pubsub.Event[status.StatusMessage]:
- if msg.Type == status.EventStatusPublished {
- // If this is a critical message, move it to the front of the queue
- if msg.Payload.Critical {
- // Insert at the front of the queue
- m.queue = append([]status.StatusMessage{msg.Payload}, m.queue...)
-
- // Reset active time to show critical message immediately
- m.activeUntil = time.Time{}
- } else {
- // Otherwise, just add it to the queue
- m.queue = append(m.queue, msg.Payload)
-
- // If this is the first message and nothing is active, activate it immediately
- if len(m.queue) == 1 && m.activeUntil.IsZero() {
- now := time.Now()
- duration := m.messageTTL
- if msg.Payload.Duration > 0 {
- duration = msg.Payload.Duration
- }
- m.activeUntil = now.Add(duration)
- }
- }
- }
- case statusCleanupMsg:
- now := msg.time
-
- // If the active message has expired, remove it and activate the next one
- if !m.activeUntil.IsZero() && m.activeUntil.Before(now) {
- // Current message expired, remove it if we have one
- if len(m.queue) > 0 {
- m.queue = m.queue[1:]
- }
- m.activeUntil = time.Time{}
- }
-
- // If we have messages in queue but none are active, activate the first one
- if len(m.queue) > 0 && m.activeUntil.IsZero() {
- // Use custom duration if specified, otherwise use default
- duration := m.messageTTL
- if m.queue[0].Duration > 0 {
- duration = m.queue[0].Duration
- }
- m.activeUntil = now.Add(duration)
- }
-
- return m, m.clearMessageCmd()
}
return m, nil
}
@@ -190,75 +125,11 @@ func (m statusComponent) View() string {
blank := styles.BaseStyle().Background(t.Background()).Width(m.width).Render("")
return blank + "\n" + status
-
- // Display the first status message if available
- // var statusMessage string
- // if len(m.queue) > 0 {
- // sm := m.queue[0]
- // infoStyle := styles.Padded().
- // Foreground(t.Background())
- //
- // switch sm.Level {
- // case "info":
- // infoStyle = infoStyle.Background(t.Info())
- // case "warn":
- // infoStyle = infoStyle.Background(t.Warning())
- // case "error":
- // infoStyle = infoStyle.Background(t.Error())
- // case "debug":
- // infoStyle = infoStyle.Background(t.TextMuted())
- // }
- //
- // // Truncate message if it's longer than available width
- // msg := sm.Message
- // availWidth := statusWidth - 10
- //
- // // If we have enough space, show inline
- // if availWidth >= minInlineWidth {
- // if len(msg) > availWidth && availWidth > 0 {
- // msg = msg[:availWidth] + "..."
- // }
- // status += infoStyle.Width(statusWidth).Render(msg)
- // } else {
- // // Otherwise, prepare a full-width message to show above
- // if len(msg) > m.width-10 && m.width > 10 {
- // msg = msg[:m.width-10] + "..."
- // }
- // statusMessage = infoStyle.Width(m.width).Render(msg)
- //
- // // Add empty space in the status bar
- // status += styles.Padded().
- // Foreground(t.Text()).
- // Background(t.BackgroundSubtle()).
- // Width(statusWidth).
- // Render("")
- // }
- // } else {
- // status += styles.Padded().
- // Foreground(t.Text()).
- // Background(t.BackgroundSubtle()).
- // Width(statusWidth).
- // Render("")
- // }
-
- // status += diagnostics
- // status += modelName
-
- // If we have a separate status message, prepend it
- // if statusMessage != "" {
- // return statusMessage + "\n" + status
- // } else {
- // blank := styles.BaseStyle().Background(t.Background()).Width(m.width).Render("")
- // return blank + "\n" + status
- // }
}
func NewStatusCmp(app *app.App) StatusComponent {
statusComponent := &statusComponent{
- app: app,
- queue: []status.StatusMessage{},
- messageTTL: 4 * time.Second,
- activeUntil: time.Time{},
+ app: app,
}
return statusComponent
diff --git a/packages/tui/internal/components/dialog/complete.go b/packages/tui/internal/components/dialog/complete.go
index 74501f08a..9bde1fd04 100644
--- a/packages/tui/internal/components/dialog/complete.go
+++ b/packages/tui/internal/components/dialog/complete.go
@@ -7,7 +7,6 @@ import (
"github.com/charmbracelet/lipgloss/v2"
"github.com/sst/opencode/internal/components/list"
"github.com/sst/opencode/internal/layout"
- "github.com/sst/opencode/internal/status"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/internal/util"
@@ -158,7 +157,7 @@ func (c *completionDialogComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
if query != c.query {
items, err := c.completionProvider.GetChildEntries(query)
if err != nil {
- status.Error(err.Error())
+ // status.Error(err.Error())
}
c.list.SetItems(items)
@@ -189,7 +188,7 @@ func (c *completionDialogComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
} else {
items, err := c.completionProvider.GetChildEntries("")
if err != nil {
- status.Error(err.Error())
+ // status.Error(err.Error())
}
c.list.SetItems(items)
@@ -246,7 +245,7 @@ func (c *completionDialogComponent) SetProvider(provider CompletionProvider) {
c.completionProvider = provider
items, err := provider.GetChildEntries("")
if err != nil {
- status.Error(err.Error())
+ // status.Error(err.Error())
}
c.list.SetItems(items)
}
@@ -257,7 +256,7 @@ func NewCompletionDialogComponent(completionProvider CompletionProvider) Complet
items, err := completionProvider.GetChildEntries("")
if err != nil {
- status.Error(err.Error())
+ // status.Error(err.Error())
}
li := list.NewListComponent(
diff --git a/packages/tui/internal/components/dialog/theme.go b/packages/tui/internal/components/dialog/theme.go
index f045b1b09..50472428b 100644
--- a/packages/tui/internal/components/dialog/theme.go
+++ b/packages/tui/internal/components/dialog/theme.go
@@ -5,7 +5,6 @@ import (
list "github.com/sst/opencode/internal/components/list"
"github.com/sst/opencode/internal/components/modal"
"github.com/sst/opencode/internal/layout"
- "github.com/sst/opencode/internal/status"
"github.com/sst/opencode/internal/styles"
"github.com/sst/opencode/internal/theme"
"github.com/sst/opencode/internal/util"
@@ -71,7 +70,7 @@ func (t *themeDialog) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return t, util.CmdHandler(modal.CloseModalMsg{})
}
if err := theme.SetTheme(selectedTheme); err != nil {
- status.Error(err.Error())
+ // status.Error(err.Error())
return t, nil
}
return t, tea.Sequence(