diff options
| author | Dax Raad <[email protected]> | 2025-07-28 12:19:06 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-07-28 12:19:38 -0400 |
| commit | f2bdb8159fb672763efab31f71c2c25d35057ca8 (patch) | |
| tree | a2554640c5336b0e220207c5271ca3d91273360b | |
| parent | 10d749a85ee7852c22312de5e0db4f8fb346dd9e (diff) | |
| download | opencode-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.ts | 8 | ||||
| -rw-r--r-- | packages/tui/internal/components/chat/messages.go | 6 |
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:] |
