package tui import ( "fmt" "strings" "github.com/charmbracelet/lipgloss" tea "github.com/charmbracelet/bubbletea" "github.com/muyue/muyue/internal/proxy" ) func (m Model) renderAgents() string { var b strings.Builder b.WriteString(sectionStyle.Render("Background Agents")) b.WriteString("\n\n") agents := []struct { name string agentType proxy.AgentType tool string }{ {"Crush", proxy.AgentCrush, "Z.AI GLM"}, {"Claude Code", proxy.AgentClaude, "Anthropic Claude"}, } for _, a := range agents { status, logs := m.proxyMgr.Status(a.agentType) available := m.proxyMgr.IsAvailable(a.agentType) var statusStr string switch status { case proxy.StatusRunning: statusStr = itemWarnStyle.Render(" running") case proxy.StatusStopped: statusStr = itemMissingStyle.Render(" stopped") case proxy.StatusError: statusStr = itemMissingStyle.Render(" error") default: if available { statusStr = itemOKStyle.Render(" available") } else { statusStr = itemMissingStyle.Render(" not installed") } } nameStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#E0E0E0")).Bold(true) b.WriteString(fmt.Sprintf(" %s %s %s\n", nameStyle.Render(a.name), statusStr, lipgloss.NewStyle().Foreground(mutedColor).Render("("+a.tool+")"))) if logs != nil && len(logs) > 0 { lastLogs := logs if len(logs) > 5 { lastLogs = logs[len(logs)-5:] } for _, l := range lastLogs { b.WriteString(fmt.Sprintf(" %s %s\n", lipgloss.NewStyle().Foreground(dimColor).Render(l.Timestamp.Format("15:04:05")), l.Message)) } } } b.WriteString("\n") b.WriteString(sectionStyle.Render("Actions")) b.WriteString("\n") b.WriteString(fmt.Sprintf(" %s Start Crush\n", lipgloss.NewStyle().Foreground(baseColor).Bold(true).Render("[c]"))) b.WriteString(fmt.Sprintf(" %s Start Claude Code\n", lipgloss.NewStyle().Foreground(baseColor).Bold(true).Render("[l]"))) return b.String() } func (m Model) handleAgentsKey(msg tea.KeyMsg) (tea.Model, tea.Cmd) { switch msg.String() { case "c": if m.proxyMgr.IsAvailable(proxy.AgentCrush) { m.proxyMgr.Start(proxy.AgentCrush) } m.viewport.SetContent(m.renderContent()) case "l": if m.proxyMgr.IsAvailable(proxy.AgentClaude) { m.proxyMgr.Start(proxy.AgentClaude) } m.viewport.SetContent(m.renderContent()) } return m, nil }