Skip to content

Commit a0f4721

Browse files
committed
Simplify message mounting flow and remove pending queue
Pass the optional welcome message directly to the container, drop the unused `init_messages` parameter and pending‑mount list, and replace the `enqueue_mount_messages` pattern with immediate scheduling of `mount_messages`. Adjust `append_stream_message_content` to collect new messages and invoke mounting in one step.
1 parent 93a8d3c commit a0f4721

2 files changed

Lines changed: 9 additions & 29 deletions

File tree

ommlds/cli/chat/interfaces/textual/drivers/interface.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def __init__(
6868
self._background_terminal_renderer = background_terminal_renderer
6969
self._clipboard = clipboard
7070
self._state_listener = state_listener
71+
self._welcome_message = welcome_message
7172
self._chat_id = chat_id
7273

7374
#
@@ -85,7 +86,6 @@ def __init__(
8586
#
8687

8788
self._messages_container = MessagesContainer(
88-
[welcome_message] if welcome_message is not None else [],
8989
clipboard=self._clipboard,
9090
chat_uuid=chat_id.v,
9191
)
@@ -123,7 +123,8 @@ async def on_mount(self) -> None:
123123
check.state(self._chat_action_queue_task is None)
124124
self._chat_action_queue_task = asyncio.create_task(self._chat_action_queue_task_main())
125125

126-
await self._messages_container.mount_messages()
126+
if (wm := self._welcome_message) is not None:
127+
await self._messages_container.mount_messages(wm)
127128

128129
self.call_after_refresh(self._chat_driver.start)
129130

@@ -194,8 +195,7 @@ async def mount_messages(
194195
for w in wx:
195196
self._suppressed_background_terminal_render_set.add(w)
196197

197-
await self._messages_container.enqueue_mount_messages(*wx)
198-
self.call_later(self._messages_container.mount_messages)
198+
self.call_later(self._messages_container.mount_messages, *wx)
199199

200200
##
201201
# Chat events
@@ -265,8 +265,7 @@ async def _handle_chat_queue_event(self, ev: ta.Any) -> None:
265265
)
266266

267267
self._suppressed_background_terminal_render_set.add(tm)
268-
await self._messages_container.enqueue_mount_messages(tm)
269-
self.call_later(self._messages_container.mount_messages)
268+
self.call_later(self._messages_container.mount_messages, tm)
270269

271270
elif isinstance(ev, mc.ToolUseResultEvent):
272271
pass

ommlds/cli/chat/interfaces/textual/widgets/messages/container.py

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ class MessagesContainer(
2525

2626
def __init__(
2727
self,
28-
init_messages: ta.Sequence[Message] | None = None,
29-
*,
3028
clipboard: cpb.Clipboard | None = None,
3129
chat_uuid: uuid.UUID | None = None,
3230
) -> None:
@@ -37,9 +35,6 @@ def __init__(
3735

3836
self._messages_by_uuid: dict[uuid.UUID, Message] = {}
3937

40-
if init_messages:
41-
self._pending_mount_messages = list(init_messages)
42-
4338
@property
4439
def chat_uuid(self) -> uuid.UUID | None:
4540
return self._chat_uuid
@@ -68,18 +63,8 @@ def _scroll_messages_to_bottom_and_anchor(self) -> None:
6863

6964
#
7065

71-
_pending_mount_messages: list[Message] | None = None
72-
73-
async def enqueue_mount_messages(self, *messages: Message) -> None:
74-
if (lst := self._pending_mount_messages) is None:
75-
lst = self._pending_mount_messages = []
76-
77-
lst.extend(messages)
78-
79-
#
80-
8166
async def append_stream_message_content(self, parts: ta.Sequence[StreamMessagePart]) -> None:
82-
mount_messages = False
67+
mount_messages: list[Message] = []
8368
refresh = False
8469
scroll_to_bottom = False
8570

@@ -93,9 +78,7 @@ async def append_stream_message_content(self, parts: ta.Sequence[StreamMessagePa
9378

9479
self._messages_by_uuid[message_uuid] = aim
9580

96-
await self.enqueue_mount_messages(aim)
97-
98-
mount_messages = True
81+
mount_messages.append(aim)
9982
refresh = True
10083

10184
else:
@@ -118,7 +101,7 @@ async def append_stream_message_content(self, parts: ta.Sequence[StreamMessagePa
118101
raise TypeError(part)
119102

120103
if mount_messages:
121-
self.call_later(self.mount_messages)
104+
self.call_later(self.mount_messages, *mount_messages)
122105
if scroll_to_bottom:
123106
self.call_after_refresh(self._scroll_messages_to_bottom_and_anchor)
124107
if refresh:
@@ -129,7 +112,7 @@ async def append_stream_message_content(self, parts: ta.Sequence[StreamMessagePa
129112
async def mount_messages(self, *messages: Message) -> None:
130113
was_at_bottom = self._is_messages_at_bottom()
131114

132-
for msg in [*(self._pending_mount_messages or []), *messages]:
115+
for msg in messages:
133116
if (mu := msg.message_uuid) is not None:
134117
try:
135118
xm = self._messages_by_uuid[mu]
@@ -147,8 +130,6 @@ async def mount_messages(self, *messages: Message) -> None:
147130
if isinstance(msg, StreamMessage):
148131
await msg.start_stream()
149132

150-
self._pending_mount_messages = None
151-
152133
self.call_after_refresh(self._scroll_messages_to_bottom)
153134

154135
if was_at_bottom:

0 commit comments

Comments
 (0)