Skip to content
Draft
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
f841782
Fix TUI text truncation during streaming (#5006)
ariane-emory Dec 22, 2025
9fac82a
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 22, 2025
ef5fbe5
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 23, 2025
1eb8a72
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 23, 2025
4ba73cd
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 23, 2025
cbc4376
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 23, 2025
109f0e4
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 23, 2025
97b670b
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 24, 2025
146a26a
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 24, 2025
1db8c9a
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 24, 2025
e6b8af2
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 24, 2025
9b02950
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 25, 2025
380e6e5
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 25, 2025
6613472
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 25, 2025
5c963ec
Merge remote-tracking branch 'origin/dev' into fix/message-truncation
ariane-emory Dec 27, 2025
449b845
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 27, 2025
86d55c6
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 28, 2025
cfd5ba8
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 28, 2025
61b9793
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 28, 2025
ed8e541
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 28, 2025
a7889b5
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 29, 2025
40e53cc
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 29, 2025
b0e4a4c
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 29, 2025
56013e6
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 29, 2025
4e15021
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 29, 2025
3d3c9f0
Merge branch 'fix/message-truncation' of github.com:ariane-emory/open…
ariane-emory Dec 29, 2025
c91c138
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 30, 2025
9a4a262
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 30, 2025
ec64cd4
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 30, 2025
66fb8bd
Merge branch 'fix/message-truncation' of github.com:ariane-emory/open…
ariane-emory Dec 30, 2025
063cb7b
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 30, 2025
fefaad2
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 30, 2025
2cad5d2
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 30, 2025
93991b6
Merge branch 'dev' into fix/message-truncation
ariane-emory Dec 31, 2025
6f93872
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 1, 2026
42c5ff0
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 1, 2026
364e089
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 1, 2026
ed9a9b2
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 2, 2026
4cc0752
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 3, 2026
46d895c
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 3, 2026
827776a
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 4, 2026
57480e2
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 4, 2026
d069a56
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 4, 2026
8acd23b
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 5, 2026
17204f1
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 5, 2026
b3ab761
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 5, 2026
44ebe74
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 5, 2026
f026ca1
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 6, 2026
bd0ea70
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 6, 2026
aa6239e
Merge remote-tracking branch 'origin/dev' into fix/message-truncation
ariane-emory Jan 6, 2026
5dbcaf2
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 6, 2026
2bbc0cf
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 6, 2026
c8aefeb
Merge branch 'fix/message-truncation' of github.com:ariane-emory/open…
ariane-emory Jan 6, 2026
4a95db5
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 6, 2026
10a9b38
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 7, 2026
25740b8
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 7, 2026
deaa1c8
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 7, 2026
1d17f25
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 7, 2026
5f53c48
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 11, 2026
0334dd7
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 13, 2026
de9981a
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 13, 2026
4dace02
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 13, 2026
e86be6a
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 15, 2026
be7ae11
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 16, 2026
c6cfed4
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 17, 2026
be30489
Merge branch 'dev' into fix/message-truncation
ariane-emory Jan 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions packages/opencode/src/cli/cmd/tui/context/sync.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,32 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
}
const result = Binary.search(parts, event.properties.part.id, (p) => p.id)
if (result.found) {
// For TextParts during streaming, use produce to merge deltas safely
// This prevents race conditions where text-end overwrites accumulated text
const currentPart = parts[result.index]
if (currentPart.type === "text" && event.properties.part.type === "text") {
const incomingTextPart = event.properties.part as Extract<Part, { type: "text" }>
const currentTextPart = currentPart as Extract<Part, { type: "text" }>

// If this is a streaming update (has text field), use produce for safe merge
if (incomingTextPart.text !== undefined) {
setStore(
"part",
event.properties.part.messageID,
produce((draft) => {
const part = draft[result.index] as Extract<Part, { type: "text" }>
// Update text content but preserve other metadata
part.text = incomingTextPart.text
// Update timing only if end time is provided (text-end event)
if (incomingTextPart.time?.end) {
part.time = incomingTextPart.time
}
})
)
break
}
}
// Fall back to reconcile for non-text parts or non-streaming updates
setStore("part", event.properties.part.messageID, result.index, reconcile(event.properties.part))
break
}
Expand Down