summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoradamdotdevin <[email protected]>2025-07-15 19:09:16 -0500
committeradamdotdevin <[email protected]>2025-07-16 06:09:27 -0500
commit9f5b59f3362cdfe42173cdf38bcba3ba6b935b94 (patch)
tree8426c8b33c17e90a9c91716b283f3f812b5dbd07
parent01c125b05830fa7df4f04ec24a51fc2bf53c9965 (diff)
downloadopencode-9f5b59f3362cdfe42173cdf38bcba3ba6b935b94.tar.gz
opencode-9f5b59f3362cdfe42173cdf38bcba3ba6b935b94.zip
chore: messages cleanup
-rw-r--r--packages/tui/internal/components/chat/cache.go20
-rw-r--r--packages/tui/internal/components/chat/messages.go10
2 files changed, 15 insertions, 15 deletions
diff --git a/packages/tui/internal/components/chat/cache.go b/packages/tui/internal/components/chat/cache.go
index ab034c411..454f1a5a9 100644
--- a/packages/tui/internal/components/chat/cache.go
+++ b/packages/tui/internal/components/chat/cache.go
@@ -7,21 +7,21 @@ import (
"sync"
)
-// MessageCache caches rendered messages to avoid re-rendering
-type MessageCache struct {
+// PartCache caches rendered messages to avoid re-rendering
+type PartCache struct {
mu sync.RWMutex
cache map[string]string
}
-// NewMessageCache creates a new message cache
-func NewMessageCache() *MessageCache {
- return &MessageCache{
+// NewPartCache creates a new message cache
+func NewPartCache() *PartCache {
+ return &PartCache{
cache: make(map[string]string),
}
}
// generateKey creates a unique key for a message based on its content and rendering parameters
-func (c *MessageCache) GenerateKey(params ...any) string {
+func (c *PartCache) GenerateKey(params ...any) string {
h := fnv.New64a()
for _, param := range params {
h.Write(fmt.Appendf(nil, ":%v", param))
@@ -30,7 +30,7 @@ func (c *MessageCache) GenerateKey(params ...any) string {
}
// Get retrieves a cached rendered message
-func (c *MessageCache) Get(key string) (string, bool) {
+func (c *PartCache) Get(key string) (string, bool) {
c.mu.RLock()
defer c.mu.RUnlock()
@@ -39,14 +39,14 @@ func (c *MessageCache) Get(key string) (string, bool) {
}
// Set stores a rendered message in the cache
-func (c *MessageCache) Set(key string, content string) {
+func (c *PartCache) Set(key string, content string) {
c.mu.Lock()
defer c.mu.Unlock()
c.cache[key] = content
}
// Clear removes all entries from the cache
-func (c *MessageCache) Clear() {
+func (c *PartCache) Clear() {
c.mu.Lock()
defer c.mu.Unlock()
@@ -54,7 +54,7 @@ func (c *MessageCache) Clear() {
}
// Size returns the number of cached entries
-func (c *MessageCache) Size() int {
+func (c *PartCache) Size() int {
c.mu.RLock()
defer c.mu.RUnlock()
diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go
index 9ee0a348a..436bf7107 100644
--- a/packages/tui/internal/components/chat/messages.go
+++ b/packages/tui/internal/components/chat/messages.go
@@ -35,7 +35,7 @@ type messagesComponent struct {
width int
app *app.App
viewport viewport.Model
- cache *MessageCache
+ cache *PartCache
rendering bool
showToolDetails bool
tail bool
@@ -128,10 +128,12 @@ func (m *messagesComponent) renderView(width int) {
switch casted := message.Info.(type) {
case opencode.UserMessage:
- userLoop:
for partIndex, part := range message.Parts {
switch part := part.(type) {
case opencode.TextPart:
+ if part.Synthetic {
+ continue
+ }
remainingParts := message.Parts[partIndex+1:]
fileParts := make([]opencode.FilePart, 0)
for _, part := range remainingParts {
@@ -190,8 +192,6 @@ func (m *messagesComponent) renderView(width int) {
m.lineCount += lipgloss.Height(content) + 1
blocks = append(blocks, content)
}
- // Only render the first text part
- break userLoop
}
}
@@ -574,7 +574,7 @@ func NewMessagesComponent(app *app.App) MessagesComponent {
app: app,
viewport: vp,
showToolDetails: true,
- cache: NewMessageCache(),
+ cache: NewPartCache(),
tail: true,
}
}