wip: refactoring tui

This commit is contained in:
adamdottv
2025-06-04 13:52:23 -05:00
parent f34a3b6f67
commit 093e64eb54
6 changed files with 70 additions and 50 deletions

View File

@@ -211,10 +211,10 @@ func (m *editorCmp) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, nil
}
if key.Matches(msg, editorMaps.OpenEditor) {
// if m.app.PrimaryAgentOLD.IsSessionBusy(m.app.CurrentSessionOLD.ID) {
// status.Warn("Agent is working, please wait...")
// return m, nil
// }
if m.app.IsBusy() {
status.Warn("Agent is working, please wait...")
return m, nil
}
value := m.textarea.Value()
m.textarea.Reset()
return m, m.openEditor(value)

View File

@@ -93,6 +93,7 @@ func renderAssistantMessage(
msg client.MessageInfo,
width int,
showToolMessages bool,
appInfo client.AppInfo,
) string {
t := theme.CurrentTheme()
style := styles.BaseStyle().
@@ -144,7 +145,7 @@ func renderAssistantMessage(
if _, ok := msg.Metadata.Tool[toolCall.ToolCallId]; ok {
metadata = msg.Metadata.Tool[toolCall.ToolCallId].(map[string]any)
}
message := renderToolInvocation(toolCall, result, metadata, width)
message := renderToolInvocation(toolCall, result, metadata, appInfo, width)
messages = append(messages, message)
}
}
@@ -152,7 +153,7 @@ func renderAssistantMessage(
return strings.Join(messages, "\n\n")
}
func renderToolInvocation(toolCall client.MessageToolInvocationToolCall, result *string, metadata map[string]any, width int) string {
func renderToolInvocation(toolCall client.MessageToolInvocationToolCall, result *string, metadata map[string]any, appInfo client.AppInfo, width int) string {
t := theme.CurrentTheme()
style := styles.BaseStyle().
BorderLeft(true).
@@ -176,6 +177,7 @@ func renderToolInvocation(toolCall client.MessageToolInvocationToolCall, result
if toolCall.ToolName == "opencode_edit" {
filename := toolMap["filePath"].(string)
filename = strings.TrimPrefix(filename, appInfo.Path.Root+"/")
title = styles.Padded().Render(fmt.Sprintf("%s: %s", toolName, filename))
if finished && metadata["diff"] != nil {
patch := metadata["diff"].(string)
@@ -189,6 +191,8 @@ func renderToolInvocation(toolCall client.MessageToolInvocationToolCall, result
))
} else if toolCall.ToolName == "opencode_read" {
filename := toolMap["filePath"].(string)
filename = strings.TrimPrefix(filename, appInfo.Path.Root+"/")
title = styles.Padded().Render(fmt.Sprintf("%s: %s", toolName, filename))
ext := filepath.Ext(filename)
if ext == "" {
ext = ""

View File

@@ -108,7 +108,7 @@ func (m *messagesCmp) renderView() {
content := renderUserMessage(m.app.Info.User, msg, m.width)
messages = append(messages, content+"\n")
case client.Assistant:
content := renderAssistantMessage(msg, m.width, m.showToolMessages)
content := renderAssistantMessage(msg, m.width, m.showToolMessages, *m.app.Info)
messages = append(messages, content+"\n")
}
}
@@ -215,9 +215,7 @@ func (m *messagesCmp) working() string {
baseStyle := styles.BaseStyle()
task := ""
lastMessage := m.app.Messages[len(m.app.Messages)-1]
if lastMessage.Metadata.Time.Completed == nil {
if m.app.IsBusy() {
task = "Working..."
}
// lastMessage := m.app.Messages[len(m.app.Messages)-1]
@@ -245,28 +243,28 @@ func (m *messagesCmp) help() string {
text := ""
// if m.app.PrimaryAgentOLD.IsBusy() {
// text += lipgloss.JoinHorizontal(
// lipgloss.Left,
// baseStyle.Foreground(t.TextMuted()).Bold(true).Render("press "),
// baseStyle.Foreground(t.Text()).Bold(true).Render("esc"),
// baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to interrupt"),
// )
// } else {
text += lipgloss.JoinHorizontal(
lipgloss.Left,
baseStyle.Foreground(t.Text()).Bold(true).Render("enter"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to send,"),
baseStyle.Foreground(t.Text()).Bold(true).Render(" \\"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render("+"),
baseStyle.Foreground(t.Text()).Bold(true).Render("enter"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" for newline,"),
baseStyle.Foreground(t.Text()).Bold(true).Render(" ↑↓"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" for history,"),
baseStyle.Foreground(t.Text()).Bold(true).Render(" ctrl+h"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to toggle tool messages"),
)
// }
if m.app.IsBusy() {
text += lipgloss.JoinHorizontal(
lipgloss.Left,
baseStyle.Foreground(t.TextMuted()).Bold(true).Render("press "),
baseStyle.Foreground(t.Text()).Bold(true).Render("esc"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to interrupt"),
)
} else {
text += lipgloss.JoinHorizontal(
lipgloss.Left,
baseStyle.Foreground(t.Text()).Bold(true).Render("enter"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to send,"),
baseStyle.Foreground(t.Text()).Bold(true).Render(" \\"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render("+"),
baseStyle.Foreground(t.Text()).Bold(true).Render("enter"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" for newline,"),
baseStyle.Foreground(t.Text()).Bold(true).Render(" ↑↓"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" for history,"),
baseStyle.Foreground(t.Text()).Bold(true).Render(" ctrl+h"),
baseStyle.Foreground(t.TextMuted()).Bold(true).Render(" to toggle tool messages"),
)
}
return baseStyle.
Width(m.width).
Render(text)