| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package chat
- import (
- "fmt"
- "sort"
- "github.com/charmbracelet/lipgloss"
- "github.com/charmbracelet/x/ansi"
- "github.com/sst/opencode/internal/config"
- "github.com/sst/opencode/internal/message"
- "github.com/sst/opencode/internal/tui/styles"
- "github.com/sst/opencode/internal/tui/theme"
- "github.com/sst/opencode/internal/version"
- )
- type SendMsg struct {
- Text string
- Attachments []message.Attachment
- }
- func header(width int) string {
- return lipgloss.JoinVertical(
- lipgloss.Top,
- logo(width),
- repo(width),
- "",
- cwd(width),
- )
- }
- func lspsConfigured(width int) string {
- cfg := config.Get()
- title := "LSP Servers"
- title = ansi.Truncate(title, width, "…")
- t := theme.CurrentTheme()
- baseStyle := styles.BaseStyle()
- lsps := baseStyle.
- Width(width).
- Foreground(t.Primary()).
- Bold(true).
- Render(title)
- // Get LSP names and sort them for consistent ordering
- var lspNames []string
- for name := range cfg.LSP {
- lspNames = append(lspNames, name)
- }
- sort.Strings(lspNames)
- var lspViews []string
- for _, name := range lspNames {
- lsp := cfg.LSP[name]
- lspName := baseStyle.
- Foreground(t.Text()).
- Render(fmt.Sprintf("• %s", name))
- cmd := lsp.Command
- cmd = ansi.Truncate(cmd, width-lipgloss.Width(lspName)-3, "…")
- lspPath := baseStyle.
- Foreground(t.TextMuted()).
- Render(fmt.Sprintf(" (%s)", cmd))
- lspViews = append(lspViews,
- baseStyle.
- Width(width).
- Render(
- lipgloss.JoinHorizontal(
- lipgloss.Left,
- lspName,
- lspPath,
- ),
- ),
- )
- }
- return baseStyle.
- Width(width).
- Render(
- lipgloss.JoinVertical(
- lipgloss.Left,
- lsps,
- lipgloss.JoinVertical(
- lipgloss.Left,
- lspViews...,
- ),
- ),
- )
- }
- func logo(width int) string {
- logo := fmt.Sprintf("%s %s", styles.OpenCodeIcon, "OpenCode")
- t := theme.CurrentTheme()
- baseStyle := styles.BaseStyle()
- versionText := baseStyle.
- Foreground(t.TextMuted()).
- Render(version.Version)
- return baseStyle.
- Bold(true).
- Width(width).
- Render(
- lipgloss.JoinHorizontal(
- lipgloss.Left,
- logo,
- " ",
- versionText,
- ),
- )
- }
- func repo(width int) string {
- repo := "github.com/sst/opencode"
- t := theme.CurrentTheme()
- return styles.BaseStyle().
- Foreground(t.TextMuted()).
- Width(width).
- Render(repo)
- }
- func cwd(width int) string {
- cwd := fmt.Sprintf("cwd: %s", config.WorkingDirectory())
- t := theme.CurrentTheme()
- return styles.BaseStyle().
- Foreground(t.TextMuted()).
- Width(width).
- Render(cwd)
- }
|