summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-07-28 12:19:06 -0400
committerDax Raad <[email protected]>2025-07-28 12:19:38 -0400
commitf2bdb8159fb672763efab31f71c2c25d35057ca8 (patch)
treea2554640c5336b0e220207c5271ca3d91273360b
parent10d749a85ee7852c22312de5e0db4f8fb346dd9e (diff)
downloadopencode-f2bdb8159fb672763efab31f71c2c25d35057ca8.tar.gz
opencode-f2bdb8159fb672763efab31f71c2c25d35057ca8.zip
fix phantom tool call failed messages and empty text parts with some models
-rw-r--r--packages/opencode/src/session/index.ts8
-rw-r--r--packages/tui/internal/components/chat/messages.go6
2 files changed, 10 insertions, 4 deletions
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 5ad6e7da4..799097e85 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -882,7 +882,7 @@ export namespace Session {
case "tool-input-start":
const part = await updatePart({
- id: Identifier.ascending("part"),
+ id: toolCalls[value.id]?.id ?? Identifier.ascending("part"),
messageID: assistantMsg.id,
sessionID: assistantMsg.sessionID,
type: "tool",
@@ -1029,17 +1029,17 @@ export namespace Session {
case "text":
if (currentText) {
currentText.text += value.text
- await updatePart(currentText)
+ if (currentText.text) await updatePart(currentText)
}
break
case "text-end":
- if (currentText && currentText.text) {
+ if (currentText) {
+ currentText.text = currentText.text.trimEnd()
currentText.time = {
start: Date.now(),
end: Date.now(),
}
- currentText.text = currentText.text.trimEnd()
await updatePart(currentText)
}
currentText = undefined
diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go
index d2da2c609..a10c13a0f 100644
--- a/packages/tui/internal/components/chat/messages.go
+++ b/packages/tui/internal/components/chat/messages.go
@@ -281,6 +281,9 @@ func (m *messagesComponent) renderView() tea.Cmd {
if part.Synthetic {
continue
}
+ if part.Text == "" {
+ continue
+ }
remainingParts := message.Parts[partIndex+1:]
fileParts := make([]opencode.FilePart, 0)
for _, part := range remainingParts {
@@ -365,6 +368,9 @@ func (m *messagesComponent) renderView() tea.Cmd {
if reverted {
continue
}
+ if part.Text == "" {
+ continue
+ }
hasTextPart = true
finished := part.Time.End > 0
remainingParts := message.Parts[partIndex+1:]