Skip to content

Commit 33dca77

Browse files
committed
fix(streaming_renderer): set last_user_message earlier
Setting state.last_user_message in a format function seems like a surprising side-effect and is probably not correct if we have to re-render a part.
1 parent 7dca492 commit 33dca77

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

lua/opencode/ui/session_formatter.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,6 @@ function M.format_part_isolated(part, message_info)
745745

746746
if part.type == 'text' and part.text then
747747
if message_info.role == 'user' and part.synthetic ~= true then
748-
state.last_user_message = message_info.message
749748
M._format_user_message(vim.trim(part.text), message_info.message)
750749
content_added = true
751750
elseif message_info.role == 'assistant' then

lua/opencode/ui/streaming_renderer.lua

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ function M.reset()
1717
-- subscribe to state changes and if state.messages is cleared, it
1818
-- should clear it's state too
1919
state.messages = {}
20+
state.last_user_message = nil
2021
end
2122

2223
---Set up all subscriptions, for both local and server events
@@ -318,10 +319,13 @@ function M.on_message_updated(event)
318319
-- I think this is mostly for book keeping / stats (tokens update)
319320
state.messages[found_idx].info = message
320321
else
321-
table.insert(state.messages, { info = message, parts = {} })
322+
table.insert(state.messages, event.properties)
322323
found_idx = #state.messages
323324

324325
M._write_message_header(message, found_idx)
326+
if message.role == 'user' then
327+
state.last_user_message = message
328+
end
325329
end
326330

327331
M._scroll_to_bottom()
@@ -397,12 +401,11 @@ function M.on_part_updated(event)
397401
end
398402

399403
local formatter = require('opencode.ui.session_formatter')
400-
local message_with_parts = vim.tbl_extend('force', message, { parts = msg_wrapper.parts })
401404
local ok, formatted = pcall(formatter.format_part_isolated, part, {
402405
msg_idx = msg_idx,
403406
part_idx = part_idx,
404407
role = message.role,
405-
message = message_with_parts,
408+
message = msg_wrapper,
406409
})
407410

408411
if not ok then

0 commit comments

Comments
 (0)